PostgreSQL的数据源认证方式决定了客户端连接数据库时需要提供的凭证类型和验证规则,所有认证相关的配置都存储在pg_hba.conf文件中,该文件位于PostgreSQL的数据目录下,修改后需要重载配置才能生效。
PostgreSQL支持的认证方式类型
PostgreSQL提供了多种认证方式,不同方式适用于不同的使用场景,常见的认证方式如下:
- trust:无需任何验证,连接即允许,仅适合本地开发测试环境,生产环境禁止使用。
- password:使用明文密码进行验证,密码会在网络中传输,安全性较低,不推荐生产使用。
- md5:使用MD5哈希后的密码进行验证,密码不会明文传输,是较常用的认证方式。
- scram-sha-256:基于SCRAM-SHA-256协议的密码验证,安全性高于md5,PostgreSQL 10及以上版本支持。
- peer:从操作系统层面验证用户名,仅适用于本地Unix域套接字连接,要求数据库用户名和操作系统用户名一致。
- ldap:对接LDAP服务器进行统一身份认证,适合企业级多系统统一账号管理的场景。
pg_hba.conf配置文件结构
pg_hba.conf的每一行代表一条认证规则,规则从上到下匹配,第一条匹配的规则会生效,规则的基本格式如下:
连接类型 数据库名 用户名 客户端地址 认证方式 [认证选项]
各字段的具体含义:
- 连接类型:常见值为
local(本地Unix域套接字连接)、host(TCP/IP连接,包括SSL和非SSL)、hostssl(仅SSL加密的TCP/IP连接)、hostnossl(非SSL的TCP/IP连接)。 - 数据库名:指定该规则适用的数据库,
all表示所有数据库,也可以指定单个数据库名,多个数据库用逗号分隔。 - 用户名:指定该规则适用的数据库用户,
all表示所有用户,也可以指定单个用户名,多个用户用逗号分隔。 - 客户端地址:指定允许连接的客户端IP范围,
0.0.0.0/0表示所有IPv4地址,::0/0表示所有IPv6地址,也可以指定单个IP或者CIDR格式的网段。 - 认证方式:即前面提到的trust、md5、scram-sha-256等认证类型。
- 认证选项:部分认证方式需要额外参数,比如ldap认证需要指定LDAP服务器地址等。
常见场景的认证配置示例
场景1:本地开发环境配置
本地开发时可以使用peer认证本地连接,密码认证远程连接,配置示例如下:
# 本地Unix域套接字连接,使用peer认证,仅允许操作系统用户postgres连接所有数据库 local all postgres peer # 本地其他用户连接,使用md5密码认证 local all all md5 # 本地回环地址TCP连接,使用md5认证 host all all 127.0.0.1/32 md5 host all all ::1/128 md5
场景2:生产环境内网访问配置
生产环境仅允许内网特定网段的机器连接,使用scram-sha-256认证提升安全性,配置示例如下:
# 仅允许192.168.0.0/24网段的机器通过TCP连接,使用scram-sha-256认证 host all all 192.168.0.0/24 scram-sha-256 # 禁止其他所有TCP连接 host all all 0.0.0.0/0 reject
场景3:对接LDAP统一认证配置
企业环境需要对接LDAP服务器进行统一账号认证,配置示例如下:
# 对接LDAP认证,指定LDAP服务器地址和搜索基准 host all all 0.0.0.0/0 ldap ldapserver=ldap.ipipp.com ldapport=389 ldapbasedn="ou=users,dc=ipipp,dc=com" ldapsearchattribute=uid
配置生效方法
修改pg_hba.conf后,需要让PostgreSQL重载配置才能生效,不需要重启数据库服务,执行以下SQL命令即可:
-- 重载pg_hba.conf配置 SELECT pg_reload_conf();
如果需要确认配置是否生效,可以查看PostgreSQL的日志文件,或者尝试用新的认证规则进行连接测试。如果连接失败,可以检查pg_hba.conf的规则顺序是否正确,以及认证方式对应的用户密码是否正确设置。
注意事项
- pg_hba.conf的规则是从上到下匹配的,更严格的规则应该放在更前面,避免宽松规则提前匹配导致安全问题。
- 生产环境禁止使用trust认证方式,密码认证建议优先使用scram-sha-256而不是md5或者password。
- 修改配置前建议备份原始的pg_hba.conf文件,避免配置错误导致所有连接都无法访问数据库。
- 如果需要开放远程连接,还需要确保postgresql.conf中的
listen_addresses参数设置为*或者对应的网卡地址,否则TCP连接会被数据库直接拒绝。
PostgreSQL数据源认证pg_hba_conf认证配置数据库安全修改时间:2026-06-28 18:57:36