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(除非你非常清楚自己在做什么,且网络绝对安全)。

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

相关推荐
摇滚侠19 小时前
《On Java 中文版 基础卷》阅读笔记 实现隐藏 12
java·数据库·笔记
川石课堂软件测试20 小时前
学习软件测试需掌握的一些知识
数据库·python·sql·功能测试·网络协议·mysql·http
2501_9377671620 小时前
自建 SQL 数据库定时备份踩坑复盘与落地思路
数据库·sql
silvamux_1 天前
10款模型写种草笔记:可发布性、返工来源与成本数据缺口复盘
java·数据库·笔记
I Am a robert girl1 天前
从 GameHorizon 拆解多时间尺度游戏评测:数据管线、离线基准与在线回放的三层设计
数据库·游戏·多时间尺度·数据管线·游戏评测·离线基准·在线回放
躺柒1 天前
读数据安全架构设计与实践17安全架构案例(下)
数据库·安全·零信任·安全架构·防火墙·无边界
SelectDB1 天前
实时更新排错现场:导入了却查到旧数据,和 FINAL 越加越慢的两条路
大数据·数据库·数据分析
SelectDB1 天前
拿 Planet 的账单一行行对下来,我总结出三个可自查的校验点
大数据·数据库·数据分析
SelectDB1 天前
Apache Doris + Vane:让多模态数据进入业务分析
大数据·数据库·数据分析
AI开源软件1 天前
SpringBoot信创项目怎么验收?从数据库迁移到交付证据
postgresql·springboot·达梦·opengauss·信创·企业管理系统