mysql创建账号报错
1819 - Your password does not satisfy the current policy requirements
这个错误表示密码不符合 MySQL 的密码策略要求。
根本原因分析
MySQL 5.7+ 版本默认启用了 validate_password 插件,强制执行以下要求:
| 策略等级 | 密码长度 | 大小写字母 | 数字 | 特殊字符 | 
|---|---|---|---|---|
| LOW | ≥8字符 | 无要求 | 无要求 | 无要求 | 
| MEDIUM (默认) | ≥8字符 | ≥1大写 +1小写 | ≥1数字 | ≥1特殊字符 | 
| STRONG | ≥8字符 | ≥1大写 +1小写 | ≥1数字 | ≥1特殊字符 + 字典检查 | 
解决方案一:创建符合策略的密码(推荐)
创建满足以下要求的密码:
- 至少8个字符
 - 包含至少1个大写字母(A-Z)
 - 包含至少1个小写字母(a-z)
 - 包含至少1个数字(0-9)
 - 包含至少1个特殊字符(如 @、#、$、% 等)
 
-- 示例:创建满足默认策略的账户
CREATE USER 'secure_user'@'%' IDENTIFIED BY 'My$trongP@ss123';
-- 带权限分配的完整语句示例
CREATE USER 'app_user'@'localhost' IDENTIFIED BY 'Secur3#App2023';
GRANT SELECT, INSERT, UPDATE ON mydb.* TO 'app_user'@'localhost';
FLUSH PRIVILEGES;
解决方案二:调整密码策略(适合开发环境)
1. 查看当前密码策略
SHOW VARIABLES LIKE 'validate_password%';
输出示例:
+--------------------------------------+--------+
| Variable_name                        | Value  |
+--------------------------------------+--------+
| validate_password_check_user_name    | OFF    |
| validate_password_dictionary_file    |        |
| validate_password_length             | 8      |
| validate_password_mixed_case_count   | 1      |
| validate_password_number_count       | 1      |
| validate_password_policy             | MEDIUM |
| validate_password_special_char_count | 1      |
+--------------------------------------+--------+
2. 降低密码策略要求(临时方案)
-- 降低策略等级(0=OFF, 1=LOW, 2=MEDIUM, 3=STRONG)
SET GLOBAL validate_password_policy = LOW;  -- 或0
-- 减小密码最小长度要求
SET GLOBAL validate_password_length = 4;
-- 重置特殊字符要求
SET GLOBAL validate_password_special_char_count = 0;
-- 然后创建账号
CREATE USER 'dev_user'@'%' IDENTIFIED BY '1234';
3. 永久修改策略(修改配置文件)
编辑 my.cnf 或 my.ini 文件:
[mysqld]
# 完全禁用密码验证
# validate_password = OFF
# 或设置自定义策略
validate_password_policy = LOW
validate_password_length = 6
validate_password_mixed_case_count = 0
validate_password_number_count = 0
validate_password_special_char_count = 0
解决方案三:完全禁用密码策略(仅用于测试)
方法1:卸载插件
UNINSTALL PLUGIN validate_password;
CREATE USER 'test_user'@'%' IDENTIFIED BY '123';
方法2:启动时禁用
mysqld --validate_password=OFF
密码策略说明
| 策略变量 | 说明 | 默认值 | 推荐值(生产) | 
|---|---|---|---|
| validate_password_policy | 策略等级 | MEDIUM | STRONG | 
| validate_password_length | 最小长度 | 8 | ≥12 | 
| validate_password_mixed_case_count | 混合大小写要求 | 1 | 1 | 
| validate_password_number_count | 数字要求 | 1 | 1 | 
| validate_password_special_char_count | 特殊字符要求 | 1 | 1 | 
| validate_password_dictionary_file | 字典文件路径 | 空 | 设置路径 | 
恢复密码策略最佳实践(生产环境)
-- 设置强密码策略
SET GLOBAL validate_password_policy = STRONG;
SET GLOBAL validate_password_length = 12;
SET GLOBAL validate_password_mixed_case_count = 1;
SET GLOBAL validate_password_number_count = 1;
SET GLOBAL validate_password_special_char_count = 1;
-- 修改现有弱密码账户
ALTER USER 'weak_user'@'%' IDENTIFIED BY 'New$trongP@ss123!';
验证密码强度
SELECT VALIDATE_PASSWORD_STRENGTH('abc');  -- 返回分数(0-100)
SELECT * FROM mysql.USER;
不同MySQL版本的注意事项
| MySQL 版本 | 特性差异 | 
|---|---|
| 5.7.x | 默认启用策略,变量前缀为validate_password_
 | 
| 8.0.x | 支持密码过期策略,新增validate_password.dictionary_file参数 | 
| 5.6.x | 需要手动安装validate_password插件 | 
| MariaDB | 使用simple_password_check插件而非validate_password
 | 
生产环境建议:始终使用强密码策略(STRONG级别),避免使用字典单词,定期轮换密码,并通过安全存储系统保管密码凭证。