
1.5 MySQL 8.0的密码强度评估
1.5.1 MySQL不同版本的密码设置
出于安全考虑,用户需要隔一段时间修改一次数据库密码。如果用户使用的是MySQL 8.0以前的版本,那么可以直接执行如下SQL语句修改数据库密码。

但是,在MySQL 8.0中执行上述语句会报错,如下所示。这是因为MySQL 8.0的密码安全策略与之前版本的密码安全策略有些许差别。

1.5.2 MySQL 8.0的密码安全策略
MySQL 8.0以前版本采用的是validate_password插件检测、验证账号密码强度的形式来保障账号的安全性,而MySQL 8.0采用的是组件形式来保障账号的安全性。
1.validate_password组件说明
MySQL 8.0引入了服务器组件(Components)这个特性,validate_password插件已被服务器采用组件的形式重新实现。在MySQL 8.0.25中,默认自动安装validate_password组件。
在MySQL 8.0中使用如下SQL语句查看组件。

下面解释一下validate_password组件对应的系统变量,如表1-1所示。
表1-1 validate_password组件对应的系统变量

这些系统变量在MySQL 5.7和MySQL 8.0中的默认值可能有所不同。例如,在MySQL 5.7中,validate_password.check_user_name变量的默认值为OFF。
2.修改密码安全策略强度
表1-1中的系统变量validate_password.policy用于设置密码安全策略强度。有3种密码安全策略强度可供使用,分别是LOW(低等级)、MEDIUM(中等级)和STRONG(强等级)。在MySQL 8.0中,修改密码安全策略强度的SQL语句如下所示。

或者使用如下SQL语句修改密码安全策略强度。

在MySQL 5.7中,修改密码安全策略强度的SQL语句如下所示,区别在于将半角句号“.”修改为下画线“_”。

3.密码复杂度测试
我们在修改密码的时候,曾遇到“Your password does not satisfy the current policy requirements”这样的问题,这是因为密码复杂度不够,加大密码复杂度即可。
在设置密码前,可以通过函数组件来测试密码复杂度是否满足条件,评分在0~100分之间,评分越高,表示密码复杂度越高。当评分为100分时,说明使用了“大写字母+小写字母+特殊字符+数字”的8位以上密码。
例如,当密码为“medium”时,评分为25分,如下所示,表示密码复杂度很低。

又如,当密码为“K354*45jKd5”时,评分为100分,如下所示,表示密码复杂度很高。

如果没有安装validate_password组件,那么VALIDATE_PASSWORD_STRENGTH()函数永远返回0。密码复杂度对应的评分如表1-2所示。
表1-2 密码复杂度对应的评分
