pg_hba.conf 是用于以主机为基础的认证配置文件,其中hba(host-based authentication)是基于主机认证的意思。pg_hba.conf 的常用格式是一套记录,每行一条。每条记录声明一种联接类型、一个客户端 IP 地址方位、一个数据库名、一个用户名字以及对匹配这些参数的联接使用的认证方法,格式为:
TYPE | DATABASE | USER | CIDR-ADDRESS | METHOD |
下面将详细介绍这些参数的用法。
Type声明记录所匹配的联接类型,共有四种联接类型,分别为local、host、hostsll和hostnosll。
除非服务器带有合适的 listen_addresses 配置参数值启动,否则将不可能进行远程 TCP/IP 连接,因为缺省的行为是只监听本地地址(localhost)的联接。
声明记录所匹配的数据库名称。值“all”表明该记录匹配所有数据库;值“sameuser”表示如果被请求的数据库和请求的用户同名,则匹配;值“samerole”表示请求的用户必须是一个与数据库同名的组中的成员(“samegroup”是一个已经废弃但仍然被接受的“samerole”的同义词)。在其他情况下,这就是一个特定的 PostgreSQL 的名字。我们可以通过用逗号分隔的方法声明多个数据库,通过对文件前缀 @ 来声明一个独立的包含数据库名的文件。
声明所匹配的数据库用户。值“all”表明它匹配于所有用户;否则,它就是特定数据库用户的名字,或者是一个前缀 + 的组名称(请注意,在 PostgreSQL 里,用户和组没有真正的区别,+ 实际上只是意味着“匹配任何直接或者间接属于这个角色的成员”,而没有 + 记号的名字只匹配指定的角色)。可以通过用逗号分隔的方法声明多个用户名,通过对文件名前缀 @ 来声明一个包含用户名的文件。
声明这条记录匹配的客户端机器的 IP 地址范围。它包含一个标准的点分十进制的 IP 地址和一个 CIDR 掩码长度(IP 地址只能用数值声明,不能用域或者主机名)。掩码长度表示客户端 IP 地址必须匹配的高位二进制位数。在给出的 IP 地址里,这个长度的右边的二进制位必须为零。在 IP 地址、“/”、和 CIDR 掩码长度之间不能有空白。
典型的 CIDR-ADDRESS 是 172.20.143.89/32(表示一个主机),或者 172.20.143.0/24(表示一个网络)。要声明单个主机,则需给 IPv4 地址声明 CIDR 掩码 32,给 IPv6 地址声明 128。
以 IPv4 格式给出的 IP 地址会匹配那些拥有对应地址的 IPv6 连接,比如 127.0.0.1 将匹配 IPv6 地址 ::ffff:127.0.0.1。 而一个以 IPv6 格式给出的记录将只匹配 IPv6 连接,即使对应的地址在 IPv4-in-IPv6 范围内。请注意如果系统的 C 库不支持 IPv6 地址,那么 IPv6 的格式将被拒绝。
这个域只适用于 host、hostssl 和 hostnossl 记录。
METHOD 匹配记录的认证方法。PostgreSQL 提供五种认证方法,分别为 trust、reject、md5、crypt和 password。
例如,允许 IP 地址为 192.168.93.x 的任一主机与"postgres"数据库连接,并且这些主机连接时需要提供正确的口令。该条记录为:
TYPE | DATABASE | USER | CIDR-ADDRESS | METHOD |
host | postgres | all | 192.168.93.0/24 | md5 |
postgresql.conf 是数据库配置文件,它提供了许多数据库配置参数,包括文件位置、连接和认证、资源消耗、预写式日志、查询规则、错误报告和日志、运行时统计、自动清理、客户端连接缺省、锁管理、版本和平台兼容性、预置的选项和客户化的选项等13个内容的参数,并且这些参数在没有进行设置之前都处于注释状态,如何设置请参考 PostgreSQL 数据库的帮助文档。这里只介绍配置远程连接时需要修改的两个参数:listen_address和port,即取消注释。设置方法如下所示:
listen_address='*'
port = 5432