MySQL 8.0 新密码策略的细节补充
前情提要
MySQL 8.0 截⽌到⽬前已经发布到了 8.0.34 版本,经过一系列的版本更新,对于密码方面也做了较多的加强⼯作,这⾥我们不再过多介绍 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
对于次数的控制。- 两者并不是同时⽣效,两个参数同时配置时,取的是更严格的那个配置作为⽣效的策略。
- 策略本质上对使⽤和功能上没影响。
更多技术文章,请访问:https://opensource.actionsky.com/
关于 SQLE
爱可生开源社区的 SQLE 是一款面向数据库使用者和管理者,支持多场景审核,支持标准化上线流程,原生支持 MySQL 审核且数据库类型可扩展的 SQL 审核工具。
SQLE 获取

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
VMware Explore | 联想与VMware扩大合作带来生成式AI和多云解决方案
带有VMware Cloud的全新联想ThinkSystem生成式AI解决方案,采用NVIDIA加速计算和软件,提供专为实现下一代AI工作负载而打造的GPU密集型平台。 联合创新实验室为商业中端市场和企业提供即用型混合多云解决方案。 全新Lenovo TruScale Hybrid Cloud with VMware将实现按需智能云转型。 近日,联想(HKSE:992)(ADR:LNVGY)和VMware(NYSE:VMW)在VMware Explore 2023上宣布推出其联合边缘与云创新实验室的首批一站式解决方案,为中型企业提供现代化混合多云功能,帮助客户更加轻松地利用数据实现智能转型。 联想还发布了与VMware合作开发的最新生成式AI参考设计(Reference Design for Generative AI)。这款全集成式联想ThinkSystem解决方案采用NVIDIA加速计算和软件,专为帮助企业部署AI而打造,可提供市场上最通用的加速计算平台之一。这些解决方案是联想与VMware新近扩大合作的一环,双方致力于通过新的集成式边缘-云解决方案,简化下一代AI和数据智能的部署...
- 下一篇
快速成长的秘诀|学会自我培养和培养他人
快速成长总共三篇,分别是《完成自我认知升级》、《自我成长好方法》和《自我培养和培养他人》。本篇是第三篇,篇幅较长。针对长文的阅读方式,依旧建议在《完成自我认知升级》中提到的阅读方式:“在一个不被打扰的时间做好只字不差阅读,用批判性思维思考和理解其中的逻辑,内化成自己的逻辑。” 成长快与慢,每个人都会关心,每个人都在等待,与其等着被人培养不如学会自我培养,与其放养不如掌握培养人的方法。组织需要面对人才培养、主管需要面对人才培养,员工同样需要面对自我培养,对人才培养的诉求从未变过,但是很少被满足过。接触过一些关于人才培养的课程和文章,都非常优秀,但培养结束后效果不明显,本质的原因是东西是好东西,但是在执行过程中缺乏跟进,辅导和反馈,也就是说在执行层面出现了断层,理论和实践无法结合,或者理论未围绕实战进行。 究根问底,最核心的原因是人才培养是一项意志力 * 连续性的活动,没有意志力培养不出人来,没有连续性看不到培养结果,即便有意志力,有连续性,有时候还跟方法,跟受众性格、受众需求等因素相关。总之人才培养非常复杂,难以见效,正因为难以见效,人才培养可能变成了培训,变成了分享,变成了谈话等方式,...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- 设置Eclipse缩进为4个空格,增强代码规范
- CentOS关闭SELinux安全模块
- Hadoop3单机部署,实现最简伪集群
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS7设置SWAP分区,小内存服务器的救世主
- SpringBoot2全家桶,快速入门学习开发网站教程