PostgreSQL数据库用户密码管理涉及到MD5、SCRAM-SHA-256算法,根据配置文件postgresql.conf中的设置,新建用户的密码或者新修改的用户密码被使用上述算法加密后存储到表pg_authid中。准确的说,表pg_authid中存储的是密码的hash值,数据库服务器不保存任何明文或对称非对称加密后的用户密码密文,防止密码被窃取。
passwordcheck插件是一个检查密码发杂度的postgresql数据库插件,用于检测新创建或新修改的用户密码复杂度。如果密码是以明文字符串的形式传送到数据库服务端的,那么密码复杂度很容易检查,无非就是对字符串的检查。但是,postgresql数据库允许以密文形式修改用户密码,也就是用户可以先把新密码加密(加密算法可选上面提到的算法),然后把加密后的密文传送到服务端,服务端接收到的是加密了的密码,又怎么进行密码复杂度检查呢?
假设用户名为user1,再假设要把用户user1的密码修改为passwd1,那么
1、如何修改用户密码?
使用psql登录数据库服务器,执行修改命令:
postgres=# alter user user1 with password 'passwd1';
ERROR: The password is too short
postgres=#
2、如何以密文形式修改用户密码?
shell下使用md5sum工具加密字符串"passwd1user1" :