PostgreSQL中的METHOD(认证方法)

在 PostgreSQL 的 pg_hba.conf 文件中,METHOD(认证方法)决定了服务器如何验证客户端的身份。

PostgreSQL 支持多种认证方法,主要可以分为以下几类:

基于密码的认证 (Password-Based)

这是最常用的方式,客户端需要提供密码。

方法 说明
安全性 适用场景
scram-sha-256 推荐。使用 SCRAM-SHA-256 挑战-响应机制。密码不以明文传输,也不存储哈希值,而是存储 Salted Hash。
最高 PG 10+ 默认首选 生产环境首选
md5 使用 MD5 哈希进行挑战-响应。比明文安全,但 MD5 已被认为不够强壮易受碰撞攻击。
中等 旧版本兼容或内部网络
password 明文传输。密码以未加密形式通过网络发送。
极低 严禁在生产环境使用,仅限 SSL 隧道内或测试

注意:从 PostgreSQL 14 开始,默认认证方法已改为 scram-sha-256

基于操作系统的认证 (OS-Based)

利用操作系统的用户身份进行映射,通常用于本地连接,无需输入数据库密码

方法 说明 适用系统
peer Linux/Unix 专用。获取客户端的操作系统用户名,并检查它是否与请求的数据库用户名匹配。 Linux, macOS, Unix
ident 通用。通过联系客户端机器上的 Ident 服务器来确定操作系统用户名。通常用于 TCP 连接。 Linux, Unix, Windows(较少用)

示例:如果 Linux 用户 alice 运行 psql -U alice,且配置为 peer,则直接登录,无需密码。

无条件信任/拒绝 (Trust/Reject)

方法 说明 风险
trust 无条件允许。只要连接建立成功,就允许访问,不需要任何密码 极高。任何能连接到该端口/Socket 的人都可以登录。仅用于本地开发或完全隔离的内网。
reject 无条件拒绝。立即关闭连接。通常用于在允许某些 IP 之前,先拒绝其他所有 IP(作为默认兜底规则)。 无(用于阻断)

外部认证集成 (External Integration)

与企业级身份管理系统集成。

方法 说明
ldap 使用 LDAP 目录服务(如 Active Directory, OpenLDAP)进行认证。
radius 使用 RADIUS 服务器进行认证。
cert 使用 SSL 客户端证书进行认证。客户端必须提供有效的 SSL 证书,Common Name (CN) 需匹配数据库用户名。
pam 使用操作系统可插拔认证模块 (PAM) 进行认证。
bsd 使用 BSD 认证服务(较少见)。
gss / sspi 使用 Kerberos GSSAPI (Unix) 或 SSPI (Windows) 进行单点登录 (SSO)。

常见场景推荐配置

本地开发环境 (最方便)

1
2
# "local" is for Unix domain socket connections only
local all all trust/peer

生产环境 (最安全)

1
2
3
4
5
6
7
8
# "local" is for Unix domain socket connections only
local all all md5

# IPv4 local connections:
host all all 0.0.0.0/0 md5

# IPv6 local connections:
host all all ::1/128 scram-sha-256

企业内部网 (平衡安全与便利)

1
2
3
4
5
# 内网特定网段免密(需确保网络隔离)
host all all 192.168.1.0/24 trust

# 其他所有连接需要密码
host all all 0.0.0.0/0 scram-sha-256

总结建议

  1. 首选scram-sha-256(安全、标准)。
  2. 本地运维peer(Linux 下免密,安全且方便)。
  3. 避免password(明文传输,除非有 SSL)。
  4. 慎用trust(除非你非常清楚自己在做什么,且网络绝对安全)。