2025年9月25日: PostgreSQL 18 发布!
支持的版本: 当前 (18) / 17 / 16 / 15 / 14 / 13
开发版本: devel
不支持的版本: 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0

F.24. passwordcheck — 验证密码强度 #

当用户使用 CREATE ROLEALTER ROLE 设置密码时,passwordcheck 模块会检查用户的密码。如果密码被认为太弱,它将被拒绝,并且命令将以错误终止。

要启用此模块,请在 postgresql.conf 中的 shared_preload_libraries 中添加 '$libdir/passwordcheck',然后重新启动服务器。

您可以修改源代码来根据您的需求调整此模块。例如,您可以使用 CrackLib 来检查密码——这只需要取消注释 Makefile 中的两行并重新构建模块。(出于许可原因,我们无法默认包含 CrackLib。)在没有 CrackLib 的情况下,该模块会强制执行一些简单的密码强度规则,您可以根据需要修改或扩展这些规则。

注意

为了防止未加密的密码通过网络传输、写入服务器日志或被数据库管理员窃取,PostgreSQL 允许用户提供预加密的密码。许多客户端程序利用此功能,在将密码发送到服务器之前对其进行加密。

这限制了 passwordcheck 模块的实用性,因为在这种情况下,它只能尝试猜测密码。因此,如果您的安全要求很高,不建议使用 passwordcheck。使用外部身份验证方法(例如 GSSAPI,参见 第 20 章)比依赖数据库内的密码更安全。

或者,您可以修改 passwordcheck 来拒绝预加密的密码,但强制用户以明文设置密码会带来其自身的安全风险。

F.24.1. 配置参数 #

passwordcheck.min_password_lengthinteger

可接受的最小密码长度(以字节为单位)。默认为 8。只有超级用户可以更改此设置。

注意

如果用户提供预加密密码,此参数无效。

在常规使用中,此参数在 postgresql.conf 中设置,但超级用户可以在其自己的会话中即时更改它。典型用法可能是

# postgresql.conf
passwordcheck.min_password_length = 12

提交更正

如果您在文档中看到任何不正确、与您对特定功能的体验不符或需要进一步澄清的内容,请使用 此表单 报告文档问题。