passwordcheck

一个用于检查用户密码是否满足特定标准的 contrib 模块

passwordcheck 是一个 contrib 模块,用于检查用户密码是否满足特定标准。

passwordcheckPostgreSQL 9.0 中添加,为使用 Hook check_password_hook 的代码提供了一个示例实现。

用法

passwordcheck 通过包含在 shared_preload_libraries 中来激活。

目前,它执行有限范围的检查。特别是,它只能检查加密后的密码是否不匹配用户名(任何进一步的检查当然是不可能的),并且在实际安全环境中实用价值有限。鉴于 PostgreSQL 在管理密码有效性方面提供的功能相对有限,建议配置外部身份验证机制,如 GSSAPI、SSPI、LDAP 或 RADIUS。

PostgreSQL 18 开始,可以通过配置参数 passwordcheck.min_password_length 指定最小密码长度(以字节为单位,而非字符)。在 PostgreSQL 17 及更早版本中,最小长度硬编码为 8 字节。

变更历史

示例

passwordcheck 必须通过 shared_preload_libraries 启用

postgres=# SHOW shared_preload_libraries;
 shared_preload_libraries 
--------------------------
 passwordcheck
(1 row)

密码以纯文本形式提供的示例用法

postgres=# ALTER ROLE foo PASSWORD 'foo';
ERROR:  password is too short

postgres=# ALTER ROLE postgres PASSWORD 'postgres';
ERROR:  password must not contain user name

postgres=# ALTER ROLE foo PASSWORD 'foobar';
ERROR:  password must not contain user name

postgres=# ALTER ROLE foo PASSWORD 'boobarbaz';
ERROR:  password must contain both letters and nonletters

当密码以加密格式提供时,只能进行一个简单的检查,即密码是否与用户名匹配

postgres=# ALTER ROLE foo ENCRYPTED PASSWORD 'SCRAM-SHA-256$4096:eUHVJZ5WSsEomBt9BgHJzQ==$x57IR2ZcoKl8tlz5I2w636bquX3JmCYmi4LlDIa5lIY=:viXV52BLraOFRaw1gCp22K9VgLe6Rvi1nvcWNR6PTe4=';
ERROR:  password must not equal user name

其他密码将按原样接受;这里将值 foobar(以明文形式会被拒绝)作为加密密码传递

postgres=# ALTER ROLE foo ENCRYPTED PASSWORD 'SCRAM-SHA-256$4096:aiSTMi/J+KkJa9WFMgiahg==$f//pUq3yGJ6E8UbCxJWcGvnylc0aNuZR6WuLAcYSzWA=:yzMz+l1TIAYQ28tdQ2YopKwQiIjMwpGAariL2jmeaxU=';
ALTER ROLE

分类

身份验证, 编码示例, Contrib 模块

另请参阅

check_password_hook

反馈

提交关于“passwordcheck”的任何评论、建议或更正 请在此处