密码重置与轮换是什么
管理员用 ALTER USER ... IDENTIFIED BY 重置普通账号密码,这是 MySQL 5.7.6 之后的标准做法。真正的难点不在改密码这一步,而在轮换:同一个账号往往被应用配置、连接池、定时任务、数据同步工具、监控探活和备份脚本多处持有,漏掉任何一处,问题会延迟到下一次重连才爆发。
基本信息
| 重置语法 | ALTER USER 'app'@'10.0.%' IDENTIFIED BY '新口令' |
|---|---|
| 权限要求 | CREATE USER 权限,或对 mysql 系统库的 UPDATE 权限 |
| 默认插件 | 8.0 默认 caching_sha2_password,老客户端可能需要升级驱动 |
| 强制过期 | ALTER USER ... PASSWORD EXPIRE,下次登录必须改密 |
| 锁定与解锁 | ALTER USER ... ACCOUNT LOCK / ACCOUNT UNLOCK |
典型使用场景
- 定期轮换:合规要求按季度或半年更换应用账号口令
- 人员离场:原维护人员知道口令时,立刻重置并同步到配置管理
- 口令泄漏应急:日志或代码仓库里出现过明文口令,按最小范围先改受影响账号
- 账号被锁自查:连续登录失败触发锁定后,先解锁再定位失败来源
- 环境隔离整改:测试环境与生产共用同一口令时,拆账号并各自独立设置
重置与验证
重置与验证
# 重置口令,主机名范围要与账号定义完全一致
ALTER USER 'app'@'10.0.%' IDENTIFIED BY 'Rotated#Pass2026!';
# 确认账号权限没有被顺手改掉
SHOW GRANTS FOR 'app'@'10.0.%';
# 确认账号状态:是否被锁、口令是否已过期
SELECT user, host, account_locked, password_expired FROM mysql.user WHERE user = 'app';
# 让口令到期,强制下一次登录修改(适用于人工账号)
ALTER USER 'dba_zhang'@'10.0.%' PASSWORD EXPIRE;
# 注意:ALTER USER 即时生效,不必再执行 FLUSH PRIVILEGES轮换检查清单
| 持有位置 | 典型表现 | 检查方式 |
|---|---|---|
| 应用配置文件 | 重启后立即连不上 | 全量搜索配置仓库中的账号名 |
| 连接池长连接 | 不重启时看不出问题,重连才失败 | 轮换后主动重建连接池验证 |
| 定时任务 | 夜间批处理报认证失败 | 核对 crontab 与脚本里的连接串 |
| 数据同步与 ETL | 复制或同步中断 | 确认同步工具里单独维护的凭据 |
| 监控与备份脚本 | 告警断档、备份失败 | 检查探活账号与备份账号 |
ALTER USER 修改口令后,已经认证过的既有连接不受影响,会一直用到断开为止;所以改完密码当场测试常常一切正常,故障要等连接重连才出现,必须主动触发一次重连验证。
ALTER USER 是即时生效的账号管理语句,通常不需要再执行 FLUSH PRIVILEGES;只有直接修改 mysql.user 等授权表时,才需要刷新权限使其生效。