瀚高数据库安全版密码是不允许明文存储的,默认是sm3算法。
该算法关联到两个文件:pg_hba.conf 和 postgresql.conf
(1)查看当前加密方法:
登录 psql,执行以下命令:
highgo=# show password_encryption;
password_encryption
---------------------
md5
(1 row)
也可以查看文件 postgresql.conf:
more postgresql.conf | grep password_encryption
password_encryption = md5 # md5, sm3 or scram-sha-256
(如果使用#注释掉,默认就是sm3,这点要注意)
该参数只是控制创建用户或修改更新密码的时候,以哪种方式存入数据库。与登录验证没关系,此时需要修改pg_hba.conf里的算法:
# IPv4 local connections:
host all all 127.0.0.1/32 md5
(2)修改加密方法:
例如:我们要将 md5 修改为 sm3,我们按如下步骤操作。
第1步:设置加密方式为 sm3(临时只对当前会话有效)
highgo=# set password_encryption TO sm3;
第2步:修改用户密码(接上个会话)
highgo=# alter user current_user password 'Hello@1234567';
第3步:修改 pg_hba.conf 密码验证算法
(如果不做这一步,登录将失败,因为输入密码依旧会按 md5 去哈希计算,跟数据库中sm3算法算出来的哈希值肯定不一样的)
# "local" is for Unix domain socket connections only
local all all sm3
# IPv4 local connections:
host all all 127.0.0.1/32 sm3
需要执行以下命令使 pg_hba.conf 生效:
[root@S1 data]# pg_ctl reload
server signaled
最后,我们登录验证一下新密码:
[root@S1 data]# psql highgo sysdba -W
Password:
NOTICE:
-------------------------------------------
Login User: sysdba
Login time: 2022-03-28 17:13:58.54784+08
Login Address: [local]
Last Login Status: FAILED
Login Failures: 2
Valied Until: infinity
-------------------------------------------
psql (4.5.6)
Type "help" for help.
highgo=#
如果以后所有密码都要按照 sm3 来加密,那就这样修改参数:
highgo=# alter system set password_encryption TO sm3;
然后 reload 一下数据库:
[root@S1 data]# pg_ctl reload
server signaled