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

相关推荐
万岳科技系统开发6 小时前
智慧医院小程序开发满足医疗机构多场景服务需求
数据库·学习·小程序
kisbad7 小时前
Day 012|Embedding 和向量数据库:知识库检索到底在检什么
数据库·python·embedding·agent
谷禾牛博7 小时前
肠道菌群检测流程及差异和技术门槛在哪里?
数据库·经验分享·功能测试
Zhu7587 小时前
对docker环境的postgresql数据库做快速初始化
数据库·docker·postgresql
Wang's Blog7 小时前
Go-Zero项目开发5: 数据库与缓存一致性问题及 go-zero 缓存机制解析
数据库·缓存·golang
布朗克1687 小时前
Go 入门到精通-18-文件操作
java·数据库·golang
ShoreKiten8 小时前
SQL注入之SQL Server增删改查
数据库·sql
Mico188 小时前
MySQL 8.0.35 源码编译安装笔记
数据库·笔记·mysql
蚰蜒螟8 小时前
从 Jedis 到内核:深入剖析 Redis BRPOP 的阻塞与唤醒机制
数据库·redis·缓存