如何修改PostgreSQL数据库密码规则
1 业务场景
某些客户安全等保要求高,要求使用客户自定义的PG数据库密码规则(如同时包含字母大小写、数字、特殊字符,且长度大于8)。不只是修改当前数据库用户使之符合要求,而且要求创建的用户密码默认符合客户的密码规则;
PG原生的密码检查(passwordcheck)没有自定义规则,只能判断字符长度是否小于8且是否含有字母。
2 解决方案
修改PG passwordcheck源码文件,重新编译此动态库,然后替换当前到PG对应目录下。
3 关键操作
下载获取PG12.8源码包(https://www.postgresql.org/ftp/source/v12.8/postgresql-12.8.tar.gz)
修改源码包文件postgresql-12.8/contrib/passwordcheck/passwordcheck.c文件,
如下图这里是定义密码长度规则的位置,可进行修改。
检查是否有字母、特殊字符、数字
在/* check if the password contains both letters and non-letters */ 下方增加两行变量,如下图所示
替换for里面原来的方法:
将原始文件中的
if (isalpha((unsigned char) password[i]))
pwd_has_letter = true;
elsepwd_has_nonletter = true;
替换为下图内容,判断是否有字母、大小写、特殊字符、是否有数字
修改下方信息内容,增加提示信息
原始内容为
if (!pwd_has_letter || !pwd_has_nonletter)
ereport(ERROR,
(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
errmsg("password must contain both letters and nonletters")));
修改为如下内容
修改完成后保存postgresql-12.8/contrib/passwordcheck/passwordcheck.c文件。
5. 然后在contrib/passwordcheck/这个目录下,直接执行make命令编译得到新的passwordcheck.so文件,替换当前数据库服务器/var/postgresql/soft/pg12.8/lib下面的同名文件。
6. 加载这个动态库,在postgresql.conf参数文件里的shared_preload_libraries增加内容如下图所示:
7. 然后重启数据库服务,就能启用这个动态库检查密码。
8. 效果如下:创建一个不符合密码规则的用户,会提示ERROR信息。
4 注意事项
使用前请在测试环境验证,再应用于生产环境,相关文件覆盖前请做好备份。
如何修改PostgreSQL数据库密码规则
本文2024-09-23 01:12:57发表“云苍穹知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-cangqiong-144517.html