PostgreSQL 修改用户密码

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用户密码

解决方法

  1. 停止PostgreSQL服务
  2. 编辑pg_hba.conf,将认证方法改为trust:
    local   all   postgres   trust
    
  3. 重新加载配置
  4. 无需密码登录并修改密码
  5. 恢复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_%';

五 安全最佳实践

  1. 密码复杂度

    • 至少12个字符
    • 包含大小写字母、数字和特殊字符
    • 避免使用字典单词
  2. 密码存储

    • PostgreSQL默认使用scram-sha-256加密
    • 确保pg_hba.conf使用安全认证方法
  3. 定期轮换

    -- 检查密码最后修改时间(需pg_shadow权限)
    SELECT usename, passwd FROM pg_shadow;
    

六 密码加密方式

PostgreSQL支持多种密码加密算法:

加密方式命令示例安全性
scram-sha-256ALTER USER...WITH PASSWORD 'pwd'高(默认)
md5ALTER USER...WITH ENCRYPTED PASSWORD 'pwd'中(兼容旧版)
plaintextALTER USER...WITH UNENCRYPTED PASSWORD 'pwd'低(不推荐)

设置默认加密方式(postgresql.conf):

password_encryption = scram-sha-256

七 故障排除

常见错误及解决

  1. 权限不足

    ERROR: must be superuser to alter superusers
    

    解决方案:使用postgres用户或具有CREATEROLE权限的用户执行

  2. 密码包含特殊字符

    -- 密码包含单引号时
    ALTER USER test WITH PASSWORD $$don't_use_this$$;
    
  3. 连接问题

    • 修改密码后记得更新应用连接配置
    • 检查pg_hba.conf的认证方法是否匹配

谨记:心存敬畏,行有所止。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值