pg_hba文件浅析

作者:瀚高PG实验室 (Highgo PG Lab)- 天蝎座

highgo=# select version();
                                                 version

----------------------------------------------------------------------------------------------------------

 PostgreSQL 9.5.7 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-11), 64-bit

(1 row)
# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     ident
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
host    all             all             0.0.0.0/0               trust
# IPv6 local connections:
host    all             all             ::1/128                 md5

TYPE定义了多种连接PostgreSQL的方式,分别是:

“local”使用本地unix套接字
“host”使用TCP/IP连接(包括SSL和非SSL)
“host”结合“IPv4地址”使用IPv4方式,结合“IPv6地址”则使用IPv6方式
“hostssl”只能使用SSL TCP/IP连接
“hostnossl”不能使用SSL TCP/IP连接

DATABASE指定哪个数据库,多个数据库,库名间以逗号分隔。

当PostgreSQL遍历pg_hba.conf文件时,它将使用匹配的第一条规则。
所以,如果我们的请求来自192.168.1.54,那么第一条规则在我们到达第二条之前总是匹配的。
这意味着如果密码和用户是正确的,192.168.1.54将能够登录; 因此,第二条规则是毫无意义的。

所以说pg_hba.conf文件中,从上到下是存在“优先级”的概念的,不知道这种描述是否准确。
但是大概就是这个意思,例如:

host    all             all             0.0.0.0/0            trust
host    all             all             192.168.1.54/32      MD5

这种情况下如果远程主机192.168.1.54 想要连接数据库,那么很明显,已经适配了第一条规则,所以不需要密码就可以连接数据库。

md5是常用的密码认证方式,如果你不使用ident,最好使用md5。密码是以md5形式传送给数据库,较安全,且不需建立同名的操作系统用户。

password是以明文密码传送给数据库,建议不要在生产环境中使用。

trust是只要知道数据库用户名就不需要密码或ident就能登录,建议不要在生产环境中使用。

reject是拒绝认证。

本地使用psql登录数据库,是以unix套接字的方式,附合local方式。

pg_hba.conf修改后,使用pg_ctl reload重新读取pg_hba.conf文件,如果pg_ctl找不到数据库,则用-D/…/pgsql/data/指定数据库目录,或export PGDATA=/…/pgsql/data/导入环境变量。

另:PostgreSQL默认只监听本地端口,用netstat -tuln只会看到“tcp 127.0.0.1:5432 LISTEN”。
修改postgresql.conf中的listen_address=*,监听所有端口,这样远程才能通过TCP/IP登录数据库,用netstat -tuln会看到“tcp 0.0.0.0:5432 LISTEN”。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值