mysql之validate_password_policy

本文详细介绍MySQL中的密码策略validate_password_policy的使用方法,包括其不同级别的校验标准、配置参数及如何调整密码策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前面长篇大论,大刀阔斧,事无巨细地讲解了mysql在centos上的安装

但是呢,上一篇遗留一个问题,就是mysql修改密码时候遇到的一个问题:密码校验策略。

引用多篇文章的内容,自己梳理了一下,添加了一点自己的理解。老样子,请看大屏幕:

前言

validate_password插件是mysql5.6以后可以引入的一个新密码校验插件(网友说的,同时还说要用这个插件至少要求mysql5.6.6之后的版本,没啥重要的,就没去验证了),在mysql5.7之后会自动安装的(这个是真的,我装的5.7.21是这样的)。


validate_password_policy是随着validate_password插件诞生而诞生的,换句话说如果没有安装validate_password插件,就不用看下面的内容了。

从创建用户说起:如我们在mysql中可以用grant all on *.* to userd@'localhost' identified by '123'; 来创建一个userd用户,虽然用户是创建成功了,但是这个用户的密码强度太低了非常容易被破解;为了把问题解决在摇篮里,最好是在创建用户时就验证密码强度,如果强度达不到要求就不允许创建。为了达到这个目地validate_password插件应运而生,如果没有装过validate_password插件,可以如下安装(未测试过):

install plugin valaidte_password soname 'validate_password.so';

密码校验策略典型例子

第一次安装完mysql不管是用临时密码登入还是通过免密方式修改密码登入之后,如果没有马上修改密码,而有其他的对数据库的操作动作都会报错:

ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

这个时候如果直接修改密码:

alter user 'root'@'localhost' identified by '123456789';

就会触发mysql的安全校验问题了:

ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

validate_password_policy作用

判断修改密码时候新密码是否符合当前的策略,不满足报错,不让修改。

validate_password_policy类型

PolicyTests Performed
0 or LOWLength
1 or MEDIUMLength; numeric, lowercase/uppercase, and special characters
2 or STRONGLength; numeric, lowercase/uppercase, and special characters; dictionary file

用于控制validate_password行为系统参数:

  这些参数是要安装好validate_password 插件后才能通过show variables like 'validate_password%';看到。

  001、validate_password_policy 这个参数用于控制validate_password的验证策略 0-->low  1-->MEDIUM  2-->strong。

  002、validate_password_length密码长度的最小值(这个值最小要是4)。

  003、validate_password_number_count 密码中数字的最小个数。

  004、validate_password_mixed_case_count大小写的最小个数。

  005、validate_password_special_char_count 特殊字符的最小个数。

  006、validate_password_dictionary_file 字典文件

查看所有的validate_password相关的参数值


修改策略方式

set global validate_password_policy=0;

策略解释

0 or LOW

校验级别最低,只校验密码长度,只要长度跟validate_password_length一样即可,默认长度是8位。可以通过:

select @@validate_password_length;

来查询当前设置的密码长度。

validate_password_length最小值是4位,组成如下:

validate_password_number_count
+ validate_password_special_char_count
+ (2 * validate_password_mixed_case_count)

其中,validate_password_number_count指定了密码中数据的长度,validate_password_special_char_count指定了密码中特殊字符的长度,validate_password_mixed_case_count指定了密码中大小字母的长度。这些参数,默认值均为1,所以validate_password_length最小值为4,如果你显性指定validate_password_length的值小于4,尽管不会报错,但validate_password_length的值将设为4。

直接设置validate_password_length

set global validate_password_length=7

间接设置validate_password_length

validate_password_number_count,validate_password_special_char_count,validate_password_mixed_case_count中任何一个值被修改了,则validate_password_length将进行动态修改。

修改方式

以validate_password_mixed_case_count为例子,另外几个一样的修改方式:

set global validate_password_mixed_case_count=2
注意

动态修改,不一定会直接影响到validate_password_length的长度,如果validate_password_length已经是最小值时才会被动态修改掉,否则不会。

1 or MEDIUM

这个时候首先要满足的是validate_password_policy=0时的验证要求。然后现去验证密码中的数字个数,大小写个数,特殊字符个数。这些又分别由validate_password_number_count,validate_password_mixed_case_count,validate_password_special_char_count 这几个参数来控制。

2 or STRONG

这个时候必须先满足0,1的要求,然后它还追加了一个,对于密码中任意连续4个(或4个让上)字符不得是字典中的单词(validate_password_dictionary_file)

注意

validate_password_number_count,validate_password_special_char_count,validate_password_mixed_case_count三个的改动只会直接修改掉已经处在最小值的valide_password_length的值。

<think>嗯,用户问的是MySQLvalidate_password_policy,我需要先回忆一下相关的知识。我记得这个插件是用来加强密码安全的,可能涉及到密码策略的配置。首先得确认这个插件是validate_password,可能之前叫做validate_password_policy,后来版本有变化吗? 接下来,我需要解释validate_password_policy的作用,它是控制密码复杂度的策略。不同的策略等级对应不同的要求,比如低中高。可能需要具体说明每个等级的要求,比如低等级要求密码长度,中等级需要包含数字、大小写字母和特殊字符,高等级可能更严格。 然后,用户可能需要知道如何查看当前的策略设置,比如用SHOW VARIABLES命令,或者查询mysql系统数据库中的插件状态。这部分需要详细说明,确保用户能实际操作。 还有,如何修改这个策略呢?可以通过SET GLOBAL命令临时设置,或者修改配置文件永久生效。需要提到不同的策略值,比如0、1、2,或者对应的LOW, MEDIUM, STRONG,这可能根据MySQL版本不同有所变化,得提醒用户注意版本差异。 另外,相关的其他变量,比如密码长度validate_password_length,是否需要包含数字、大小写字母、特殊字符等变量,这些和validate_password_policy一起工作,用户可能需要了解它们之间的关系,以及如何调整这些参数来满足具体需求。 还要注意,安装validate_password插件的方法,因为有时候可能默认没有启用。可能需要用INSTALL PLUGIN或者修改配置文件来加载插件。 最后,应该给出一个示例,比如设置策略为MEDIUM,然后创建用户时密码不符合要求的错误提示,这样用户能直观看到效果。同时提醒用户在生产环境中合理设置策略,平衡安全性和可用性。 需要检查是否有遗漏的点,比如不同MySQL版本的区别,比如在5.7和8.0中的变化,变量名是否有调整。确保回答准确,避免误导用户。同时使用中文,结构清晰,分步骤说明,让用户能一步步理解和操作。</think>MySQL 中的 `validate_password_policy` 是密码验证插件 `validate_password` 提供的一个核心参数,用于控制用户密码的复杂度策略。以下是逐步说明: --- ### 1. **作用** `validate_password_policy` **定义密码强度检查的等级**,通过不同策略强制用户设置符合安全标准的密码,防止弱密码漏洞。 --- ### 2. **支持的策略等级** 不同 MySQL 版本可能略有差异,常见策略如下: | 策略值 | 说明 | |--------------|----------------------------------------------------------------------| | **0 (LOW)** | 仅检查密码长度(默认最小 8 字符) | | **1 (MEDIUM)** | 检查长度 + 需包含数字、大小写字母、特殊字符(默认策略) | | **2 (STRONG)** | 在 MEDIUM 基础上,增加字典文件检查(需手动配置字典) | --- ### 3. **查看当前策略** ```sql -- 查看所有密码策略相关参数 SHOW VARIABLES LIKE 'validate_password%'; -- 直接查看策略等级 SELECT @@validate_password_policy; ``` 输出示例: ``` +----------------------------+ | @@validate_password_policy | +----------------------------+ | MEDIUM | +----------------------------+ ``` --- ### 4. **修改策略** #### 临时生效(重启失效): ```sql SET GLOBAL validate_password_policy = 1; -- 0: LOW, 1: MEDIUM, 2: STRONG ``` #### 永久生效: 修改 MySQL 配置文件(如 `my.cnf` 或 `my.ini`): ```ini [mysqld] validate_password_policy=1 ``` 重启 MySQL 服务使配置生效。 --- ### 5. **相关参数** 策略依赖以下参数协同工作: - **`validate_password_length`**: 密码最小长度(默认 8) - **`validate_password_number_count`**: 至少包含的数字数量 - **`validate_password_mixed_case_count`**: 至少包含的大小写字母数量 - **`validate_password_special_char_count`**: 至少包含的特殊字符数量 --- ### 6. **插件启用** 若未启用插件,需先安装: ```sql INSTALL PLUGIN validate_password SONAME 'validate_password.so'; -- Linux INSTALL PLUGIN validate_password SONAME 'validate_password.dll'; -- Windows ``` --- ### 7. **示例** 设置策略为 `MEDIUM` 后,尝试创建弱密码会报错: ```sql CREATE USER 'test'@'localhost' IDENTIFIED BY 'abc123'; -- 错误:密码不符合策略(缺少大写字母和特殊字符) ``` --- ### 8. **注意事项** - **版本差异**:MySQL 5.7+ 默认集成此插件,早期版本需手动安装。 - **灵活性**:可通过调整附属参数(如 `validate_password_length`)自定义规则。 - **生产建议**:建议至少使用 `MEDIUM` 策略以符合安全规范。 通过合理配置 `validate_password_policy`,可显著提升数据库账户的安全性。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

独行侠_阿涛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值