passwordcheck
是一个用于检查用户密码是否满足特定条件的contrib模块。
passwordcheck
在PostgreSQL 9.0中添加,以提供使用钩子 check_password_hook
的代码的示例实现。
用法
passwordcheck
通过包含在shared_preload_libraries
中激活。
按原样,它执行有限范围的检查。特别是,它只能检查加密密码是否与用户名匹配(任何进一步的检查当然是不可能的),在真实的安全性环境中使用有限。鉴于PostgreSQL提供了相对有限的管理密码有效性的功能,建议配置外部身份验证机制,例如GSSAPI、SSPI、LDAP或RADIUS。
更改历史记录
- PostgreSQL 9.0
- 添加(提交c742b795)
passwordcheck
自在PostgreSQL 9.0中添加以来,没有进行过重大修改。
示例
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
参考文献
- PostgreSQL文档: passwordcheck