mysql之validate_password_policy的使用

 更新时间:2023年05月30日 09:56:55   作者:独行侠_阿涛  
这篇文章主要介绍了mysql之validate_password_policy的使用,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

前面长篇大论,大刀阔斧,事无巨细地讲解了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的值。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Navicat中新建MySQL数据库与新建、修改、删除数据表及删除数据库详细操作方法

    Navicat中新建MySQL数据库与新建、修改、删除数据表及删除数据库详细操作方法

    Navicat是一套快速、可靠并价格相当便宜的数据库管理工具,专为简化数据库的管理及降低系统管理成本而设,这篇文章主要给大家介绍了关于Navicat中新建MySQL数据库与新建、修改、删除数据表及删除数据库详细操作的相关资料,需要的朋友可以参考下
    2023-11-11
  • 解决数据库有数据但查询出来的值为Null问题

    解决数据库有数据但查询出来的值为Null问题

    这篇文章主要介绍了解决数据库有数据但查询出来的值为Null问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-10-10
  • MySQ实现XA事务的具体使用

    MySQ实现XA事务的具体使用

    XA事务是一种分布式事务处理协议,本文主要介绍了MySQ实现XA事务的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-07-07
  • mysql中字段类型转义方式

    mysql中字段类型转义方式

    这篇文章主要介绍了mysql中字段类型转义方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • Mysql数据库双机热备难点分析

    Mysql数据库双机热备难点分析

    本文主要给大家介绍了在Mysql数据库双机热备其中的难点分析以及重要环节的经验心得,需要的朋友收藏分享下吧。
    2017-12-12
  • MySQL日期时间函数知识汇总

    MySQL日期时间函数知识汇总

    这篇文章主要介绍了MySQL日期时间函数知识汇总,这不同数据库之间基本相同,只会有个别函数的差异。下文详细介绍,需要的小伙伴可以参考一下
    2022-03-03
  • MySQL多个表的关联字段实现同步更新的解决方案

    MySQL多个表的关联字段实现同步更新的解决方案

    在对数据库表结构进行设计时,为了提高查询效率,会进行一些反规范化设计,如:设计一些冗余字段,但这样可能会存在数据同步问题,故本文给大家介绍了MySQL多个表的关联字段实现同步更新的解决方案,需要的朋友可以参考下
    2024-11-11
  • MySql常用操作SQL语句汇总

    MySql常用操作SQL语句汇总

    这篇文章主要介绍了MySql常用操作SQL语句汇总,本文讲解了增加、删除、查询、修改等常用SQL语句实例,需要的朋友可以参考下
    2015-03-03
  • MySQL中数据导入恢复的简单教程

    MySQL中数据导入恢复的简单教程

    这篇文章主要介绍了MySQL中数据导入恢复的简单教程,主要用到了LOAD DATA语句,需要的朋友可以参考下
    2015-05-05
  • MySQL数据查看SELECT条件大于 小于(小白入门篇)

    MySQL数据查看SELECT条件大于 小于(小白入门篇)

    这篇文章主要为大家介绍了MySQL数据查看SELECT条件大于和小于的语句学习,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05

最新评论