MySQL 8 密码策略组件方式
一、问题描述
创建用户时提示密码不满足当前的策略定义,错误代码是ERROR 1819 (HY000)。
Your password does not satisfy the current policy requirements
二、解决方法
1、首先查看当前的密码策略:
-- 客户端登入(Linux 命令行)
-- mysql -uroot -p'root1234'
-- 查看当前用户的密码策略
SHOW VARIABLES LIKE 'validate_password%';
mysql> SHOW VARIABLES LIKE 'validate_password%';
+-------------------------------------------------+--------+
| Variable_name | Value |
+-------------------------------------------------+--------+
| validate_password.changed_characters_percentage | 0 |
| validate_password.check_user_name | ON |
| 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 |
+-------------------------------------------------+--------+
8 rows in set (0.01 sec)
由如上结果可见当前的密码策略级别是中级(MEDIUM),其中要求
- 密码长度至少是8
- 大小写混合且大写至少有1个
- 密码中阿拉伯数字的最少有1个
- 密码中特殊字符最少有1个
解决方法有两种:一种按密码策略修改密码为复杂型,另一种是将密码策略级别修改成低。
修改成复杂密码不再赘述
降低密码策略等级
修改密码策略,将其等级修改为低。
-- 修改用户密码策略等级为低
mysql> set global validate_password.policy=LOW;
mysql> SHOW VARIABLES LIKE 'validate_password%';
此时仅对密码的长度变量(默认是8)进行验证。
如果想修改默认密码的长度(如改成6),可以修改validate_password.length变量。即:
-- 设置密码最低长度,这里是6
mysql> set global validate_password.length=6;
注:密码默认长度最少是4。
2、密码等级
2.1 低LOW
概述:仅验证密码长度,对是否是字母、阿拉伯数字无要求。可以全是数字或者字母。
密码总长度最低是4
-- 设置密码策略等级为0 即低等级
mysql> set global validate_password.policy=0; -- 即对应low
mysql> SHOW VARIABLES LIKE 'validate_password%';
-- 创建用户时指定密码
mysql> create user 'mysqlbak'@'192.168.111.128' identified by '1234';
2.2 中等MEDIUM
概述:
该等级下的用户密码策略要求:
- 密码总长度至少是4(可修改成大于4的其它数)
- 大小写混合且大写至少有1个
- 密码中阿拉伯数字的最少有1个
- 密码中特殊字符最少有1个
验证案例
-- 设置密码策略等级为1即中等级别
mysql> set global validate_password.policy=1; -- 即对应MEDIUM
mysql> set global validate_password.length=3;
mysql> SHOW VARIABLES LIKE 'validate_password%';
-- 在密码等级为中等时创建用户并指定密码
mysql> create user 'mysqlbak'@'192.168.111.128' identified by 'rT@1';
字典过滤STRONG
概述:除了满足中等级别的要求,仍需要满足自定义字典里的弱口令,如果匹配上则提示不满足密码策略。
比如自定义文件里定义了 "root",则用户命令里含"root"的密码则不会通过。
注:
1 当前验证密码策略组件字典过滤失效,插件支持
2 自定义文件里的字符串不区分大小写、最小是4
三、密码策略等级
密码策略mysql 8里支持以组件方式使用而不再是插件(后续版本会淘汰插件)方式。
确认当前数据库是否启用组件的方法是,可通过如下命令查询:
-- 查看mysql组件信息
SELECT * FROM mysql.component;
mysql> SELECT * FROM mysql.component;
+--------------+--------------------+------------------------------------+
| component_id | component_group_id | component_urn |
+--------------+--------------------+------------------------------------+
| 1 | 1 | file://component_validate_password |
+--------------+--------------------+------------------------------------+
1 row in set (0.00 sec)
如果上述结果集为空,可以通过如下命令来安装:
-- 安装密码策略组件密码
INSTALL COMPONENT 'file://component_validate_password';
-- 卸载密码策略组件密码
-- UNINSTALL COMPONENT 'file://component_validate_password';
-- 查看密码策略组件使用状态
SHOW STATUS LIKE 'validate_password%';
插件方式
密码策略是否加载插件,通过SQL检索时不应为空(笔者环境仅安装了组件而未安装插件)。:
-- 查看是否安装当前密码策略插件
SELECT PLUGIN_NAME, PLUGIN_LIBRARY, PLUGIN_STATUS, LOAD_OPTION
FROM INFORMATION_SCHEMA.PLUGINS
WHERE PLUGIN_NAME LIKE '%validate%';
如果想安装插件,可以执行如下命令:
-- 安装密码策略插件
INSTALL PLUGIN validate_password SONAME 'validate_password.so';

浙公网安备 33010602011771号