ERROR 1819 是因 validate_password 组件启用 MEDIUM 策略所致,需通过 SET GLOBAL 或 my.cnf 调整 policy 及 length、mixed_case_count 等依赖参数,并确保使用 SUPER 权限和重启服务;若仍报错,可改用 mysql_native_password 插件绕过校验。

直接结论:ERROR 1819 不是密码“太简单”,而是 validate_password 组件正在执行默认的 MEDIUM 策略;必须用 SET GLOBAL 或配置文件调整参数,不能靠改密码绕过去。
怎么确认 validate_password 组件是否已启用
登录 MySQL 后立即执行:
SELECT * FROM mysql.component WHERE component_id = 'validate_password';
若返回空行,说明组件未加载(极少见),可跳过后续策略调整;若返回一行且 status 是 ACTIVE,则必须处理。也常用这个命令快速验证:
SHOW VARIABLES LIKE 'validate_password.%';
你会看到类似 validate_password.policy = 1、validate_password.length = 8 的输出——这就是当前生效的规则。
SET GLOBAL 调低策略为什么有时不生效
常见失效原因有三个:
- 执行
SET GLOBAL validate_password.policy = LOW;前,你当前会话没有 SUPER 权限(比如用普通用户连入) - 只设了
policy = LOW,但没同步调低依赖参数:validate_password.length、validate_password.mixed_case_count等仍卡在默认值,导致弱密码仍被拦 - 你改的是当前会话变量(
SET SESSION),而该组件只响应GLOBAL级别设置
正确做法是连续执行:
SET GLOBAL validate_password.policy = LOW;<br>SET GLOBAL validate_password.length = 6;<br>SET GLOBAL validate_password.mixed_case_count = 0;<br>SET GLOBAL validate_password.number_count = 0;<br>SET GLOBAL validate_password.special_char_count = 0;
注意:这些命令对已存在的用户密码无影响,只约束后续的 ALTER USER 或 CREATE USER 操作。
面向 CRM 系统的 MySQL 8 数据库模式设计。当用户需要为客户关系管理(CRM)系统设计、评审、优化或生成数据库模式时,应使用此项技能。
my.cnf 配置永久生效的关键写法
编辑 MySQL 主配置文件(如 /etc/mysql/mysql.conf.d/mysqld.cnf 或 C:\mysql\my.ini),在 [mysqld] 段下添加:
validate_password.policy = LOW<br>validate_password.length = 4<br>validate_password.mixed_case_count = 0<br>validate_password.number_count = 0<br>validate_password.special_char_count = 0
务必注意:
- 参数名必须带点号(
validate_password.policy),不是下划线(validate_password_policy)——后者在 MySQL 8.0+ 无效 - 不要写
validate_password = OFF,该语法已在 MySQL 8.0.26+ 废弃,会导致 mysqld 启动失败 - 改完必须重启服务:
sudo systemctl restart mysql(Linux)或net stop mysql && net start mysql(Windows)
重启后进库执行 SHOW VARIABLES LIKE 'validate_password.%';,确认所有值已更新,再试 ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';。
批量改密时仍报 ERROR 1819?检查认证插件类型
即使策略已调低,ALTER USER ... IDENTIFIED BY 还是失败,大概率是因为用户当前用的是 caching_sha2_password 插件——它对弱密码更敏感,且部分客户端不兼容。稳妥解法是显式指定旧式插件:
ALTER USER 'u'@'%' IDENTIFIED WITH mysql_native_password BY '123';
这条语句会绕过 caching_sha2_password 的额外校验,只受 validate_password 规则约束。但注意:mysql_native_password 安全性较低,仅建议用于开发/测试环境。
真正容易被忽略的一点:MySQL 8.0 的密码策略是组件级的,不是全局开关;它不关心你“想不想用弱密码”,只严格执行当前加载的规则集。临时调低后没立刻生效,往往是因为漏掉了某个依赖参数,或者误以为配置写进 my.cnf 就自动热加载了。

















