当用户通过 CREATE ROLE 或 ALTER ROLE 设置密码时,passwordcheck 模块会对其进行检查。如果密码被认为过于脆弱,它将被拒绝,命令会以错误终止。
要启用该模块,请在 postgresql.conf 的 shared_preload_libraries 中加入 '$libdir/passwordcheck',然后重启服务器。
你可以通过修改源代码来按需调整该模块。例如,你可以使用
CrackLib
来检查密码 — 这只需要取消 Makefile 中两行代码的注释并重新编译模块即可。(出于许可原因,我们不能默认包含 CrackLib。)
在没有 CrackLib 的情况下,该模块强制执行几条简单的密码强度规则,你可以按需修改或扩展这些规则。
为防止未加密密码通过网络传输、写入服务器日志或被数据库管理员以其他方式窃取,PostgreSQL 允许用户提交预先加密的密码。许多客户端程序利用了这一功能,在将密码发送到服务器之前对其进行加密。
这限制了 passwordcheck 模块的作用,因为在这种情况下它只能尝试猜测密码。因此,如果你的安全要求较高,不建议使用 passwordcheck。与依赖数据库内部的密码相比,使用 GSSAPI 等外部认证方式(参见 Chapter 20)更为安全。
另一种做法是修改 passwordcheck 使其拒绝预先加密的密码,但强制用户以明文设置密码本身也带有安全风险。
通常,该参数在 postgresql.conf 中设置,但超级用户也可以在自己的会话中即时修改它。典型用法如下:
# postgresql.conf passwordcheck.min_password_length = 12