2024年2月19日发(作者:)
MySQL 8.0之密码相关插件
MySQL密码相关的插件有如下几种,简单了解一下。
1. 密码验证插件
validate_password是5.6引入密码验证插件,5.7缺省已安装,但未启用;到了8.0,该密码验证插件重新实施为validate_password组件,原插件已弃用且会在将来版本中删除。
(1) 启用插件
要使插件可用,插件库文件必须位于插件目录中,该目录由系统参数plugin_dir指定。
插件库文件
> show variables like 'plugin_dir';
+---------------+-------------------------------------------------------+
| Variable_name | Value |
+---------------+-------------------------------------------------------+
| plugin_dir | /data/mysql-8.0.22-linux-glibc2.12-x86_64/lib/plugin/ |
# cd /data/mysql-8.0.22-linux-glibc2.12-x86_64/lib/plugin/
# ls -l validate_
-rwxr-xr-x. 1 7161 31415 204679 Mar 4 2018 validate_
注:库文件名的后缀因系统的不同而不同(Linux为.so,Windows为.dll)。
注册插件
可见已预装了这一密码插件,但并未启用,还需单独注册。
――注册插件
若插件目录下已具有所需的库文件,则可在实例运行期间注册插件,如下:
> install plugin validate_password soname 'validate_'
――查看插件
> show plugins;
+----------------------------+----------+--------------------+-------------------+---------+
| Name | Status | Type | Library | License |
+----------------------------+----------+--------------------+-------------------+---------+
………………………………………………………………………………………………………………………
| validate_password | ACTIVE | VALIDATE PASSWORD | validate_ | GPL |
――卸载插件
若不再需要该插件,可通过如下命令卸载。
root@3306 (none)> uninstall plugin validate_password;
――配置插件
若要在实例启动时加载插件,可使用--plugin-load-add选项指定要加载的插件的库文件;为了防止实例运行期间删除插件,可指定validate-password=FORCE_PLUS_PERMANENT。
直接配置到文件中,如下:
[mysqld]
plugin-load-add=validate_
validate-password=FORCE_PLUS_PERMANENT
修改之后,重启实例以使配置生效。
(2) 密码策略
启用插件后,随之增加如下密码策略,目的是限制密码的复杂度,称之为:validate_password_policy。
――查看密码策略
> show variables like 'validate_password%';
+--------------------------------------+--------+
| Variable_name | Value |
+--------------------------------------+--------+
| validate_password_check_user_name | OFF |
| validate_password_dictionary_file | |
| validate_password_length | 8 |
| validate_password_mixed_case_count | 1 |
| validate_password_number_count | 1 |
| validate_password_policy | MEDIUM |
| validate_password_special_char_count | 1 |
+--------------------------------------+--------+
7 rows in set (0.01 sec)
说明:
validate_password_check_user_name
validate_password_length
――是否允许将用户名设置为密码,缺省为OFF
――密码的最小字符数,即密码最小长度
validate_password_mixed_case_count
validate_password_number_count
――密码中包含大小写字符的个数
――密码中包含数字的个数
――密码中包含的特殊字符个数
――用于检查密码的字典文件(包括路径)
――强制执行的密码验证策略,若修改的密码不符合当前策略,则报错不让修改。
validate_password_special_char_count
validate_password_dictionary_file
validate_password_policy
密码策略,有如下三种可选配置:
0 or LOW :仅执行密码长度检查
1 or MEDIUM :检查密码长度、数字、大小写、特殊字符
2 or STRONG :除了检查1,2项外,还检查字典文件,对于密码中任意连续4个或4个以上字符不得是字典中的单词。
注意:密码验证策略只适用于创建或修改用户时涉及的密码检测,对于已存在的用户没有影响,即不会改变其密码,也不影响其正常登陆。
(3) 转换密码组件
前面提到,MySQL 8.0以服务器组件的形式重新实施了密码验证,所以原插件已弃用;若继续使用,则会给出警告:“MY-001287 - 'validate password plugin' is deprecated and will be removed in a future
release. Please use validate_password component instead”,虽不是错误,但建议将当前正在使用该插件的MySQL转换为validate password组件。
转换过程将在卸载插件之前安装组件,以避免出现没有密码验证的时间窗口,此时服务器尝试使用组件验证,如果组件不可用则退回到插件。
――安装validate_password组件
> install component 'file://component_validate_password'; ――安装组件
> uninstall component 'file://component_validate_password'; ――卸载组件
> show variables like 'vali%';
+--------------------------------------+--------+
| Variable_name | Value |
+--------------------------------------+--------+
| validate__user_name | ON |
| validate_nary_file | |
| validate_ | 8 |
| validate__case_count | 1 |
| validate__count | 1 |
| validate_ | MEDIUM |
| validate_l_char_count | 1 |
说明:还是原来的几个参数,只不过形式发生了变化。
――调整参数配置
假如原来的配置是这样:
[mysqld]
plugin-load-add = validate_
validate-password = FORCE_PLUS_PERMANENT
validate_password_dictionary_file=/usr/share/dict/words
validate_password_length=10
validate_password_number_count=2
改为如下形式:
validate_nary_file=/usr/share/dict/words
validate_=10
validate__count=2
注:如在运行时引用了validate_password插件系统和状态变量的应用程序,需要进行类似调整;如果实例启动时使用--plugin-load或--plugin-load-add选项加载了插件,则需要注掉或删除。
――卸载validate_password插件
> uninstall plugin valiedate_password;
2. 身份验证插件
MySQL 8.0支持如下几种身份验证插件,简单了解下。
(1) 插件简介
mysql_native_password
本地身份验证的插件,基于本机密码哈希方法来实现身份验证。
注:4.1版之前,mysql_old_password插件基于较旧的密码哈希方法实现本机身份验证。
sha256_password
从5.6.6版开始内置的身份验证插件,使用SHA-256密码哈希执行身份验证,实现了密码的SHA-256散列,与本地身份验证相比,支持更为强大的用户密码加密方式。
“sha2”笼统来说,是指SHA-2类加密算法,其中256位加密是其中的一种,“sha256”是指插件用于加密的256位摘要长度。
caching_sha2_password
8.0版引入的一种新的身份认证插件,与sha256_password一样,实现了SHA-256身份验证,但更有优势:在服务器端使用缓存解决了连接时的延时问题,使重连的用户可以更快地重新认证,从而获取更好的性能;此外,还具有其它功能以提高适用性,比如:提供了对使用Unix套接字文件和共享内存协议的客户端连接的支持。
(2) 插件使用
――缺省的身份认证插件
> show variables like 'default_authentication_plugin%';
+-------------------------------+-----------------------+
| Variable_name | Value |
+-------------------------------+-----------------------+
| default_authentication_plugin | mysql_native_password |
――支持的认证插件
> show plugins;
+---------------------------------+----------+--------------------+---------+---------+
| Name | Status | Type | Library | License |
+---------------------------------+----------+--------------------+---------+---------+
| mysql_native_password | ACTIVE | AUTHENTICATION | NULL | GPL |
| sha256_password | ACTIVE | AUTHENTICATION | NULL | GPL |
| caching_sha2_password | ACTIVE | AUTHENTICATION | NULL | GPL |
说明:
― 缺省采用这一全新的验证插件,但依然支持原来的验证插件;
― 可通过参数default_authentication_plugin修改全局缺省的验证插件,暂不支持动态调整;
― 创建或修改用户时,可通过WITH子句指定认证插件,如:
> CREATE USER test00@'%' IDENTIFIED WITH sha256_password BY 'Sha256_PWD';
> CREATE USER test01@'%' IDENTIFIED WITH mysql_native_password BY 'Sha256_PWD ';
> ALTER USER test01@'%' IDENTIFIED WITH caching_sha2_password BY 'Sha256_PWD ';
(3) 总结说明
― MySQL 5.7支持sha256_password身份验证插件,但默认插件还是mysql_native_password
― MySQL 8.0支持这三种身份验证插件,默认的身份验证插件是caching_sha2_password
― caching_sha2_password功能上是sha256_password的超集,所以8.0中应使用新插件
― 为了使MySQL 5.7的客户端能够使用通过caching_sha2_password身份验证的账户连接到8.0或更高版本的服务器,5.7客户端库和客户端程序均支持caching_sha2_password客户端身份验证插件;尽管默认身份验证插件有所不同,但与8.0和更高版本的服务器相比,这提高了5.7客户端连接功能的兼容性。
发布者:admin,转转请注明出处:http://www.yc00.com/news/1708346930a1553732.html
评论列表(0条)