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

常见场景推荐配置

本地开发环境 (最方便)

复制代码
# "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

相关推荐
净水深流11 分钟前
中央厨房冷链技术实践:多温区改造、WMS落地与IoT温控架构
大数据·数据库·人工智能·冷库冷链
l1t25 分钟前
测试DuckDB 2.1的match_recognize模式匹配语句
数据库·duckdb
IpdataCloud1 小时前
AI智能体调用工具怎么核验来源IP?归属地、网络类型与代理风险识别(含Python代码)
数据库·python·tcp/ip
曹牧2 小时前
Java:SQL 注入漏洞
数据库
程序员JerrySUN2 小时前
Jetson Edge AI 实战01:Nano、Xavier、Orin 怎么选?Jetson 硬件选型详解【视频讲解】
java·数据库·redis·安全·mybatis
oradh3 小时前
Oracle Undo问题总结(ORA-600 [4xxx] 系列错误)
数据库·oracle
达梦数据3 小时前
DMDRS辅助表生成规则与作用
数据库·oracle
‎ദ്ദിᵔ.˛.ᵔ₎3 小时前
MySQL 表约束
数据库·mysql
Doris__HE3 小时前
【元脑服务器NF5476G7-NF5476M7技术规格分享】
运维·服务器·网络·数据库·性能优化
笃行3506 小时前
别拿MySQL数据库管理工具硬导:MySQL 迁 KingbaseES 的完整工具链
数据库