MySQL 8.0 新密码策略的细节补充

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 密码时间 控制策略生效,历史密码次数 控制策略不生效,mysql.password_history 将记录指定时间内的所有密码且均不能被重用。

前情提要
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 值的含义(关键原因),但确实容易踩到这个 “坑”。这里也贴一下全局参数和单⽤户属性配置的生效对应表做参考。

建议使用 PC 端查看

误区 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 审核工具。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
存储 数据中心
什么是T3机房?T1/T2/T3/T4机房等级对比详解
我们在购买IDC服务时都会选择T3机房或者T4机房,那么什么是T3机房?T3机房和T4机房有什么区别?服务器百科网来说说T1/T2/T3/T4机房等级对比详解: IDC机房等级划分 IDC机房的等级划分是根据《数据中心电信基础设施标准》而定的,它是美国国家标准学会(ANSI)颁布的,它将IDC数据中心(大型的设备和管理都比较完善的机房可以称为数据中心)基础设施的可用性定义了四种不同等级,即Tier 1、Tier 2、Tier 3和Tier 4四个等级。
19017 0
|
人工智能 语音技术
技术沙龙|3D-Speaker说话人识别多模型解析
技术沙龙|3D-Speaker说话人识别多模型解析
612 0
|
3月前
|
人工智能 自然语言处理 安全
大模型备案要点一次过【附材料清单详解】
广东省最新公布一批大模型备案名单,新增14款备案模型、6款登记模型,累计达80款备案、23款登记。文章详解大模型备案流程、周期(5-10个月)、要求(主体资质、数据合规、内容安全、模型完成度)、所需材料(备案表、安全评估报告、服务协议、语料标注规则等)及完整备案流程(初审、自测、提交、整改、终审、公示)。为大模型企业备案提供全面指导。
|
11月前
|
SQL 存储 关系型数据库
SQL自学笔记(3):SQL里的DCL,DQL都代表什么?
本文介绍了SQL的基础语言类型(DDL、DML、DCL、DQL),并详细说明了如何创建用户和表格,最后推荐了几款适合初学者的免费SQL实践平台。
637 3
SQL自学笔记(3):SQL里的DCL,DQL都代表什么?
|
存储 SQL 缓存
MySQL 配置文件 my.cnf / my.ini 逐行详解
充分理解 MySQL 配置文件中各个变量的意义对我们有针对性的优化 MySQL 数据库性能有非常大的意义。我们需要根据不同的数据量级,不同的生产环境情况对 MySQL 配置文件进行优化。Windows 和 Linux 下的 MySQL 配置文件的名字和存放位置都是不同的,WIndows 下 MySQL 配置文件是 `my.ini` 存放在 MySQL 安装目录的根目录下;Linux 下 MySQL 配置文件是 `my.cnf` 存放在 `/etc/my.cnf`、`/etc/mysql/my.cnf`。我们也可以通过 `find` 命令进行查找。
37372 2
|
缓存 关系型数据库 MySQL
【缓存大对决】Memcached VS MySQL查询缓存,谁才是真正的性能之王?
【8月更文挑战第24天】在现代Web应用中,缓存技术对于提升性能与响应速度至关重要。本文对比分析了Memcached与MySQL查询缓存这两种常用方案。Memcached是一款高性能分布式内存对象缓存系统,支持跨服务器共享缓存,具备灵活性与容错性,但受限于内存大小且不支持数据持久化。MySQL查询缓存内置在MySQL服务器中,简化了缓存管理,特别适用于重复查询,但功能较为单一且扩展性有限。两者各有所长,实际应用中可根据需求单独或结合使用,实现最佳性能优化。
453 0
|
数据采集 数据挖掘 大数据
如何处理 PySpark 中丢失的数据?
【8月更文挑战第13天】
366 0
|
消息中间件 人工智能 缓存
RocketMQ 5.0 无状态实时性消费详解
RocketMQ 5.0 无状态实时性消费详解
35659 94
|
SQL 存储 分布式计算
Kylin使用心得:从入门到进阶的探索之旅
【5月更文挑战第2天】Apache Kylin是开源大数据分析平台,提供亚秒级OLAP查询。本文深入解析Kylin的工作原理,包括预计算模型Cube、构建过程和查询引擎。常见问题涉及Cube设计、查询性能和资源管理,解决方案涵盖合理设计、性能监控和测试验证。文中还分享了Cube创建的JSON示例,并探讨了Cube构建优化、查询优化、与其他组件集成、监控维护及生产环境问题解决。通过学习和实践,读者能有效提升数据洞察力和决策效率。
731 5
|
弹性计算 运维 监控
带你读《云上自动化运维宝典》——多云基础设施的统一纳管与运维实践分享(3)
带你读《云上自动化运维宝典》——多云基础设施的统一纳管与运维实践分享(3)
383 1