首页 > 数据库 >MySQL 5.7安全修改用户登录密码方法

MySQL 5.7安全修改用户登录密码方法

来源:互联网 2026-07-01 08:53:05

改密码时,到底该用 ALTER USER 还是 SET PASSWORD?这个问题其实无需纠结。从 MySQL 5.7.6 开始,官方已明确给出答案:优先选择 ALTER USER。它更安全、更直接,且天然兼容密码强度校验策略,执行后立即生效,无需额外刷新权限。相比之下,SET PASSWORD 需

改密码时,到底该用 ALTER USER 还是 SET PASSWORD?这个问题其实无需纠结。从 MySQL 5.7.6 开始,官方已明确给出答案:优先选择 ALTER USER。它更安全、更直接,且天然兼容密码强度校验策略,执行后立即生效,无需额外刷新权限。相比之下,SET PASSWORD 需要配合 PASSWORD() 函数,一旦版本写错或漏掉函数,就会报 ERROR 1372 让人摸不着头脑。 更重要的是,ALTER USER 还能一次性完成密码过期、账户锁定等精细控制,运维起来省心不少。

具体用法也很简单:

  • 修改当前登录用户:ALTER USER USER() IDENTIFIED BY 'NewPass123!';
  • 修改指定用户(注意 host 必须与 mysql.user 表里记录完全一致):ALTER USER 'appuser'@'10.0.2.%' IDENTIFIED BY 'NewPass123!';
  • 如需禁用密码过期并解锁账户,一条命令即可:ALTER USER 'appuser'@'localhost' IDENTIFIED BY 'NewPass123!' PASSWORD EXPIRE NEVER ACCOUNT UNLOCK;

执行完 ALTER USER,还要不要 FLUSH PRIVILEGES

不需要。这是最容易踩坑的地方。许多人习惯性地认为改了权限就得刷新,但 ALTER USER 本身就是权限系统的原生操作,它会同步更新内存中的权限缓存,执行后立即生效。只有当你直接通过 UPDATE mysql.user 表修改 authentication_string 字段时,才需要显式调用 FLUSH PRIVILEGES。虽然加上这句不会报错,但属于冗余操作,还可能掩盖真实问题——比如你改了 'root'@'127.0.0.1' 的密码,却用 'root'@'localhost' 登录,即使刷新权限也连不上。

长期稳定更新的攒劲资源: >>>点此立即查看<<<

密码太简单被拒绝?先看 validate_password 策略

MySQL 5.7 默认启用了密码强度校验,如果设一个 123456,它会直接返回:ERROR 1819 (HY000): Your password does not satisfy the current policy requirements。先别急着卸载插件,先查一下当前策略是什么:

SELECT @@validate_password_policy, @@validate_password_length, @@validate_password_mixed_case_count;

如果是测试环境,临时调低策略也行:

  • SET GLOBAL validate_password_policy = LOW;
  • SET GLOBAL validate_password_length = 4;

生产环境就别图省事了,用 SELECT VALIDATE_PASSWORD_STRENGTH('YourNewPass!') AS score; 测试密码强度,分数 ≥ 50 才算达标。

改完密码还是连不上?重点排查这三处

这种情况往往不是语法问题,而是 MySQL 认证模型的细节没有对齐。真正让你头疼的,从来不是“怎么改”,而是“改完之后”的排查。

  • host 字段必须精确匹配:MySQL 将 'user'@'localhost''user'@'127.0.0.1' 视为两个独立账户。你改了其中一个,另一个仍是旧密码。用 SELECT user, host FROM mysql.user WHERE user = 'youruser'; 确认目标行。
  • 客户端是否还在用旧连接:某些 ORM(如 Django 的 CONN_MAX_AGE)或连接池(如 HikariCP)会保持长连接。新密码只对新建连接生效,需要重启应用或清空连接池。
  • 认证插件是否兼容:MySQL 5.7 默认使用 mysql_native_password,但如果你之前手动切换过插件(例如为了兼容老客户端),就需要确认一下:SELECT plugin FROM mysql.user WHERE user = 'youruser' AND host = 'yourhost';。如果不是 mysql_native_password,显式指定:ALTER USER 'user'@'host' IDENTIFIED WITH mysql_native_password BY 'pass';

这三条,漏掉任何一个,都会让你对着登录失败的日志反复怀疑人生。

侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述

热游推荐

更多
湘ICP备14008430号-1 湘公网安备 43070302000280号
All Rights Reserved
本站为非盈利网站,不接受任何广告。本站所有软件,都由网友
上传,如有侵犯你的版权,请发邮件给xiayx666@163.com
抵制不良色情、反动、暴力游戏。注意自我保护,谨防受骗上当。
适度游戏益脑,沉迷游戏伤身。合理安排时间,享受健康生活。