ALTER USER 是什么
ALTER USER 用来修改已有账号的属性:重置密码、解除锁定、切换认证插件、要求加密连接、设置资源限制(每小时查询数、连接数上限)。它不改变账号权限,只改账号自身的属性,是账号运维中最常用的语句之一。
基本信息
| 语法 | ALTER USER '用户'@'来源主机' 属性列表 |
|---|---|
| 改密码 | IDENTIFIED BY '新密码' |
| 锁定状态 | ACCOUNT LOCK 与 ACCOUNT UNLOCK |
| 连接要求 | REQUIRE SSL 或 REQUIRE X509 |
| 资源限制 | WITH MAX_USER_CONNECTIONS 与 MAX_QUERIES_PER_HOUR 等 |
典型使用场景
- 密码轮换:定期改密码并记录变更,配合连接池热更新流程
- 账号被锁定后恢复:连续失败触发锁定或人为锁定后解除
- 限制单账号连接数:防止某个应用连接泄漏拖垮整个实例
- 强制加密连接:对外网可达的账号要求 TLS,防止凭据明文传输
- 密码过期策略:配合密码有效期,到期后要求强制修改
常用修改
常用修改
ALTER USER 'app'@'%' IDENTIFIED BY 'NewStr0ng#Pass!'; -- 改密码
ALTER USER 'app'@'%' ACCOUNT UNLOCK; -- 解锁
ALTER USER 'app'@'%' ACCOUNT LOCK; -- 主动锁定
ALTER USER 'app'@'%' REQUIRE SSL; -- 要求加密连接
ALTER USER 'app'@'%' WITH MAX_USER_CONNECTIONS 200 -- 资源限制
MAX_QUERIES_PER_HOUR 0;
ALTER USER 'app'@'%' IDENTIFIED WITH caching_sha2_password BY 'NewStr0ng#Pass!';
SELECT user, host, account_locked, password_expired FROM mysql.user WHERE user='app';常用属性对照
| 属性 | 作用 | 注意 |
|---|---|---|
| IDENTIFIED BY | 重设登录密码 | 不会踢掉已建立的会话 |
| ACCOUNT LOCK | 禁止新连接 | 已登录会话仍然可用 |
| REQUIRE SSL | 要求加密通道 | 不支持加密的客户端会连不上 |
| MAX_USER_CONNECTIONS | 单账号最大连接数 | 设为 0 表示不限制 |
| PASSWORD EXPIRE | 设置密码有效期 | 到期后需强制修改才能继续使用 |
改密码不会断开已有会话:旧连接继续用旧凭据工作,要彻底生效需要在连接池侧重建连接。
启用 REQUIRE SSL 前先确认所有客户端都支持加密连接,否则业务会直接连不上且报错信息不直观。
变更前的准备
- 记录变更前状态:先查一次账号属性,出问题时可回退比对
- 确认依赖方:列出使用该账号的应用与任务,通知到位再改
- 准备回退命令:改密码与改连接要求都要有对应的还原语句
- 在低峰执行:连接要求变更会让部分客户端在重连前持续失败