postgresql_pg_hba.conf 文件
客户端认证是由一个配置文件(通常名为 pg_hba.conf)控制的,它存放在数据库集群的数据目录里。HBA 的意思是"host-based authentication",也就是基于主机的认证。在 initdb 初始化数据目录的时候,它会安装一个缺省的 pg_hba.conf 文件。不过我们也可以把认证配置文件放在其它地方;参阅 hba_file 配置参数。 pg_hba.conf 文件的常用格式是一组记录,每行一条。空白行将被忽略,井号 # 开头的注释也被忽略。一条记录是由若干用空格和/或制表符分隔的字段组成。如果字段用引号包围,那么它可以包含空白。记录不能跨行存在。 每条记录声明一种连接类型、一个客户端 IP 地址范围(如果和连接类型相关的话)、一个数据库名、一个用户名字、对匹配这些参数的连接使用的认证方法。第一条匹配连接类型、客户端地址、连接请求的数据库名和用户名的记录将用于执行认证。这个处理过程没有"跨越"或者"回头"的说法:如果选择了一条记录而且认证失败,那么将不再考虑后面的记录。如果没有匹配的记录,那么访问将被拒绝。 每条记录可以是下面七种格式之一: local database user auth-method [auth-option] host database user CIDR-address auth-method [auth-option] hostssl database user CIDR-address auth-method [auth-option] hostnossl database user CIDR-address auth-method [auth-option] host database user IP-address IP-mask auth-method [auth-option] hostssl database user IP-address IP-mask auth-method [auth-option] hostnossl database user IP-address IP-mask auth-method [auth-option] 各个字段的含义如下:
用 @ 构造包含的文件是当作一列名字读取的,这些名字可以用空白或者逗号分隔。注释用 # 引入,就像在 pg_hba.conf 里那样,允许嵌套 @ 构造。除非跟在 @ 后面的文件名是一个绝对路径,否则被当作与该文件所在目录相对的路径。 因为认证时系统是为每个连接请求顺序检查 pg_hba.conf 里的记录的,所以这些记录的顺序是非常关键的。通常,靠前的记录有比较严的连接匹配参数和比较弱的认证方法,而靠后的记录有比较松的匹配参数和比较严的认证方法。比如,我们一般都希望对本地 TCP/IP 连接使用 trust 认证,而对远端的 TCP/IP 连接要求口令。在这种情况下我们将 trust 认证方法用于来自 127.0.0.1 的连接,这条记录将出现在允许更广泛的客户端 IP 地址的使用口令认证的记录前面。 在启动和主服务器进程收到 SIGHUP 信号的时候,系统都会重新装载 pg_hba.conf 文件。如果你在活跃的系统上编辑了该文件,就必须通知服务器(使用 pg_ctl reload 或 kill -HUP)重新加载该文件。
例20-1里是 pg_hba.conf 记录的一些例子。阅读下文理解不同认证方法的细节。 例20-1. pg_hba.conf 记录的例子 # Allow any user on the local system to connect to any database under # 允许在本机上的任何用户使用 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 IP-MASK METHOD host all all 127.0.0.1 255.255.255.255 trust # 允许 IP 地址为 192.168.93.x 的任何主机与 "postgres" 数据库相连, # 用与他们在自己的主机上相同 ident 的用户名标识他自己(通常是他的 Unix 用户名) # TYPE DATABASE USER CIDR-ADDRESS METHOD host postgres all 192.168.93.0/24 ident sameuser # 允许来自主机 192.168.12.10 的用户提供了正确的口令之后与 "postgres" 数据库连接。 # TYPE DATABASE USER CIDR-ADDRESS METHOD host postgres 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 里有 "omicron" 的映射说 "bryanh" 允许以 "guest1" 进行连接时才真正可以进行连接。 # TYPE DATABASE USER CIDR-ADDRESS METHOD host all all 192.168.0.0/16 ident omicron # 如果下面是用于本地连接的仅有的三行,那么它们将允许本地用户只和同名数据库连接。 # 只有管理员和 "support" 角色里的成员例外,他们可以连接到任何数据库。 # $PGDATA/admins 文件列出了那些允许与所有数据库连接的用户名。 # 在所有情况下都需要口令。 # TYPE DATABASE USER CIDR-ADDRESS METHOD local sameuser all md5 local all @admins md5 local all +support md5 # 上面最后两行可以合起来写成一行 local all @admins,+support md5 # 数据库字段也可以使用列表和文件名: local db1,db2,@demodbs all md5 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- jboss6.x – 无法将oracle.jdbc.driver.T4CConnection强制转
- c++插入排序详解
- STM32F3发现 – 实现GPIO中断
- 事件 – 从非托管C/C++函数在C/C++LI中触发事件
- iphone – Xcode Objective-C Segue“正在进行演示”
- vb.net – 如何在Windows Store / WP8 / WinRT的可移植类库
- 敏感词过滤 DFA 状态机 cocos2d-js 实现版
- GFSTestProject.xml
- U-boot下Nand Flash的相关命令
- c# – LINQ-To-SQL NOLOCK(不是ReadUncommitted)