在 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)。

常见场景推荐配置

本地开发环境 (最方便)

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

生产环境 (最安全)

# "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

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

# 内网特定网段免密(需确保网络隔离)
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(除非你非常清楚自己在做什么,且网络绝对安全)。

你之前的配置中使用了 md5scram-sha-256,这是比较标准的做法。如果想免密,可以将本地的 md5 改为 peertrust

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐