范围内。请注意如果系统的 C 库不支持 IPv6 地址,那么 IPv6 的格式将被拒绝。
这个域只适用于 host,hostssl 和 hostnossl 记录。
IP-address
IP-mask
这些方法可以用于作为 CIDR-address 表示法的替补。 它不是声明掩码的长度,而是在另外一个字段里声明实际的掩码。 比如,255.0.0.0 表示 IPv4 CIDR 掩码长度 8,而 255.255.255.255 表示 CIDR 掩码长度 32。 同样的匹配逻辑将用于一个点分的 IP-mask。
这些字段只适用于 host, hostssl, 和 hostnossl 记录。
authentication-method(认证方法)
声明通过这条记录联接的时候使用的认证方法。 可能的选择在下面简介,
trust
无条件地允许联接。这个方法允许任何可以与PostgreSQL
数据库服务器联接的用户以他们期望的任意 PostgreSQL
数据库用户身份进行联接,而不需要口令。
reject
联接无条件拒绝。常用于从一个组中"过滤"某些主机。
md5
crypt
要求客户端提供一个 crypt() 加密的口令用于认证。 7.2 以前的客户端只能支持 crypt。 对于 7.2 以及以后的客户端,我们建议使用 md5。
password
要求客户端提供一个未加密的口令进行认证。 因为口令是以明文形式在网络上传递的, 所以我们不应该在不安全的网络上使用这个方式。 www.2cto.com
krb4
用 Kerberos V4 认证用户。只有在进行 TCP/IP 联接的时候才能用。 (译注:Kerberos,"克尔波洛斯",故希腊神话冥王哈得斯的多头看门狗。 Kerberos 是 MIT 开发出来的基与对称加密算法的认证协议和/或密钥交换方法。 其特点是需要两个不同用途的服务器,一个用于认证身份, 一个用于通道两端用户的密钥交换。同时 Kerberos 对网络时间同步要求比较高,以防止回放攻击,因此通常伴随 NTP 服务。)
krb5
用 Kerberos V5 认证用户。只有在进行 TCP/IP 联接的时候才能用。 (译注:Kerberos V5 是上面 V4 的改良,主要是不再依赖 DES 算法, 同时增加了一些新特性。)
ident
获取客户的操作系统名(对于 TCP/IP 联接,用户的身份是通过与运行在客户端上的 ident 服务器联接进行判断的,对于本地联接,它是从操作系统获取的。) 然后检查一下,看看用户是否允许以要求的数据库用户进行联接, 方法是参照在 ident 关键字后面声明的映射。
pam
使用操作系统提供的可插入的认证模块服务 (Pluggable Authentication Modules) (PAM)来认证。
authentication-option
这个可选的字段的含义取决与选择的认证方法。细节在下面。
用 @ 构造包含的文件是当作一列名字读取的, 这些名字可以用空白或者逗号分隔。注释用 # 引入, 就像在 pg_hba.conf 里那样,允许嵌套 @ 构造。 除非跟在 @ 后面的文件名是一个绝对路径,否则被当作与包含该文件的目录相对的路径。
因为认证时系统是为每个联接请求顺序检查 pg_hba.conf 里的记录的,所以这些记录的顺序是非常关键的。 通常,靠前的记录有比较严的联接匹配参数和比较弱的 认证方法,而靠后的记录有比较松的匹配参数和比较严的认证方法。 比如,我们一般都希望对本地 TCP/IP 联接使用 trust 认证, 而对远端的 TCP/IP 联接要求口令。在这种情况下我们将 trust 认证方法用于来自 127.0.0.1 的联接,这条记录将出现在允许更广泛的客户端 IP 地址的使用口令认证的记录前面。
在启动和主服务器进程( postmaster )收到SIGHUP 信号的时候, 系统都会重新装载 pg_hba.conf 文件。 如果你在活跃的系统上编辑了该文件,你就需要用 kill 向 postmaster 发一个 SIGHUP信号,好让它重新读取该文件。
在 pg_hba.conf 记录的一些例子。
阅读下文理解不同认证方法的细节。
pg_hba.conf 记录的例子 www.2cto.com
# 允许在本机上的任何用户使用 Unix 域套接字(本地连接的缺省)
# 以任何身份联接任何数据库
#
#
# TYPE DATABASE USER CIDR-ADDRESS METHOD
local all all trust
# 和上面相同,但是使用的是自环的(loopback)TCP/IP 连接
#
# TYPE DATABASE USER CIDR-ADDRESS METHOD
host all all 127.0.0.1/32 trust
# 和上面一行相同,但是用的是独立的掩码字段
#
# TYPE DATABASE USER IP-ADDRESS METHOD
host all all 127.0.0.1 255.255.255.255 trust
# 允许 IP 地址为 192.168.93.x 的任何主机与数据库
# "template1" 相连,用与他们在自己的主机上相同 ident 的用户名标识他自己
# (通常是他的 Unix 用户名)
# TYPE DATABASE USER CIDR-ADDRESS METHOD
host template1 all 192.168.93.0/24 ident sameuser
# 允许来自主机 192.168.12.10 的用户与 "template1" 数据库联接,
# 只要该用户提供了在正确的口令。
# TYPE DATABASE USER CIDR-ADDRESS METHOD
host template1 all 192.168.12.10/32 md5
# 如果前面没有其它 "host" 行,那么下面两行将拒绝所有来自
# 192.168.54.1 的联接请求 (因为前面的记录先匹配),
# 但是允许来自互联网上其它任何地方的有效的 Kerberos 5 认证的联接
# 零掩码表示不考虑主机 IP 的任何位。因此它匹配任何主机:
# TYPE DATABASE USER CIDR-ADDRESS METHOD
host all all 192.168.54.1/32 reject
host all all 0.0.0.0/0 krb5
# 允许来自 192.168.x.x 的任何用户与任意数据库联接,只要他们通过 ident 检查
# 但如果 ident 说该用户是 "bryanh" 而他要求以 PostgreSQL 用户 "guest1" 联接,
# 那么只有在 `pg_ident.conf' 里有 "omi