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

相关推荐
范什么特西10 小时前
回答知识总结04(redis)
数据库·redis·缓存
码农颜10 小时前
5.4.1 锁分类
java·数据库·mysql
云深处@11 小时前
【数据库】MySQL 入门
数据库·学习·mysql
梦远星帆11 小时前
SQLyog社区版下载
数据库·mysql·sqlyog
科力锐品牌君12 小时前
行业龙头|科力锐全链路防勒索 + 多中心容灾方案,构筑河南翔宇医疗业务安全闭环!
网络·数据库·分布式·安全·数据安全·备份
zyplayer-doc13 小时前
zyplayer-doc企业知识库能做什么:从文档创建、权限管理到AI问答的完整能力
大数据·javascript·数据库·人工智能·pdf·word
会编程的吕洞宾14 小时前
LangChain4j Tool Calling 实战:让大模型自动查数据库发邮件,一句话搞定复杂任务
数据库·人工智能
知行合一。。。15 小时前
DeepAgents--01--Agent和OpenClaw的相关概念
android·数据库
c2385615 小时前
# Mini OJ — 项目详解文档
开发语言·数据库·c++
DFT计算杂谈16 小时前
C4T交错磁体中的超导交织序向列涨落与自旋流环涨落的选择机制
大数据·数据库·人工智能