【重学 MySQL】九十二、 MySQL8 密码强度评估与配置指南
【重学 MySQL】九十二、 MySQL8 密码强度评估与配置指南
- 一、MySQL 8 密码强度评估机制
- 1. **核心插件:validate_password**
- 2. **密码策略级别详解**
- 3. **默认配置**
- 二、配置与调整密码策略
- 1. **查看当前策略**
- 2. **动态修改策略(无需重启)**
- 3. **通过配置文件持久化设置**
- 4. **禁用密码强度检查(不推荐)**
- 三、密码策略高级配置
- 1. **密码历史记录**
- 2. **密码过期策略**
- 3. **字典检查(STRONG策略)**
- 四、验证密码强度
- 1. **创建用户时自动检查**
- 2. **修改现有用户密码**
- 3. **手动验证密码强度**
- 五、常见问题解决
- 1. **错误:`Your password does not satisfy the current policy requirements`**
- 2. **插件未启用**
- 3. **策略不生效**
- 六、最佳实践建议
一、MySQL 8 密码强度评估机制
1. 核心插件:validate_password
- 默认启用:MySQL 8 默认集成
validate_password
插件,负责密码强度检查。 - 功能:
- 强制密码符合预设策略(长度、复杂度、历史记录等)。
- 提供三种策略级别:
LOW
、MEDIUM
、STRONG
。
2. 密码策略级别详解
策略级别 | 最小长度 | 复杂度要求 |
---|---|---|
LOW | 8 | 仅检查长度。 |
MEDIUM | 8 | 长度 ≥ 8,且包含数字、大小写字母、特殊字符中的至少两种。 |
STRONG | 8 | 长度 ≥ 8,且包含数字、大小写字母、特殊字符中的三种,并检查字典词汇和重复字符。 |
3. 默认配置
- 策略:
MEDIUM
。 - 最小长度:8。
- 其他要求:至少包含1个数字、1个特殊字符、1个大写或小写字母。
二、配置与调整密码策略
1. 查看当前策略
SHOW VARIABLES LIKE 'validate_password%';
输出示例:
+--------------------------------------+--------+
| Variable_name | Value |
+--------------------------------------+--------+
| validate_password_check_user_name | ON |
| 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. 动态修改策略(无需重启)
-- 设置策略为STRONG
SET GLOBAL validate_password_policy = 'STRONG';-- 设置密码最小长度为12
SET GLOBAL validate_password_length = 12;-- 要求至少包含1个大写字母、1个数字、1个特殊字符
SET GLOBAL validate_password_mixed_case_count = 1;
SET GLOBAL validate_password_number_count = 1;
SET GLOBAL validate_password_special_char_count = 1;
3. 通过配置文件持久化设置
编辑 my.cnf
或 my.ini
,在 [mysqld]
段添加:
[mysqld]
validate_password_policy = STRONG
validate_password_length = 12
validate_password_mixed_case_count = 1
validate_password_number_count = 1
validate_password_special_char_count = 1
重启服务生效:
sudo systemctl restart mysql # Linux系统
4. 禁用密码强度检查(不推荐)
-- 禁用插件(临时)
SET GLOBAL validate_password = OFF;-- 永久禁用(修改配置文件)
[mysqld]
validate_password = OFF
三、密码策略高级配置
1. 密码历史记录
- 禁止重复使用旧密码:
-- 设置密码历史记录为6次 SET GLOBAL password_history = 6;-- 设置密码重复使用间隔为365天 SET GLOBAL password_reuse_interval = 365;
2. 密码过期策略
-- 设置密码有效期为90天
SET GLOBAL default_password_lifetime = 90;
3. 字典检查(STRONG策略)
- 指定字典文件:
字典文件每行包含一个禁用词汇(如常见密码)。SET GLOBAL validate_password_dictionary_file = '/path/to/dictionary.txt';
四、验证密码强度
1. 创建用户时自动检查
-- 符合策略的密码
CREATE USER 'user'@'localhost' IDENTIFIED BY 'StrongPass123!';-- 违反策略的密码(示例:长度不足)
CREATE USER 'user2'@'localhost' IDENTIFIED BY 'weak';
-- 报错:ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
2. 修改现有用户密码
ALTER USER 'user'@'localhost' IDENTIFIED BY 'NewStrongPass123!';
3. 手动验证密码强度
-- 检查密码是否符合策略(无需修改实际密码)
SELECT validate_password_strength('WeakPass') AS Strength;
输出:
0
(LOW)、1
(MEDIUM)、2
(STRONG)。
五、常见问题解决
1. 错误:Your password does not satisfy the current policy requirements
- 原因:密码不符合当前策略。
- 解决:
- 调整密码策略(如降低策略级别或缩短长度)。
- 使用符合策略的密码(例如
SecurePass123!
)。
2. 插件未启用
- 现象:
SHOW PLUGINS
中validate_password
状态为DISABLED
。 - 解决:
INSTALL PLUGIN validate_password SONAME 'validate_password.so';
3. 策略不生效
- 检查配置:
SHOW VARIABLES LIKE 'validate_password%';
- 确保配置文件正确:检查
my.cnf
中的[mysqld]
段是否包含策略参数。
六、最佳实践建议
-
生产环境:
- 使用
STRONG
策略,最小长度 ≥ 12。 - 定期更新密码(如每90天)。
- 启用密码历史记录,防止重复使用旧密码。
- 使用
-
开发/测试环境:
- 可临时降低策略为
MEDIUM
,但需记录并恢复至生产标准。
- 可临时降低策略为
-
密码管理:
- 使用密码管理器生成高强度密码。
- 避免在密码中包含用户名或常见词汇(如
123456
、password
)。
通过以上配置,MySQL 8 的密码强度评估机制可有效提升数据库安全性,防止暴力破解和弱密码风险。