选择 打开 改范围 完整检索页

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

文档 / 配置参数 / 连接和认证

CONFIGURATION PARAMETER连接和认证 / 认证

password_encryption

选择生成密码密文时使用的算法。

Chooses the algorithm for encrypting passwords.

枚举 会话 引入 9.0(基线) 现存至 20 devel 2 次默认值变更

类型
枚举enum
上下文
会话任何用户都可在会话内用 SET 修改
默认值
scram-sha-256
枚举值
md5, scram-sha-256
引入版本
9.0(基线)
状态
现存

PostgreSQL 18 手册 官方文档

版本轨迹

相对 PostgreSQL 17 无变化。

默认值变迁

on 9.0 – 9.6 md5 10 – 13 scram-sha-256 14 – 20

默认值一共换过 3 档,每段的宽度按它覆盖的大版本数伸展,深色的一段是当前查看的 PostgreSQL 18。带单位的取值换算成了可读形式,原始的 boot_val 与单位写在悬浮提示里。

手册说明

PostgreSQL 18 手册 · 19.3 连接和认证 本站手册 官方原文

当在 CREATE ROLEALTER ROLE 中指定密码时, 该参数决定用于加密密码的算法。可能的值有 scram-sha-256, 即使用 SCRAM-SHA-256 加密密码,以及 md5,即将密码存储为 MD5 哈希。 默认值为 scram-sha-256

请注意,较旧的客户端可能缺少对 SCRAM 认证机制的支持,因此无法使用以 SCRAM-SHA-256 加密的密码。 详情参见 Section 20.5

Warning

对 MD5 加密密码的支持已被弃用,并将在未来的 PostgreSQL 版本中移除。 关于迁移到其他密码类型的细节,请参见 Section 20.5

机制详解

password_encryption:选择生成密码密文时使用的算法。它影响 CREATE ROLE、ALTER ROLE 等设置密码命令新生成的密文;既有密文不会自动重新哈希。

password_encryption 属于 USER 上下文。获授权角色可在会话内修改,ALTER ROLE 或 ALTER DATABASE 可为未来会话建立默认值。

最终认证路径由该参数与 pg_hba.conf、角色属性、凭据材料、客户端能力,以及某些情况下的操作系统身份服务共同决定。

调优建议

按典型负载给出的取值思路,不是放之四海皆准的配方:实际取值要看数据量、并发度与硬件。

  • OLTP在线事务处理

    按认证架构与安全策略设置 password_encryption,而非按工作负载吞吐量。测试所有驱动、身份映射、故障转移路径与凭据轮换流程。

  • OLAP分析与批处理

    分析访问也应采用同一安全基线;任何遗留客户端例外都应隔离到专用角色,并附带有期限的迁移计划。

  • 小规格低配实例与开发机

    优先保留 password_encryption 当前的安全默认值。不要为节省小节点上的少量 CPU 而削弱认证,应通过连接池降低连接抖动。

常见问题

  • 只在一个会话中修改 password_encryption,却认为角色默认值、数据库默认值或其他池化会话也已随之改变。
  • 修改单个认证参数,却未测试 pg_hba.conf 顺序、既有密文、映射与所有客户端库。
  • 为解决应由连接池和容量规划处理的连接抖动或 CPU 成本而削弱身份策略。
  • 更改算法后误以为既有角色密文会自动转换。

演化历史

相邻两个大版本之间的差异,新的在前。版本号链到该版的快照。

  1. PostgreSQL 20 ← 19 沿用 19

    事实沿用 19

  2. PostgreSQL 14 ← 13 默认值变更

    默认值 md5 scram-sha-256

  3. PostgreSQL 11 ← 10 仅描述更新

    分类 Connections and Authentication / Security and Authentication Connections and Authentication / Authentication

  4. PostgreSQL 10 ← 9.6 默认值变更

    默认值 on md5 类型 布尔 枚举 枚举值 (无) md5, scram-sha-256 简述 Encrypt passwords. Chooses the algorithm for encrypting passwords. 补充说明 When a password is specified in CREATE USER or ALTER USER without writing either ENCRYPTED or UNENCRYPTED, this parameter determines whether the password is to be encrypted. (无)

逐版本快照

每个收录版本里的 7 项事实,与上一个存在的版本不同的格子带底色。版本号链到该版。

版本 默认值单位上下文类型最小值最大值枚举值
9.0 on 会话 布尔
9.1 on 会话 布尔
9.2 on 会话 布尔
9.3 on 会话 布尔
9.4 on 会话 布尔
9.5 on 会话 布尔
9.6 on 会话 布尔
10 md5 会话 枚举 md5, scram-sha-256
11 md5 会话 枚举 md5, scram-sha-256
12 md5 会话 枚举 md5, scram-sha-256
13 md5 会话 枚举 md5, scram-sha-256
14 scram-sha-256 会话 枚举 md5, scram-sha-256
15 scram-sha-256 会话 枚举 md5, scram-sha-256
16 scram-sha-256 会话 枚举 md5, scram-sha-256
17 scram-sha-256 会话 枚举 md5, scram-sha-256
18 scram-sha-256 会话 枚举 md5, scram-sha-256
19 scram-sha-256 会话 枚举 md5, scram-sha-256
20 沿用 scram-sha-256 会话 枚举 md5, scram-sha-256

参考资料

同类参数

参数 类型 上下文 默认值 版本变动 最近变更
Connections and Authentication 连接和认证 10 个
认证 10
authentication_timeout 整数 重载生效 1 min
设置完成客户端认证所允许的最长时间。 现存
db_user_namespace 布尔 重载生效 off
启用按数据库划分的用户名空间。 于 17 移除
gss_accept_delegation 布尔 重载生效 off
设置是否接受客户端的 GSSAPI 凭据委派。 现存
krb_caseins_users 布尔 重载生效 off
设置 Kerberos 和 GSSAPI 用户名是否按大小写不敏感方式处理。 现存
krb_server_keyfile 字符串 重载生效 FILE:/etc/postgresql-common/krb5.keytab 9.11 次
设置 Kerberos 服务器密钥文件的位置。 现存
md5_password_warnings 布尔 会话 on
启用关于 MD5 密码的弃用警告。 现存
oauth_validator_libraries 字符串 重载生效 空字符串
列出可用于验证 OAuth 2.0 Bearer Token 的库。 现存
password_encryption 枚举 会话 scram-sha-256 142 次
选择生成密码密文时使用的算法。 现存
password_expiration_warning_threshold 整数 重载生效 7 d
设置密码到期告警的提前时间阈值。 现存
scram_iterations 整数 会话 4096
设置生成 SCRAM 密文时使用的迭代次数。 现存