PostgreSQL 修改用户密码
PostgreSQL 提供了多种方式来修改用户密码,以下是全面的密码修改方法和注意事项:
一 基本密码修改方法
1.1 使用 ALTER USER 命令(推荐)
-- 修改当前用户密码
ALTER USER current_user WITH PASSWORD 'new_password';
-- 修改指定用户密码(需要权限)
ALTER USER username WITH PASSWORD 'new_password';
1.2 使用 psql 的 \password 命令
psql -U username -d database
\password username
# 会提示输入新密码两次
二 不同环境下的密码修改
2.1 本地修改(有管理员权限)
-- 以postgres用户登录后
sudo -u postgres psql
ALTER USER dbuser WITH PASSWORD 'new_secure_pass123';
2.2 远程修改(通过psql连接)
psql -h 192.xxx.xxx.99 -U postgres -d postgres
# 输入当前密码后执行:
ALTER USER app_user WITH PASSWORD 'new_pass!456';
三 密码策略控制
3.1 密码有效期设置
-- 设置密码有效期
ALTER USER username VALID UNTIL '2025-12-31';
-- 使密码永不过期
ALTER USER username VALID UNTIL 'infinity';
3.2 密码复杂度要求(需安装扩展)
CREATE EXTENSION pgcrypto;
ALTER USER username WITH ENCRYPTED PASSWORD 'Complex@Pass123';
四 特殊场景处理
4.1 忘记postgres用户密码
解决方法:
- 停止PostgreSQL服务
- 编辑pg_hba.conf,将认证方法改为trust:
local all postgres trust
- 重新加载配置
- 无需密码登录并修改密码
- 恢复pg_hba.conf设置
4.2 批量修改用户密码
-- 生成批量修改语句
SELECT 'ALTER USER '||usename||' WITH PASSWORD '''||
substr(md5(random()::text), 0, 10)||''';'
FROM pg_user
WHERE usename NOT LIKE 'pg_%';
五 安全最佳实践
-
密码复杂度:
- 至少12个字符
- 包含大小写字母、数字和特殊字符
- 避免使用字典单词
-
密码存储:
- PostgreSQL默认使用scram-sha-256加密
- 确保pg_hba.conf使用安全认证方法
-
定期轮换:
-- 检查密码最后修改时间(需pg_shadow权限) SELECT usename, passwd FROM pg_shadow;
六 密码加密方式
PostgreSQL支持多种密码加密算法:
加密方式 | 命令示例 | 安全性 |
---|---|---|
scram-sha-256 | ALTER USER...WITH PASSWORD 'pwd' | 高(默认) |
md5 | ALTER USER...WITH ENCRYPTED PASSWORD 'pwd' | 中(兼容旧版) |
plaintext | ALTER USER...WITH UNENCRYPTED PASSWORD 'pwd' | 低(不推荐) |
设置默认加密方式(postgresql.conf):
password_encryption = scram-sha-256
七 故障排除
常见错误及解决
-
权限不足:
ERROR: must be superuser to alter superusers
解决方案:使用postgres用户或具有CREATEROLE权限的用户执行
-
密码包含特殊字符:
-- 密码包含单引号时 ALTER USER test WITH PASSWORD $$don't_use_this$$;
-
连接问题:
- 修改密码后记得更新应用连接配置
- 检查pg_hba.conf的认证方法是否匹配
谨记:心存敬畏,行有所止。