MySQL需启用validate_password插件才能生效密码复杂度策略,未启用时所有配置无效;启用后通过validate_password.policy(LOW/MEDIUM/STRONG)及length、number_count等变量控制校验规则,且必须写入my.cnf持久化。
phpmyadmin 本身不提供密码复杂度策略功能,它只是 mysql 的 web 管理界面;真正起作用的是 mysql 服务端的 validate_password 插件。
MySQL 是否已启用 validate_password 插件?
在 phpMyAdmin 的「SQL」标签页中执行:
SHOW PLUGINS WHERE Name = 'validate_password';
如果返回空结果或 Status 为 DISABLED,说明插件未启用。需先由数据库管理员(有 SUPER 权限)在 MySQL 命令行或配置文件中启用:
- 运行命令:
INSTALL PLUGIN validate_password SONAME 'validate_password.so';(Linux)或validate_password.dll(Windows) - 或在
my.cnf/my.ini中添加:plugin-load-add = validate_password.so,然后重启 MySQL - 启用后,
SHOW VARIABLES LIKE 'validate_password%';可查看当前策略级别和规则
如何设置密码最小长度和字符类型要求?
插件通过系统变量控制策略,所有设置都在 MySQL 层完成,phpMyAdmin 仅能用于查询或执行 SET 命令(需有权限):
-
validate_password.length:默认 8,设为 12 表示至少 12 位:SET GLOBAL validate_password.length = 12; -
validate_password.mixed_case_count:要求至少几个大小写字母组合,如设为 2 -
validate_password.number_count和validate_password.special_char_count分别控制数字与特殊字符最低数量 -
validate_password.policy可设为 0(LOW)、1(MEDIUM)、2(STRONG),设为 2 会自动启用全部校验项
注意:GLOBAL 设置重启后失效,必须写入配置文件才能持久化。
立即学习“PHP免费学习笔记(深入)”;
为什么在 phpMyAdmin 创建用户时没触发密码检查?
常见原因有三个:
- 你用的是 phpMyAdmin 的「用户账户」页面 → 它底层调用的是
CREATE USER或ALTER USER,但若当前 MySQL 用户(即登录 phpMyAdmin 所用账号)没有SYSTEM_VARIABLES_ADMIN和SESSION_VARIABLES_ADMIN权限,插件变量可能对当前会话不可见,导致校验被跳过 - MySQL 版本低于 5.7.6(插件引入版本)或 MariaDB 未启用 equivalent 插件(
password_validation) - 用户是通过
GRANT ... IDENTIFIED BY语法创建的,而该语法在旧版本中绕过插件验证(建议统一用CREATE USER ... IDENTIFIED WITH mysql_native_password BY 'xxx')
真正生效的密码校验只发生在 MySQL 服务端接收 CREATE USER、ALTER USER、SET PASSWORD 等语句时,phpMyAdmin 不做额外拦截。如果你看到“密码太弱”的错误,那一定是 MySQL 返回的 ERROR 1819 (HY000),不是 phpMyAdmin 自己报的。



















