MySQL 创建账号报错 1819 - Your password does not satisfy the current policy requirements

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.cnfmy.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级别),避免使用字典单词,定期轮换密码,并通过安全存储系统保管密码凭证。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容