mysql如何限制用户修改密码_mysql密码策略设置

来源:这里教程网 时间:2026-02-28 20:49:05 作者:

密码策略不是“限制用户改密码”,而是强制新密码合规

MySQL 本身不提供「禁止某用户修改自己密码」的权限开关,

ALTER USER ... IDENTIFIED BY
是用户级操作,只要用户有
CREATE USER
UPDATE
权限(或更高),就能执行。真正起作用的是
validate_password
插件——它在你设新密码时校验强度,不达标就直接报错:
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
。所以所谓“限制”,其实是用策略把弱密码挡在门外。

策略只在校验阶段生效:创建用户、
ALTER USER
SET PASSWORD
都会触发
它不管你是 root 还是普通用户,也不区分本地/远程连接,一视同仁 策略对已存在的弱密码无效——只管“改”和“新建”,不追溯旧账 若用户绕过策略(比如用哈希值直写
authentication_string
),必须先
UNINSTALL PLUGIN validate_password
,否则 UPDATE 会被拒绝

快速启用并调低策略(开发/测试环境常用)

很多新手卡在刚装完 MySQL 8.0 就连不上,就是因为默认

validate_password_policy = MEDIUM
拒绝了简单密码。临时救急可这样操作:

确认插件是否加载:
SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME = 'validate_password';
若未启用,安装:
INSTALL PLUGIN validate_password SONAME 'validate_password.so';
立即降低要求(重启后失效):
SET GLOBAL validate_password_policy = LOW;
SET GLOBAL validate_password_length = 6;
再执行密码修改:
ALTER USER 'test'@'localhost' IDENTIFIED BY '123456';

⚠️ 注意:

LOW
策略只检查长度,不校验大小写/数字/特殊字符;但即使设成
LOW
validate_password_length
默认仍是 8,所以必须显式设为 6 才能用 6 位密码。

让策略永久生效:必须写进配置文件

SET GLOBAL
修改只在当前实例生命周期内有效,MySQL 重启后还原。生产环境务必写入
my.cnf
(Linux)或
my.ini
(Windows)的
[mysqld]
段:

[mysqld]
validate_password_policy=STRONG
validate_password_length=12
validate_password_mixed_case_count=2
validate_password_number_count=2
validate_password_special_char_count=2
validate_password_check_user_name=ON

✅ 这样重启后仍生效;❌ 不要漏掉

validate_password_check_user_name=ON
,否则用户
'admin'
设密码
'admin123!'
也能通过——因为策略默认不检查用户名相似性。

想彻底禁用?可以,但别长期开着

某些老旧系统集成脚本硬编码了弱密码,实在无法改代码时,可临时卸载插件:

禁用:
UNINSTALL PLUGIN validate_password;
此时
ALTER USER 'xxx'@'%' IDENTIFIED BY '123'
就能成功
用完立刻恢复:
INSTALL PLUGIN validate_password SONAME 'validate_password.so';

⚠️ 生产环境长期关闭等于裸奔:没有策略时,

root
被设成
'password'
或空密码都无人拦截。更危险的是,一旦卸载插件,所有依赖它的参数(如
validate_password_length
)将从
SHOW VARIABLES
中消失,后续
SET GLOBAL
会报错 Unknown system variable —— 很容易让人误以为“策略还在但没生效”。

相关推荐