必须先确认validate_password插件已加载并启用,再用带点号的新变量名(如validate_password.policy)调整参数,否则所有SET GLOBAL操作都会报ERROR 1193;MySQL 8.0.4+已弃用validate_password_policy等旧变量名,仅识别validate_password.policy等新格式,且需插件ACTIVE、参数按序设置、配置写入[mysqld]段并重启生效。

直接结论:必须先确认 validate_password 插件已加载并启用,再用带点号的新变量名(如 validate_password.policy)调整参数,否则所有 SET GLOBAL 操作都会报 ERROR 1193。
为什么 SET GLOBAL validate_password_policy = 0 会报错 Unknown system variable
MySQL 8.0.4+ 彻底弃用了旧变量名(validate_password_policy、validate_password_length),改用带点号的命名方式:validate_password.policy、validate_password.length。硬套 5.7 的写法,MySQL 根本不认识这个变量。
- 先执行
SHOW VARIABLES LIKE 'validate_password%';—— 如果返回空,说明插件压根没加载,不是变量名错了,是插件根本不在运行 - 再查插件状态:
SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME = 'validate_password';,只有PLUGIN_STATUS = 'ACTIVE'才算真正就位 - 若为
DISABLED或无结果,需手动安装:INSTALL PLUGIN validate_password SONAME 'validate_password.so';(Linux)或'validate_password.dll';(Windows)
降低策略时必须同步调整的四个关键参数
只设 validate_password.policy = LOW(即 0)不够——它只是总开关,背后还有四个硬性校验项,它们默认值不随 policy 自动归零:
-
validate_password.length:最低长度,默认 8;设简单密码时至少得设成 4(不能低于其他三项之和) -
validate_password.mixed_case_count:大小写字母数量要求,默认 1;设为 0 才允许全小写如123456 -
validate_password.number_count:数字数量要求,默认 1;设为 0 才允许纯字母密码 -
validate_password.special_char_count:特殊字符数量要求,默认 1;设为 0 才允许无符号密码
顺序很重要:先设 policy = LOW,再逐个清零其余参数。如果反过来,MySQL 不会自动覆盖旧值。
面向 CRM 系统的 MySQL 8 数据库模式设计。当用户需要为客户关系管理(CRM)系统设计、评审、优化或生成数据库模式时,应使用此项技能。
ALTER USER 还报 ERROR 1819?检查认证插件是否拖后腿
即使密码策略已调低,ALTER USER 'root'@'localhost' IDENTIFIED BY '123456' 仍可能失败,常见原因不是策略问题,而是认证插件不兼容:
- MySQL 8.0 默认用
caching_sha2_password,部分老客户端(如旧版 PHP mysqli、某些 JDBC 驱动)不支持它,连接时会卡在认证环节 - 解决办法是切回兼容性更好的
mysql_native_password:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456'; - 若提示
ERROR 1524 (HY000): Plugin 'mysql_native_password' is not loaded,先执行:INSTALL PLUGIN mysql_native_password SONAME 'mysql_native_password.so'; - 为防重启后新用户又走
caching_sha2_password,务必在my.cnf的[mysqld]段加一行:default_authentication_plugin=mysql_native_password
永久生效必须写进配置文件并重启
SET GLOBAL 只对当前会话有效,服务重启后全部还原。要一劳永逸,必须编辑 MySQL 主配置文件(如 /etc/mysql/mysql.conf.d/mysqld.cnf 或 C:\my.ini):
- 确保写在
[mysqld]段下,且拼写准确:validate_password.policy = LOW(不是validate_password_policy) - 完整示例:
validate_password.policy = LOW validate_password.length = 4 validate_password.mixed_case_count = 0 validate_password.number_count = 0 validate_password.special_char_count = 0
- 改完必须重启服务:
sudo systemctl restart mysql(Linux)或net stop mysql && net start mysql(Windows) - 重启后验证:
SHOW VARIABLES LIKE 'validate_password%';,确认所有值已更新
最容易被忽略的是:插件未启用就急着调参数,或者认证插件没换导致连不上——这两步漏掉任何一项,123456 就永远设不进去。

















