- 剑指MySQL:架构、调优与运维
- 尚硅谷教育编著
- 792字
- 2024-12-31 18:29:10
1.5 MySQL 8.0的密码强度评估
1.5.1 MySQL不同版本的密码设置
出于安全考虑,用户需要隔一段时间修改一次数据库密码。如果用户使用的是MySQL 8.0以前的版本,那么可以直接执行如下SQL语句修改数据库密码。
![](https://epubservercos.yuewen.com/3ACC63/31457377104917306/epubprivate/OEBPS/Images/txt001_57.jpg?sign=1739157030-5ImI4bJXpA4f74cSRWv0P44Wvwp2GYcY-0-d31bcfb00a49025e47ba91e4ffd3de32)
但是,在MySQL 8.0中执行上述语句会报错,如下所示。这是因为MySQL 8.0的密码安全策略与之前版本的密码安全策略有些许差别。
![](https://epubservercos.yuewen.com/3ACC63/31457377104917306/epubprivate/OEBPS/Images/txt001_58.jpg?sign=1739157030-InZeDVl73kl9vTC7qSelclwC3BSpDHSN-0-b6ecde78092c7a2343db649a1ec522a3)
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语句查看组件。
![](https://epubservercos.yuewen.com/3ACC63/31457377104917306/epubprivate/OEBPS/Images/txt001_59.jpg?sign=1739157030-GrXlZGia2zVj2s8hAudtw43keBSmGbZY-0-98ccfba85a103e87f615e66413534bb6)
下面解释一下validate_password组件对应的系统变量,如表1-1所示。
表1-1 validate_password组件对应的系统变量
![](https://epubservercos.yuewen.com/3ACC63/31457377104917306/epubprivate/OEBPS/Images/txt001_60.jpg?sign=1739157030-htfZhSyF0h5BbLqYfUpOabvdRAGwhp9M-0-14a081132697083542aab5d1cf550d73)
这些系统变量在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语句如下所示。
![](https://epubservercos.yuewen.com/3ACC63/31457377104917306/epubprivate/OEBPS/Images/txt001_61.jpg?sign=1739157030-Qc2DdwnXWPsks6nkMSe2RjxQDMx4cyk1-0-8e8068ca53db7b5803c0e5cbb313a0b5)
或者使用如下SQL语句修改密码安全策略强度。
![](https://epubservercos.yuewen.com/3ACC63/31457377104917306/epubprivate/OEBPS/Images/txt001_62.jpg?sign=1739157030-kdw3zHLtN7TK8s9olmhZNcF1OYbY3dy7-0-15bfec58c5e7b5da1edcafcbe323b496)
在MySQL 5.7中,修改密码安全策略强度的SQL语句如下所示,区别在于将半角句号“.”修改为下画线“_”。
![](https://epubservercos.yuewen.com/3ACC63/31457377104917306/epubprivate/OEBPS/Images/txt001_63.jpg?sign=1739157030-k1IwUEIlZdjEbQqARyN5qOr8EHJO2PQG-0-dd5ca2f14303752fca3cc76a691baab5)
3.密码复杂度测试
我们在修改密码的时候,曾遇到“Your password does not satisfy the current policy requirements”这样的问题,这是因为密码复杂度不够,加大密码复杂度即可。
在设置密码前,可以通过函数组件来测试密码复杂度是否满足条件,评分在0~100分之间,评分越高,表示密码复杂度越高。当评分为100分时,说明使用了“大写字母+小写字母+特殊字符+数字”的8位以上密码。
例如,当密码为“medium”时,评分为25分,如下所示,表示密码复杂度很低。
![](https://epubservercos.yuewen.com/3ACC63/31457377104917306/epubprivate/OEBPS/Images/txt001_64.jpg?sign=1739157030-H6Ig8k5ztCT0rsaMxVwngOKXmXXKiXNa-0-38e33aa3899b5fc46a4d9f46b2ba30fe)
又如,当密码为“K354*45jKd5”时,评分为100分,如下所示,表示密码复杂度很高。
![](https://epubservercos.yuewen.com/3ACC63/31457377104917306/epubprivate/OEBPS/Images/txt001_65.jpg?sign=1739157030-jhUrykIAKsDze5FMuFnsR3JzXFVrjGiT-0-abb851a3b176b8605f24856848328409)
如果没有安装validate_password组件,那么VALIDATE_PASSWORD_STRENGTH()函数永远返回0。密码复杂度对应的评分如表1-2所示。
表1-2 密码复杂度对应的评分
![](https://epubservercos.yuewen.com/3ACC63/31457377104917306/epubprivate/OEBPS/Images/txt001_66.jpg?sign=1739157030-V3xskq7qGe7t2faVXQse9okdWwyXOjvB-0-f7c393b639b792fe6dec25369e8289e7)