版本说明
建议在MySQL 8.0以下使用,因为在MySQL 8.0版本中,validate_password插件被重新实现成validate_password组件,validate_password插件已被弃用,并会在未来的版本中被删除。
介绍
validate_password(密码验证)插件的作用是通过一组系统变量来限制用户密码的强度,并且可以自定义密码策略。
validate_password(密码验证)插件不需要额外下载,MySQL发行版的插件目录lib/plugin目录中会包含它。
插件选项
validate_password插件有以下选项
- validate-password 此选项控制validate_password插件在数据库启动时加载的方式,可选值有ON、OFF、FORCE和FORCE_PLUS_PERMANENT。
- ON 指定插件在数据库启动时加载。
- OFF 指定插件在数据库启动时不加载。
- FORCE 指定插件在数据库启动时加载。如果加载失败,则数据库也不会启动。
- FORCE_PLUS_PERMANENT 指定插件在数据库启动时加载。如果插件加载失败,则数据库不会启动。数据库和插件正常启动后,数据库不允许执行卸载它(UNINSTALL PLUGIN)。
此参数是配置在/etc/my.cnf中,主要是用于在数据库启动前配置。
插件参数
validate_password插件一共有以下参数
- validate_password_check_user_name 校验密码是否与当前会话的用户名一致。默认值为OFF,不对密码进行校验。
- validate_password_dictionary_file 指定校验密码使用的字典名。默认值为空,不校验密码字典。如果配置成相对路径,它会在服务器的数据目录中查找字典名。字典内容被数据库以utf8来读取,每行配置一个单词,
单词为小写,最大文件大小1MB。中划线部分我不认同,在我测试后发现单词大写,最大文件大小超过1MB,数据库也会正常识别。注意,如果密码字典有变动,则需要再更改一次参数值来动态读取密码字典。 - validate_password_length 校验密码的长度。默认值为8,最小值为0。
- validate_password_mixed_case_count 校验密码的大写和小写字符个数。默认值为1,最小值为0。例如设置为1,则密码最小必须包含1个大写字符和1个小写字符。
- validate_password_number_count 校验密码的数字个数。默认值为1,最小值为0。此参数的前提是validate_password_policy参数必须是MEDIUM或STRONG。
- validate_password_policy 校验密码的策略。默认值是MEDIUM。可选的值有数字0、1、2,也有字符LOW、MEDIUM、STRONG,它们是一一对应的。
- 0或者LOW 只能校验密码的长度是否符合要求。
- 1或者MEDIUM 不仅可以校验密码的长度是否符合要求,还能校验密码的数字个数、小写和大写字符个数和特殊字符个数是否符合要求。
- 2或者STRONG 除了可以校验密码的长度、数字、小写和大写字符个数和特殊字符个数是否符合要求,还可以设置使用密码字典进行校验。
- validate_password_special_char_count 校验密码的特殊字符个数。默认值为1,最小值为0。此参数的前提是validate_password_policy参数必须是MEDIUM或STRONG。
最后,我在了解完这些参数的概念后,又产生了个神奇的想法,测试这些数值参数的最大值域。经过我无聊至极的测试,得出validate_password_length、validate_password_mixed_case_count、validate_password_number_count和validate_password_special_char_count这四个参数的最大值是2147483647,超过此值会被截取成最大值,并抛出警告,在大于18446744073709551615时,就不再会是警告,而是直接报错参数类型不正确。
动态安装
动态安装指的是无需停止数据库,可直接进行安装并使用。
1、查看mysql插件目录路径
进入到mysql目录中
[root@localhost ~]# cd /usr/local/src/mysql
进入mysql命令行窗口
[root@localhost mysql]# bin/mysql -uroot -p
查看参数plugin_dir
mysql> show variables like 'plugin_dir';
2、检查mysql插件目录
从上面得到mysql插件目录是/usr/local/src/mysql/lib/plugin,因此,直接进入此目录,查看validate_password插件是否存在即可。
进入插件目录
[root@localhost mysql]# cd /usr/local/src/mysql/lib/plugin
查看validate_password.so文件是否存在
[root@localhost plugin]# ls validate_password.so
3、安装插件
进入mysql命令行窗口
[root@localhost mysql]# bin/mysql -uroot -p
安装插件
mysql> INSTALL PLUGIN validate_password SONAME 'validate_password.so';
INSTALL PLUGIN 加载插件并将其注册到mysql.plugin系统表中,以便后续每次数据库启动后加载插件。
动态卸载
1、查看已注册的插件
进入mysql命令行窗口
[root@localhost mysql]# bin/mysql -uroot -p
查看插件
mysql> select * from mysql.plugin;
2、卸载validate_password插件
卸载插件
mysql> UNINSTALL PLUGIN validate_password;
再次查看注册的插件
mysql> select * from mysql.plugin;
评论区