PostgreSQL教程(2)访问控制文件 pb_hba.conf 说明与配置

TangLu PostgreSQL 2025-02-20 95 0

一、PostgreSQL客户端认证说明

pb_hba.conf 用于实现PGSQL的访问控制,通过该文件可以实现基于主机的认证,其作用类似于操作系统的防火墙,通过认证配置来控制允许哪些主机、哪些用户可以访问数据库。由于该配置文件在PGSQL部署完成以后就默认存在,并且由于没有配置相关规则,这也是PGSQL默认无法使用远程连接的原因。


二、pg_hba.conf 文件配置说明

该文件在初始化时自动生成,默认存放在数据目录中。该配置文件通过一条条记录来进行用户权限验证,规则的配置类似visudo,每行一条记录,从上往下进行匹配,一旦被匹配上就按照该规则的方法进行处理,并且不再继续对后面规则进行匹配。所以在实际的配置中建议将精确规则写在最前面,范围大的规则写在后面

cat pg_hba.conf
#TYPE    DATABASE           USER          ADDRESS            METHOD
host      all           all          0.0.0.0/0               trust
host      test_db        tanglu           0.0.0.0/0              md5
host      all           all          127.0.0.1/32              ident map=testmap

#pg_ident.conf
testmap                 os_user          postgres


TYPE:该字段用于配置客户端连接类型,使用较多的是local和host类型。local代表本地socket连接,登陆时不用指定IP地址;host是通过TCP/IP进行的连接

DATABASE:指定具体的数据库名,如testdb,如果标识 all 代表任何数据库,标识为 replication 用于流复制

USER:客户端连接时的用户名,all 代表所有用户

ADDRESS:客户端具体的连接地址或者网段,127.0.0.1/32表示本机,0.0.0.0/0表示所有网络

METHOD:具体的认证方法。trust代表该客户端被信任,无需密码即可登录;reject代表拒绝连接,相当于黑名单;如果要实现密码认证的话有scram-sha-256、md5和password三种方法,password和md5认证在安全性上都较低,所以推荐使用scram-sha-256。另外PGSQL还支持对操作系统上的用户进行映射实现认证登录的方式,使用到的方法是peer与ident,其区别是peer只能进行本地用户的认证,而ident支持网络连接。使用操作系统用户认证时还需要配合pg_ident.conf文件进行系统用户与数据库用户的映射


该文件配置后需要重新加载才会生效

pg_ctl reload


评论