前情提要
MySQL 8.0 截⽌到⽬前曾经公布到了 8.0.34 版本,通过一系列的版本更新,对于明码方面也做了较多的增强⼯作,这⾥咱们不再过多介绍 MySQL 8.0 对于明码性能的增强,相干的介绍能够移步先前公众号的⽂章。
新个性解读 | MySQL 8.0 新密码策略(上)
新个性解读 | MySQL 8.0 新密码策略(中)
新个性解读 | MySQL 8.0 新密码策略(下)
新个性解读 | MySQL 8.0 新密码策略(终篇)
文章背景
这篇文章次要针对明码相干的几个参数的应用细节做一些验证和剖析,给大家分享下理论应用的教训,首先咱们看下 MySQL 8.0 版本的 CREATE USER
语法中 password_option
局部的语法结构。
-- MySQL 8.0(新增了不同维度的明码管制)
password_option: {
PASSWORD EXPIRE [DEFAULT | NEVER | INTERVAL N DAY]
| PASSWORD HISTORY {DEFAULT | N}
| PASSWORD REUSE INTERVAL {DEFAULT | N DAY}
| PASSWORD REQUIRE CURRENT [DEFAULT | OPTIONAL]
| FAILED_LOGIN_ATTEMPTS N
| PASSWORD_LOCK_TIME {N | UNBOUNDED}
}
-- MySQL 5.7(只蕴含明码过期属性配置)
password_option: {
PASSWORD EXPIRE
| PASSWORD EXPIRE DEFAULT
| PASSWORD EXPIRE NEVER
| PASSWORD EXPIRE INTERVAL N DAY
}
其中 MySQL 8.0 版本 CREATE USER
语法的前 4 个明码属性则是本⽂第⼀个探讨的细节点,其属性对应的 MySQL 全局参数及含意别离为:
参数名 | 默认值 | mysql.user 表对应字段 | 含意 |
---|---|---|---|
default_password_lifetime | 0 | password_lifetime | 全局设置明码的有效期 |
password_history | 0 | password_reuse_history | 全局设置历史明码应用过的明码不可被重用的条数 |
password_reuse_interval | 0 | password_reuse_time | 全局设置历史明码要通过多长时间能力被重用 |
password_require_current | OFF | password_require_current | 全局设置批改明码时需不需要提供以后明码 |
误区 1
表 mysql.user
中明码相干选项对应字段为 NULL 时的含意。
验证过程
咱们基于这 4 个明码属性设置具体的值,设置后配置如下图所示。
创立⼀个新⽤户不指定任何⽤户明码属性。
在创立完⽤户后,查看 mysql.user
表中对应字段显示值均为 NULL。
全局配置的 4个属性没失效?
如果⽣效应该要主动在创立⽤户时配置为对应值才对。基于这个逻辑去了解还造成了另⼀层误会:新配置的明码全局属性对于历史已创立的⽤户不⽣效。
是不是还须要对已存在的⽤户⽤ ALTER USER
独自做解决?
随着这个疑难越想越不对,如果全局配置在新创建用户时还不失效,那什么时候失效,岂不是失去了意义?进一步查看官⽅⽂档 对 mysql.user
表对应字段值含意的形容后失去了答案。 原⽂形容如下,翻译过去就是:如果这 4 个值在表中为 NULL,并不是配置未失效,而是示意其继承全局明码策略配置。
小结
官网文档看的不够认真,误会了 NULL 值的含意(要害起因),但的确容易踩到这个“坑”。这里也贴一下全局参数和单⽤户属性配置的失效对应表做参考。
误区 2
这里尽管形容为误区,其实我了解是文档形容的不欠缺。咱们先看下文档的形容,翻译过去是:能够⽤这 2 个参数来管制历史明码可被重用的策略:一个是基于次数策略,一个是基于工夫策略。能够同时配置,如:禁止用最初 6 次明码或者 365 天内设置过的明码,能够看到两个参数是一个或者的逻辑。
理论验证场景
场景 1
password_history > 0 and password_reuse_interval = 0
论断:历史明码次数 控制策略失效,合乎预期。
场景 2
password_history = 0 and password_reuse_interval > 0
论断:历史明码工夫 控制策略失效,合乎预期。
场景 3
password_history > 0 and password_reuse_interval > 0
论断:历史明码工夫 控制策略失效,历史明码次数 控制策略不失效,mysql.password_history 将记录指定工夫内的所有明码且均不能被重用。
小结
-
password_reuse_interval
对于工夫的控制策略优先级⾼于password_history
对于次数的管制。- 两者并不是同时⽣效,两个参数同时配置时,取的是更严格的那个配置作为⽣效的策略。
- 策略实质上对使⽤和性能上没影响。