PostgreSQL中的METHOD(认证方法)
在 PostgreSQL 的 pg_hba.conf 文件中,METHOD(认证方法)决定了服务器如何验证客户端的身份。
PostgreSQL 支持多种认证方法,主要可以分为以下几类:
基于密码的认证 (Password-Based)
这是最常用的方式,客户端需要提供密码。
|
方法 |
说明 |
安全性 |
适用场景 |
|
|
推荐。使用 SCRAM-SHA-256 挑战-响应机制。密码不以明文传输,也不存储哈希值,而是存储 Salted Hash。 |
最高 PG 10+ 默认首选 |
生产环境首选 |
|
|
使用 MD5 哈希进行挑战-响应。比明文安全,但 MD5 已被认为不够强壮易受碰撞攻击。 |
中等 |
旧版本兼容或内部网络 |
|
|
明文传输。密码以未加密形式通过网络发送。 |
极低 |
严禁在生产环境使用,仅限 SSL 隧道内或测试 |
注意:从 PostgreSQL 14 开始,默认认证方法已改为 scram-sha-256。
基于操作系统的认证 (OS-Based)
利用操作系统的用户身份进行映射,通常用于本地连接,无需输入数据库密码。
|
方法 |
说明 |
适用系统 |
|
|
Linux/Unix 专用。获取客户端的操作系统用户名,并检查它是否与请求的数据库用户名匹配。 |
Linux, macOS, Unix |
|
|
通用。通过联系客户端机器上的 Ident 服务器来确定操作系统用户名。通常用于 TCP 连接。 |
Linux, Unix, Windows(较少用) |
示例:如果 Linux 用户 alice 运行 psql -U alice,且配置为 peer,则直接登录,无需密码。
无条件信任/拒绝 (Trust/Reject)
|
方法 |
说明 |
风险 |
|
|
无条件允许。只要连接建立成功,就允许访问,不需要任何密码。 |
极高。任何能连接到该端口/Socket 的人都可以登录。仅用于本地开发或完全隔离的内网。 |
|
|
无条件拒绝。立即关闭连接。通常用于在允许某些 IP 之前,先拒绝其他所有 IP(作为默认兜底规则)。 |
无(用于阻断) |
外部认证集成 (External Integration)
与企业级身份管理系统集成。
|
方法 |
说明 |
|
|
使用 LDAP 目录服务(如 Active Directory, OpenLDAP)进行认证。 |
|
|
使用 RADIUS 服务器进行认证。 |
|
|
使用 SSL 客户端证书进行认证。客户端必须提供有效的 SSL 证书,Common Name (CN) 需匹配数据库用户名。 |
|
|
使用操作系统可插拔认证模块 (PAM) 进行认证。 |
|
|
使用 BSD 认证服务(较少见)。 |
|
|
使用 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
总结建议
- 首选:
scram-sha-256(安全、标准)。 - 本地运维:
peer(Linux 下免密,安全且方便)。 - 避免:
password(明文传输,除非有 SSL)。 - 慎用:
trust(除非你非常清楚自己在做什么,且网络绝对安全)。
你之前的配置中使用了 md5 和 scram-sha-256,这是比较标准的做法。如果想免密,可以将本地的 md5 改为 peer 或 trust。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)