如何启用密码复杂度策略_mysql安全配置

MySQL需手动启用validate_password插件并配置系统变量以强制密码复杂度。先检查安装状态,未激活则INSTALL PLUGIN加载;再通过SET GLOBAL设置policy、length等参数控制强度,或写入my.cnf永久生效;新用户创建或改密时自动校验,可用VALIDATE_PASSWORD_STRENGTH函数测试强度分值。

MySQL 默认不强制密码复杂度,需手动启用并配置验证插件。核心是加载 validate_password 插件,并设置对应系统变量。

确认并加载 validate_password 插件

该插件是 MySQL 官方提供的密码强度校验模块,5.7 及以上版本自带(8.0 默认启用)。先检查是否已安装:

  • 登录 MySQL 后执行:SHOW PLUGINS;,查找 validate_password
  • 若未激活,运行:INSTALL PLUGIN validate_password SONAME 'validate_password.so';(Linux)或 'validate_password.dll'(Windows)
  • 验证是否生效:SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME = 'validate_password';,状态应为 ACTIVE

配置密码复杂度规则

通过修改全局系统变量控制策略强度,常用参数包括:

  • validate_password.policy:策略等级(0=LOW,1=MEDIUM,2=STRONG),建议设为 1 或 2
  • validate_password.length:最小长度(默认 8,建议 ≥12)
  • validate_password.mixed_case_count:至少包含大写+小写字母的个数(如设为 1,表示必须含至少 1 个大写和 1 个小写)
  • validate_password.number_count:至少包含数字的个数(建议 ≥1)
  • validate_password.special_char_count:至少包含特殊字符的个数(如 !@#$% 等,建议 ≥1)

设置示例(临时生效):

SET GLOBAL validate_password.policy = 2;
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;

如需永久生效,将上述变量写入 my.cnf(Linux)或 my.ini(Windows)的 [mysqld] 段下,然后重启 MySQL 服务。

验证策略是否起作用

新建用户或修改密码时会自动校验。例如执行:
CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'abc123';
若密码太弱(如无大写、无特殊符、长度不足),会报错:ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

也可用内置函数测试:SELECT VALIDATE_PASSWORD_STRENGTH('MyPass123!'); 返回 0–100 的强度分值。

注意事项与兼容性

MySQL 8.0 中插件名改为 validate_password(旧版 5.7 也支持),但部分云数据库(如阿里云 RDS、腾讯云 CDB)可能禁用该插件或限制参数修改,需查阅对应平台文档。

策略仅影响新设/修改的密码,不会强制已有用户改密;若需批量加固,需结合 ALTER USER ... IDENTIFIED BY 逐个更新。

避免将策略设得过于严苛(如要求 4 类字符+长度 20),以免运维操作受阻或引发应用连接失败。