pg_hba.conf 文件用于控制PostgreSQL服务器的访问权限。
具体包括:允许哪些用户连接到哪个数据库,允许哪些IP地址连接到本服务器,以及指定连接时使用的身份验证模式。
文件格式如下:
TYPE DATABASE USER ADDRESS METHOD
TYPE列标识允许的连接方式,可用的值有:local、host、hostssl、hostnossl
local 匹配使用Unix域套接字的连接。如果没有TYPE为local的条目则不允许通过Unix域套接字连接。
host 匹配使用TCP/IP建立的连接,同时匹配SSL和非SSL连接。
默认安装只监听本地环回地址localhost的连接,不允许使用TCP/IP远程连接,启用远程连接需要修改postgresql.conf中的listen_addresses参数。
listen_addresses = '*'
hostssl 匹配必须是使用SSL的TCP/IP连接。
配置hostssl有三个前提条件:
1.客户端和服务端都安装OpenSSL;
2.编译PostgreSQL的时候指定configure参数--with-openssl打开SSL支持;
3.在postgresql.conf中配置ssl = on。
hostnossl 和hostssl相反,它只匹配使用非SSL的TCP/IP连接。
DATABASE:具体指定的数据库,常用的为all(所有数据库)、授权某一个时直接写数据库名称、授权多个数据库时使用逗号(postgres,db1,db2)
USER:具体指定的用户,常用的为all(所有用户)、授权某一个用户时直接写用户名称、授权多个时使用逗号(user1,user2,user3)
ADDRESS:可访问的地址,192.168.10.122/32表示单一主机,192.168.10.0/24表示192.168.0.1~192.168.0.255网段内所有主机,0.0.0.0/0表示所有主机。
METHOD列标识客户端的认证方法,常见的认证方法有trust、reject、md5和password等。
reject认证方式主要应用在这样的场景中:允许某一网段的大多数主机访问数据库,但拒绝这一网段的少数特定主机。
md5和password认证方式的区别在于md5认证方式为双重md5加密,password指明文密码,所以不要在非信任网络使用password认证方式。
scram-sha-256是PostgreSQL 10中新增的基于SASL的认证方式,是PostgreSQL目前提供的最安全的认证方式。使用scram-sha-256认证方式不支持旧版本的客户端库。
如果使用PostgreSQL 10以前的客户端库连接数据库,会有如下错误:
[postgres@pghost2~]$ /usr/pgsql-9.6/bin/psql -h pghost1-p 1921-U postgres mydb
psql: SCRAM authentication requires libpq version 10 or above
修改该配置文件中的参数,必须重启 postgresql 服务
重启:pg_ctl reload 或者 执行 SELECT pg_reload_conf()