PostgreSQL的 pg_hba.conf中peer md5 trust参数是啥意思啊?
网友回复
客户端认证是由一个配置文件(通常名为pg_hba.conf)控制的, 它存放在数据库集群的数据目录里。HBA的意思是"host-based authentication", 也就是基于主机的认证。在initdb初始化数据目录的时候, 它会安装一个缺省的pg_hba.conf文件。不过我们也可以把认证配置文件放在其它地方; 参阅hba_file配置参数。
pg_hba.conf文件的常用格式是一组记录,每行一条。空白行将被忽略, 井号#开头的注释也被忽略。记录不能跨行存在。 一条记录是由若干用空格和/或制表符分隔的字段组成。如果字段用引号包围,那么它可以包含空白。 在数据库、用户或地址文件中引用一个关键词(如,all 或 replication) 使这个词失去它的特殊含义,只是用这个名字匹配一个数据库、用户或主机。 每条记录声明一种连接类型、一个客户端 IP 地址范围(如果和连接类型相关的话)、 一个数据库名、一个用户名字、对匹配这些参数的连接使用的认证方法。第一条匹配连接类型、 客户端地址、连接请求的数据库名和用户名的记录将用于执行认证。这个处理过程没有 "跨越"或者"回头"的说法:如果选择了一条记录而且认证失败, 那么将不再考虑后面的记录。如果没有匹配的记录,那么访问将被拒绝。 每条记录可以是下面七种格式之一: local database user auth-method [auth-options] host database user address auth-method [auth-options] hostssl database user address auth-method [auth-options] hostnossl database user address auth-method [auth-options] host database user IP-address IP-mask auth-method [auth-options] hostssl database user IP-address IP-mask auth-method [auth-options] hostnossl database user IP-address IP-mask auth-method [auth-options]各个字段的含义如下:
local
这条记录匹配企图通过 Unix 域套接字进行的连接。没有这种类型的记录,就不允许 Unix 域套接字的连接。host
这条记录匹配企图通过 TCP/IP 进行的连接。host记录匹配 SSL和非SSL的连接请求。 注意: 除非服务器带着合适的listen_addresses配置参数值启动, 否则将不可能进行远程的 TCP/IP 连接,因为缺省的行为是只监听本地自环地址localhost的连接。hostssl
这条记录匹配企图使用 TCP/IP 的 SSL 连接。但必须是使用SSL加密的连接。 要使用这个选项,编译服务器的时候必须打开SSL支持。 而且在服务器启动的时候必须打开ssl配置选项(参阅第 17.9 节)。hostnossl
这条记录与hostssl行为相反:它只匹配那些在 TCP/IP 上不使用SSL的连接请求。database
声明记录所匹配的数据库名称。值 all表明该记录匹配所有数据库, 值sameuser表示如果被请求的数据库和请求的用户同名,则匹配。 值samerole表示请求的用户必须是一个与数据库同名的角色中的成员。 (samegroup是一个已经废弃了,但目前仍然被接受的samerole同义词。) 对samerole来说,不认为超级用户是角色的一个成员,除非他们明确的是角色的成员, 直接的或间接的,并且不只是由于超级用户。值replication表示如果请求一个复制链接, 则匹配(注意复制链接不表示任何特定的数据库)。在其它情况里,这就是一个特定的 PostgreSQL数据库名字。可以通过用逗号分隔的方法声明多个数据库, 也可以通过前缀@来声明一个包含数据库名的文件。user
为这条记录声明所匹配的数据库用户。值all表明它匹配于所有用户。否则, 它就是特定数据库用户的名字或者是一个前缀+的组名称。请注意, 在PostgreSQL里,用户和组没有真正的区别,+实际上只是意味着 "匹配任何直接或者间接属于这个角色的成员",而没有+记号的名字只匹配指定的角色。 为此,超级用户如果明确是角色的成员,也只算是一个角色的成员,直接的或间接的,而不只是由于超级用户。 多个用户名可以通过用逗号分隔的方法声明。一个包含用户名的文件可以通过在文件名前面前缀 @来声明。address
声明这条记录匹配的客户端机器地址。这个文件可以包含主机名、IP地址范围或下面提到的特殊关键字之一。 IP 地址范围用标准的范围起始地址数字符号、斜线(/)和一个 CIDR掩码长度声明。 掩码长度表示客户端 IP 地址必须匹配的高位二进制位数。在给出的 IP 地址里, 这个长度的右边的二进制位应该为零。在 IP 地址、/、 CIDR 掩码长度之间不能有空白。 典型的这种方式指定的IPv4地址范围举例:172.20.143.89/32表示一个主机, 172.20.143.0/24表示一个小子网,10.6.0.0/16 表示一个大子网。IPv6地址范围的主机看起来像::1/128 (这种情况下是IPv6的回调地址),fe80::7a31:c1ff:0000:0000/96 表示一个小子网。0.0.0.0/0代表所有IPv4地址, ::0/0代表所有IPv6地址。要声明单个主机, 给 IPv4 地址声明掩码长度 32 ,给 IPv6 地址声明 128 。 不要在地址中省略结尾的 0 。 以 IPv4 格式给出的记录将只能匹配 IPv4 连接, 一个以 IPv6 格式给出的记录将只匹配 IPv6 连接, 即使对应的地址在 IPv4-in-IPv6 范围内。请注意如果系统的 C 库不支持 IPv6 地址, 那么 IPv6 的格式将被拒绝。 你也可以写all来匹配所有IP地址,samehost 来匹配任意服务器IP地址,或samenet来匹配任何服务器直接连接到的子网的任意地址。 如果指定了主机名(不是IP地址范围或看做主机名对待的特殊关键字), 那么该名称与客户端IP地址进行反向名称解析的结果进行比较(例如,如果使用了DNS, 那么是反向DN...点击查看剩余70%