首页/数据/数据库速查/忘记普通账号密码与密码轮换

忘记普通账号密码与密码轮换

管理员重置:ALTER USER … IDENTIFIED BY;轮换要连业务配置、定时任务、监控探活一起改,遗漏就会在下次重连时爆雷。

数据库速查数据更新于 2026-10-13

密码重置与轮换是什么

管理员用 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 等授权表时,才需要刷新权限使其生效。

易错点

  • 只改数据库不做重连验证:故障延迟到下一次重连才暴露,可能发生在夜间批量任务或扩容时,排障成本成倍上升
  • 同一账号被多个系统共用就贸然轮换:谁是使用方都说不清,先拆账号再轮换,否则变更不可控
  • 改密码时主机范围写错:'app'@'%' 与 'app'@'10.0.%' 是两个账号,改了一个而实际连接匹配另一个,表现为改了密码还是能连上
  • 8.0 升级后仍用旧客户端连接 caching_sha2_password 账号:报认证插件不兼容,需要升级驱动或按需调整账号插件
  • 轮换后没有更新配置管理中的存量记录:下次扩容或灾备切换时又用回旧口令,形成无法复现的连接故障

数据来源与参考

  • MySQL 8.0 Reference Manual: ALTER USER Statement

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌