PG-用户账号安全
用户安全
用户密码
密码复杂度
PostgreSQL支持通过动态库的方式扩展PG的功能(即插件),而密码复杂度可以通过预加载passwordcheck.so模块实现。该模块可以检查密码复杂度(密码长度,包含数字,字母,大小写,特殊字符等,同时排除暴力破解字典中的字符串)
配置方式
通过$PGDATA/postgresql.conf
的
- local_preload_libraries (string)
- session_preload_libraries (string)
- shared_preload_libraries (string)
创建测试用户
--创建用户
CREATE USER u1 WITH PASSWORD '123';
create role test password 'Test#2021' login;
--修改用户密码
ALTER USER u1 WITH PASSWORD '111';
alter role test password 'test#2021';
密码加密存储
加密方式
show password_encryption;
查看用户密码
select usename, passwd, valuntil from pg_shadow where usename='test';
SELECT rolname,rolpassword FROM pg_authid;
用户密码到期
设置用户密码过期时间
alter user test with valid until '2021-01-01 08:00:00';
查看用户密码过期时间
-- 查看用户信息
select usename, valuntil from pg_user
where usename = 'postgres';
valuntil 列表示密码的有效期
密码失败验证延迟
auth_delay.so 模块会导致服务器在报告身份验证失败之前短暂停留,这个主要用于防止暴力破解. 验证失败后, 延迟一个时间窗口才能继续验证。
配置
ls -l $PGHOME/lib/auth_delay.so
# 配置参数文件
grep 'shared_preload_libraries' $PGDATA/postgresql.conf
auth_delay.milliseconds (int) --指定延迟时间
防止密码被记录到数据库日志中
密码的配置命令可能会被记录到history文件及csvlog日志文件中(如果开启了DDL或更高级别审计log_statement),这些文件明文记录了密码,可能造成密码泄露风险。
密码可能被记录的2个地方
-
HISTFILE
-
可以通过 PSQL_HISTORY 变量配置历史文件存储路径
-
默认存储路径
- Linux/Unix:
~/.psql_history
- Windows:
%APPDATA%\postgresql\psql_history
- Linux/Unix:
-
可以在~/.psqlrc 文件中为每个数据库指定独立的 history 文件
# 添加如下配置 vi ~/.psqlrc \set HISTFILE ~/.psql_history- :DBNAME
-
-
数据库中log_filename配置文件中
-
当 log_statement 配置 ddl 或更高级别审计时,将密码明文记录到日志文件中
grep 'log_statement' $PGDATA/postgresql.conf
-
防止记录密码的方式创建或修改用户密码
- 使用createuser命令行工具带上
-W
选项,提示输入密码 - 使用pg_md5工具生成密码,然后使用该md5的值设置用户密码
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)