↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

百科 / 认证方法 / 密码认证

scram-sha-256

使用 SCRAM-SHA-256 认证来验证用户密码。详情参见第 20.5 节。

当前查看 PostgreSQL 18.6。

说明

使用 SCRAM-SHA-256 认证来验证用户密码。详情参见第 20.5 节。

方法
scram-sha-256
配置
pg_hba.conf
清单
用户可见的源码认证方法

手册中的方法选项与替代方式

选项或术语含义
scram-sha-256scram-sha-256 方法执行 SCRAM-SHA-256 认证,其定义见 RFC 7677 。它是一种挑战-响应方案,可防止在不受信任连接上嗅探密码,并支持在服务器上以被认为安全的密码学 hash 形式存储密码。 这是当前提供的方法中最安全的一种,但是旧的客户端库不支持这种方法。
md5md5 方法使用自定义且安全性较弱的挑战响应机制。它能防止密码嗅探,避免服务器明文存储密码;但攻击者一旦窃取服务器上的密码哈希,就无法提供保护。此外,MD5 哈希算法如今已不再被认为能安全抵御有针对性的攻击。为便于从 md5 迁移到较新的 SCRAM 方法,如果 pg_hba.conf 中指定 md5,但服务器上该用户的密码采用 SCRAM 加密存储(见下文),系统会自动改用基于 SCRAM 的认证。警告:对 MD5 加密密码的支持已弃用,将在 PostgreSQL 的未来版本中移除。迁移到其他密码类型的方法参见下文。
password方法 password 以明文形式发送密码,因此它容易受到密码 “ 嗅探 ” 攻击。如果可能应该尽量避免使用它。不过,如果连接被SSL加密保护着,那么可以安全地使用 password (不过如果依靠SSL,SSL证书认证可能是更好的选择)。

手册定义

20.5. 密码认证

有几种基于密码的认证方法。这些方法的过程类似,但是区别在于用户密码如何存放在服务器上以及客户端提供的密码如何通过连接发送。

scram-sha-256

scram-sha-256 方法执行 SCRAM-SHA-256 认证,其定义见 RFC 7677。它是一种挑战-响应方案,可防止在不受信任连接上嗅探密码,并支持在服务器上以被认为安全的密码学 hash 形式存储密码。

这是当前提供的方法中最安全的一种,但是旧的客户端库不支持这种方法。

md5

方法md5使用一种自定义的、安全性较低的挑战-响应机制。它能防止密码嗅探,并避免在服务器上以明文存储密码;但如果攻击者设法从服务器上窃取了密码 hash,它就无法提供保护。此外,如今已不再认为 MD5 hash 算法能抵御有决心的攻击者。

为便于从 md5 迁移到较新的 SCRAM 方法,如果 pg_hba.conf 中指定 md5,但服务器上该用户的密码采用 SCRAM 加密存储(见下文),系统会自动改用基于 SCRAM 的认证。

警告

对 MD5 加密密码的支持已弃用,并将在PostgreSQL的未来版本中移除。迁移到其他密码类型的详细信息见下文。

password

方法password以明文形式发送密码,因此它容易受到密码“嗅探”攻击。如果可能应该尽量避免使用它。不过,如果连接被SSL加密保护着,那么可以安全地使用password(不过如果依靠SSL,SSL证书认证可能是更好的选择)。

PostgreSQL 数据库密码独立于操作系统用户密码。每个数据库用户的密码都存储在系统目录 pg_authid 中。密码可以通过 SQL 命令CREATE ROLE和ALTER ROLE管理,例如 CREATE ROLE foo WITH LOGIN PASSWORD 'secret',或者通过 psql 的 \password 命令管理。如果某个用户没有设置密码,则其存储密码为 null,该用户的密码认证将始终失败。

不同基于密码的认证方法是否可用,取决于用户在服务器上的密码是如何加密的(更准确地说,是如何进行 hash 运算的)。这由设置密码时的配置参数password_encryption控制。如果密码是使用 scram-sha-256 设置加密的,那么它可以用于 scram-sha-256 和 password 认证方法(但后一种情况下密码会以明文传输)。如上所述,此时如果认证方法指定为 md5,也会自动切换为使用 scram-sha-256,因此同样能够工作。如果密码是使用 md5 设置加密的,那么它只能用于 md5 和 password 认证方法(同样,后一种情况下密码会以明文传输)。(以前的 PostgreSQL 版本支持在服务器上存储明文密码,但现在已经不再可能。)要检查当前存储的密码 hash,可以查看系统目录 pg_authid。

要将现有安装从 md5 升级到 scram-sha-256,应先确认所有使用中的客户端库版本都支持 SCRAM;然后在 postgresql.conf 中设置 password_encryption = 'scram-sha-256',让所有用户重新设置密码,并将 pg_hba.conf 中的认证方法改为 scram-sha-256。

文档与源码

来源构建
版本
18.6
构建
https://ftp.postgresql.org/pub/source/v18.6/postgresql-18.6.tar.bz2
来源指纹
555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f

版本比较

PostgreSQL 17 → 18: 无变化。

比较已记录的接口与属性,排除来源指纹和构建元数据。某个样本中没有记录,不能据此判断实际引入或移除的版本。

相关条目

导出 JSON · 返回认证方法 · 收录范围为 PostgreSQL 10 至 20;最早采样版本不一定是实际引入版本。