postgresql数据库 pg
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
postgresql数据库 pg_hba.conf配置说明
当一个客户端应用与数据库服务器进行联接时,它声明它将以哪个 PostgreSQL 用户的名称进行联接,就象我们登录一台 Unix 计算机一样。在 SQL 环境里,活跃的数据库用户名决定数据库对象的各种访问权限—参阅Chapter 17获取更多信息。因此,实际上我们要限制的是用户可以联接的数据库。
认证是数据库服务器建立客户端的标识,然后通过一些手段判断是否允许此客户端应用(或者运行这个客户端应用的用户)与它所要求的用户名进行联接的过程。
PostgreSQL 提供多种不同的客户端认证方式。认证某个特定客户端联接所使用的方法可以通过基于(客户端)的主机地址,数据库和用户的方式进行选择;一些认证方法还允许你通过用户名进行限制。
PostgreSQL 用户名在逻辑上是和服务器运行的操作系统用户名相互独立的。如果某个服务器的所有用户在那台服务器机器上也有帐号,那么给数据库用户赋与操作系统用户名是有意义的。不过,一个接收远程访问的服务器很有可能有许多没有本地操作系统帐号的用户,因而在这种情况下数据库用户和操作系统用户名之间不必有任何联系。
pg_hba.conf 文件
客户端认证是由一个配置文件控制的,通常其文件名是 pg_hba.conf,存放在数据库集群的数据目录里。(HBA 的意思是 host-based authentication:基于主机的认证。)在initdb初始化数据目录的时候,它会安装一个缺省的文件。不过我们也可以把认证配置文件放在其它地方;参阅 hba_file 配置参数。
文件 pg_hba.conf 的常用格式是一套记录,每行一条。空白行行被忽略,井号( # )开头的注释也被忽略。一条记录是由若干用空格和/或 tab 分隔的字段组成。如果字段用引号包围,那么它可以包含空白。记录不能跨行存在。
每条记录声明一种联接类型,一个客户端 IP 地址范围(如果和联接类型相关的话),一个数据库名,一个用户名字,以及对匹配这些参数的联接使用的认证方法。第一条匹配联接类型,客户端地址和联接企图请求的数据库名和用户名的记录将用于执行认证。这个处理过程没有"跨越"或者"回头"的说法:如果选择了一条记录而且认证失败,那么将不考虑后面的记录。如果没有匹配的记录,那么访问将被拒绝。
每条记录可以下面七种格式之一
local database user authentication-method [authentication-opt ion]
host database user CIDR-address authentication-method [auth entication-option]
hostssl database user CIDR-address authentication-method [auth
entication-option]
hostnossl database user CIDR-address authentication-method [auth entication-option]
host database user IP-address IP-mask authentication-method [authentication-option]
hostssl database user IP-address IP-mask authentication-method [authentication-option]
hostnossl database user IP-address IP-mask authentication-method [authentication-option]
各个字段的含义如下:
local
这条记录匹配通过 Unix 域套接字进行的联接企图。没有这种类型的记录,就不允许 Unix 域套接字的联接。
host
这条记录匹配通过 TCP/IP 进行的联接尝试。 host 记录匹配 SSL 和非 SSL 的连接请求。
注意: 除非服务器带着合适的 listen_addresses 配置参数值启动,否则将不可能进行远程的 TCP/IP 连接,因为缺省的行为是只监听本地自环地址
localhost 的连接。
hostssl
这条记录匹配使用 TCP/IP 的 SSL 联接企图。但必须是使用 SSL 加密的联接。
要使用这个选项,制作服务器的时候必须打开 SSL 支持。而且在服务器启动的时候,必须SSL选项通过配置选项ssl打开。
hostnossl
这个记录与 hostssl 有着正相反的逻辑:它只匹配那些在 TCP/IP 上不使用SSL 的连接请求。
database
声明记录所匹配的数据库。值 all 表明该记录匹配所有数据库,值 sameuser 表示如果被请求的数据库和请求的用户同名,则匹配。 samegroup 表示请求的用户必须是一个与数据库同名的组中的成员。在其他情况里,这就是一个特定的 PostgreSQL 的名字。我们可以通过用逗号分隔的方法声明多个数据库。一个包含数据库名的文件可以通过对该文件前缀 @ 来声明。
user
为这条记录声明所匹配的PostgreSQL用户。值 all 表明它匹配于所有用户。
否则,它就是特定 PostgreSQL 用户的名字。多个用户名可以通过用逗号分隔的方法声明。组名字可以通过用 + 做组名字前缀来声明。一个包含用户名的文件可以通过在文件名前面前缀 @ 来声明。该文件必需和 pg_hba.conf 在同一个目录。
CIDR-address
声明这条记录匹配的客户端机器的 IP 地址范围。它包含一个标准的点分十进制的 IP 地址和一个 CIDR 掩码长度。(IP 地址只能用数值声明,不能用域或者主机名。)掩码长度表示客户端 IP 地址必须匹配的高位二进制位数。在给出的 IP 地址里,这个长度的右边的二进制位必须为零。在 IP 地址,/,和 CIDR 掩码长度之间不能有空白。
典型的 CIDR 地址是 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 记录。
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
联接无条件拒绝。常用于从一个组中"过滤"某些主机。