前言
在数据库安全领域,密码复杂度一直是个绕不开的话题——尤其是面对等保测评这类合规要求的时候。很多团队都会遇到一个尴尬:明明配了强密码策略,结果审计一来,还是发现密码太简单。其实解决思路并不复杂,PostgreSQL自带的passwordcheck模块就能胜任这个任务,配置起来也相当轻量。
启用密码复杂度验证
首先,找到PostgreSQL安装目录下的postgresql.conf文件,这个文件通常位于/etc/postgresql/版本号/main/或用户自定义的数据目录中。用你顺手的编辑器打开它:
vim postgresql.conf
在配置文件中找到shared_preload_libraries这一行,如果没有就手动添加。将passwordcheck模块加入预加载库列表:
shared_preload_libraries = 'passwordcheck'
保存后,重启PostgreSQL服务让配置生效:
systemctl restart postgresql
怎么确认它真的生效了?很简单,试着创建一个密码过于简单的用户:
CREATE USER test_pwck WITH PASSWORD '123';
如果看到类似“密码不符合复杂度要求”的错误提示,那就说明配置成功了。下面这张图就是验证时的典型提示界面:
修改用户有效期
密码复杂度搞定之后,另一个常见的需求是给用户设置有效期——比如临时账号或者外包人员的账号,到期自动失效。PostgreSQL通过VALID UNTIL子句来实现:
-- 修改用户有效期 ALTER ROLE test_val VALID UNTIL '2024-09-01';
想知道用户究竟什么时候过期?查询系统视图pg_user就能看到:
select * from pg_user
结果里会有一列valuntil,显示的就是每个用户的有效期截止时间。下面这张截图展示了典型的查询结果:

修改监听IP地址
最后,补充一个实际运维中常用的操作——限制数据库的监听地址。默认情况下PostgreSQL只监听本地回环地址,如果需要让其他服务器(比如应用服务器)连接,就要修改pg_hba.conf文件。同样先编辑它:
vim pg_hba.conf
在文件中添加类似下面的条目,指定允许访问的IP网段和认证方式:
host all all 172.16.10.0/24 md5 host all all 192.168.4.0/24 md5
配置完成后,记得重启或重载配置文件。下图是pg_hba.conf中新增规则后的示例:
总结
密码复杂度、用户有效期、监听地址限制——这三块基本上是PostgreSQL安全配置的入门三件套。密码复杂度靠passwordcheck模块一把梭,有效期通过VALID UNTIL精确控制,而监听IP的授权则靠pg_hba.conf来把关。组合使用,基本能应对大多数等保场景。当然,真实环境里可能还要考虑SSL加密、审计日志等更深入的机制,但先把这些基础打牢,后面的路就顺畅多了。
