MySQL 5.6.6+ 使用弱密码

小柊 发表于 2017年05月31日 22时51分04秒

序、扯淡

不知不觉又是一个月过去了,突然想起来这个月貌似还没有给博客除过草,赶紧水一篇再说。

最近回到杭州实习了,但工作的地方和家隔得挺远,来去地铁一个小时,还要再算上大概45分钟的公交,下班吃完晚饭回到家也总要20点了,随便弄一下就要准备睡觉了,所以一直没有什么时间去搞别的,博客也就一直没更新。

 

一、背景

之所以会写这篇文章,主要是因为工作的需要。公司内网的几个测试用虚拟机root密码都是同一个,而MySQL的密码用的也是弱密码(说出来也无妨,就是toor),毕竟是在公司内部自己用的,所以并不会设置非常复杂的密码。

但之前的博客里也提到过(《MySQL 5.7以上 root用户默认密码问题》),MySQL 5.7以上默认要求强密码,不允许类似于“toor”这种弱密码,那该怎么办呢?

 

二、操作

其实这个问题应该是从MySQL 5.6.6就应该出现了,但笔者是从MySQL 5.7的时候才发现有这个问题,所以也并不确定。

为什么笔者要说应该是从MySQL 5.6.6就应该出现了呢,因为不允许用户设置弱密码的原因就是MySQL自带的“validate_password”插件,它从MySQL 5.6.6开始加入MySQL中,用于测试密码强度以及提高安全性[1]

validate_password插件会根据当前MySQL中的密码验证策略等级(validate_password_policy_number)测试用户设置的密码,它一共有“LOW”、“MEDIUM”和“STRONG”三种等级。

在MySQL控制台里,我们可以键入命令(必需设置过root密码,在默认密码状态下无法使用):

SHOW VARIABLES LIKE 'validate_password%';

 

查看当前密码验证策略等级。在MySQL的默认设置下,密码验证策略等级被设置为“MEDIUM”。

 

三种验证策略等级具体测试标准见下表[2]

Policy Tests Performed
0 or LOW Length
1 or MEDIUM Length; numeric, lowercase/uppercase, and special characters
2 or STRONG Length; numeric, lowercase/uppercase, and special characters; dictionary file

 

可以看到即便是在MEDIUM等级下,设置的密码也要求符合长度;数字、大小写字符和特殊字符。

所以要使用弱密码,首先要调整密码验证策略等级为LOW。

在MySQL控制台键入命令:

SET GLOBAL validate_password_policy='LOW';

 

上面的命令可以将密码验证策略等级修改为LOW,现在就可以给root用户设置一个相对较弱的密码了。

不过就算把密码验证策略等级修改为LOW之后,发现还是没有办法把MySQL的root账户密码设置为例如“toor”这样的一个4位纯小写英文弱密码,依旧会提示密码不符合强度要求:

 

其实原因可以在上图中看出来了:

密码验证策略等级为LOW时将仅进行密码长度验证,而在默认情况下,MySQL要求密码长度大于等于8位,可以看到上图中“validate_password_length”变量值为8。

所以我们还需要修改“validate_password_length”变量的值:

在MySQL控制台键入命令:

SET GLOBAL validate_password_length=4;

 

回车即可修改最低密码长度限制。在这里最低只能设置到4。如果把数值设置的过低,虽然不会报错,但MySQL会自动把值修改为4。

好了,现在就可以设置一个4位纯小写英文弱密码了。

 

 

附、参考资料

[1] “The validate_password plugin (available as of MySQL 5.6.6) serves to test passwords and improve security. ”——《6.5.3 The Password Validation Plugin

[2]“The validate_password_policy value can be specified using numeric values 0, 1, 2, or the corresponding symbolic values LOW, MEDIUM, STRONG. The following table describes the tests performed for each policy. For the length test, the required length is the value of the validate_password_length system variable. Similarly, the required values for the other tests are given by other validate_password_xxx variables.”——《6.5.3.2 Password Validation Plugin Options and Variables

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注