- 剑指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=1739669073-hEje0UzciwqmQZJpcRg4HrwBkupVlO7S-0-5366fec8bce20c3493173efde85d7beb)
但是,在MySQL 8.0中执行上述语句会报错,如下所示。这是因为MySQL 8.0的密码安全策略与之前版本的密码安全策略有些许差别。
![](https://epubservercos.yuewen.com/3ACC63/31457377104917306/epubprivate/OEBPS/Images/txt001_58.jpg?sign=1739669073-HcVmww4Ux3LiyV3VUlkLNzLjYe6ZOauO-0-a3d008a433bae91f62ba2beccf0093f4)
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=1739669073-4TdOK18FPPqGkX788b70KVPcub0Uoiqb-0-3417f06092e0e0d010b7009aefd0d8ea)
下面解释一下validate_password组件对应的系统变量,如表1-1所示。
表1-1 validate_password组件对应的系统变量
![](https://epubservercos.yuewen.com/3ACC63/31457377104917306/epubprivate/OEBPS/Images/txt001_60.jpg?sign=1739669073-fFupUIqMSG2J5KEwQe9v5IzrZtG6TMh3-0-9c73bd3a3485be07905cf0d13f4b35d0)
这些系统变量在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=1739669073-kwvAjIgbmAcTZ1dOzKeVB5y38Owtd3bh-0-bc820441dff9be17c1a9e587ae7926b6)
或者使用如下SQL语句修改密码安全策略强度。
![](https://epubservercos.yuewen.com/3ACC63/31457377104917306/epubprivate/OEBPS/Images/txt001_62.jpg?sign=1739669073-tuDuksZuOb1WjbUK94oNuu65gBz5ZEne-0-aba18964da73d7337d4b740a850747b4)
在MySQL 5.7中,修改密码安全策略强度的SQL语句如下所示,区别在于将半角句号“.”修改为下画线“_”。
![](https://epubservercos.yuewen.com/3ACC63/31457377104917306/epubprivate/OEBPS/Images/txt001_63.jpg?sign=1739669073-CMIoRTzcP4qF0rNRZN4Y0x3a5luS4loI-0-39162114406c82519b0fafc9c1540ca1)
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=1739669073-nnlrKMQWhiCnJAcFuyqwDeSdGnESI4yp-0-71a246dc5a6817f23a366dbcedde5d06)
又如,当密码为“K354*45jKd5”时,评分为100分,如下所示,表示密码复杂度很高。
![](https://epubservercos.yuewen.com/3ACC63/31457377104917306/epubprivate/OEBPS/Images/txt001_65.jpg?sign=1739669073-d7S3v73rDkRw0CIU8wjmkqrJcmqtLAhX-0-6cb88c5246b167ee7b1d35fe58749df6)
如果没有安装validate_password组件,那么VALIDATE_PASSWORD_STRENGTH()函数永远返回0。密码复杂度对应的评分如表1-2所示。
表1-2 密码复杂度对应的评分
![](https://epubservercos.yuewen.com/3ACC63/31457377104917306/epubprivate/OEBPS/Images/txt001_66.jpg?sign=1739669073-NbPiYJzcAmgk8J7hmMPMv8J6fRwsComC-0-e2ac78da0448e247b963ef01c77d0a80)