MySQL VALIDATE_PASSWORD_STRENGTH() 函数使用指南

MySQL VALIDATE_PASSWORD_STRENGTH() 是 MySQL 官方安全套件(在 MySQL 8.0 中作为 component_validate_password 组件,在 MySQL 5.7 中作为 validate_password 插件)提供的密码质量检测函数。

在用户注册、凭证重置以及 DBA 创建管理账户的业务流程中,将密码强度检测下沉到数据库层能够提供统一且无法绕过的安全防线。VALIDATE_PASSWORD_STRENGTH() 接收待测密码明文,依据当前数据库设置的策略规则进行综合打分,返回 0 到 100 之间的整数强度评分。

MySQL VALIDATE_PASSWORD_STRENGTH() 语法

这里是 MySQL VALIDATE_PASSWORD_STRENGTH() 函数的标准语法:

VALIDATE_PASSWORD_STRENGTH(password)

参数

password
必需的。拟评估强度的密码字符串(明文)。

返回值

返回一个 0 到 100 的整数:

  • 0:极弱密码(例如空字符串、纯单字符或严重违反最小长度策略)。
  • 25 - 50:低强度密码(仅包含单一字符集或未达到复杂度策略要求)。
  • 75 - 100:强密码(满足长度要求,并且融合了小写字母、大写字母、数字及特殊符号,且不匹配常见弱口令词典)。

[!NOTE] 该函数依赖 validate_password 模块。在 MySQL 8.0 中如未启用,需通过 INSTALL COMPONENT 'file://component_validate_password'; 开启。

MySQL VALIDATE_PASSWORD_STRENGTH() 示例

以下示例演示不同复杂度密码在标准策略下的实测评分对比。

测试弱密码、中等密码与强密码

执行不同模式密码的强度评估:

SELECT 
    VALIDATE_PASSWORD_STRENGTH('123456') AS weak_score,
    VALIDATE_PASSWORD_STRENGTH('admin@123') AS medium_score,
    VALIDATE_PASSWORD_STRENGTH('K9#mQ$8xL!2vW7@z') AS strong_score;

输出:

+------------+--------------+--------------+
| weak_score | medium_score | strong_score |
+------------+--------------+--------------+
|          0 |           50 |          100 |
+------------+--------------+--------------+

从测试结果可见:

  • '123456' 命中全网通用弱口令且长度过短,直接评为 0 分;
  • 'admin@123' 虽包含特殊字符但属于字典词组合,评分仅为 50 分;
  • 长度充足且高熵随机分布的 'K9#mQ$8xL!2vW7@z' 获得了满分 100 分。

查看与微调密码安全策略系统变量

在 MySQL 8.0 中,密码策略由若干前缀为 validate_password. 的全局变量决定:

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      |
+--------------------------------------+--------+

策略等级(policy)包含三种:

  • LOW:只校验长度(默认由 validate_password.length 控制,通常为 8)。
  • MEDIUM:在 LOW 基础上校验数字、大小写字母与特殊字符个数。
  • STRONG:在 MEDIUM 基础上引入词典文件过滤,禁止出现词典中的常用词汇。

结论

  • VALIDATE_PASSWORD_STRENGTH() 是保障企业数据安全合规(等保合规要求)的重要自动化评测工具。
  • 建议业务系统在前端输入提示时采用相同规则,并在服务端入库或 SET PASSWORD 前通过该函数做双重校验,杜绝任何弱密码账户进入生产系统。