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';
posted @ 2025-10-24 11:10  哈喽哈喽111111  阅读(4)  评论(0)    收藏  举报