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

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 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 审核工具。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
19天前
|
SQL NoSQL 关系型数据库
|
19天前
|
NoSQL 关系型数据库 MySQL
|
26天前
|
存储 关系型数据库 MySQL
基于案例分析 MySQL 权限认证中的具体优先原则
【10月更文挑战第26天】本文通过具体案例分析了MySQL权限认证中的优先原则,包括全局权限、数据库级别权限和表级别权限的设置与优先级。全局权限优先于数据库级别权限,后者又优先于表级别权限。在权限冲突时,更严格的权限将被优先执行,确保数据库的安全性与资源合理分配。
|
3月前
|
数据可视化 关系型数据库 MySQL
【MySQL】MySQL8.0 创建用户及授权 - 看这篇就足够了
本文介绍了在MySQL 8.0+版本中创建和管理用户的详细步骤,包括通过命令行进入MySQL、创建数据库、用户及授权等操作,并提供了具体命令示例。适合初学者参考学习,帮助实现系统的权限管理和安全控制。
1550 2
【MySQL】MySQL8.0 创建用户及授权 - 看这篇就足够了
|
安全 关系型数据库 MySQL
mysql 密码复杂度的配置修改
要修改MySQL密码复杂度的配置,你可以按照以下步骤进行操作: 1. 打开MySQL的配置文件。可以通过命令行或文本编辑器打开,文件路径通常为 `/etc/mysql/my.cnf` 或 `/etc/my.cnf`。 2. 在配置文件中找到 `[mysqld]` 或 `[mysql]` 段落,这取决于你所使用的MySQL版本。 3. 在该段落中,查找 `validate_password` 相关的配置项,通常有以下几个配置项: - `validate_password_length`:密码长度要求。 - `validate_password_number_count`:要求密码中包含的
735 1
|
存储 SQL 安全
一文带你了解MySQL之用户和权限原理
在学习这一章节的时候,我们可以先了解一下SQL语言,SQL语言共分为四大类: 数据查询语言DQL(Data QueryLanguage):select 等 数据操纵语言DML(database manage language):insert update delete 等 数据定义语言DDL(Data Definition Language): create drop alter runcate 等 数据控制语言DCL(Data Control Language): grant revoke commit rollback 等
234 0
|
SQL 关系型数据库 MySQL
【MySQL从入门到精通】【高级篇】(三)MySQL用户的创建_修改_删除以及密码的设置
本文首先会重点介绍在MySQL数据库中如何创建用户,修改用户,删除用户以及进行密码设置。
292 0
【MySQL从入门到精通】【高级篇】(三)MySQL用户的创建_修改_删除以及密码的设置
|
存储 机器学习/深度学习 安全
第十一章《mysql用户与权限》
第十一章《mysql用户与权限》
第十一章《mysql用户与权限》
|
关系型数据库 MySQL 数据安全/隐私保护
MySQL8.0密码策略修改
MySQL8.0密码策略修改
319 0
|
关系型数据库 MySQL Java
Confluence 6 MySQL 输入你的数据库细节
Confluence 的安装向导将会指导你一步一步的在 Confluence 中配置安装 MySQL 数据库。 使用 JDBC 连接(默认) JDBC 是推荐的连接你的 Confluence 到数据库中的方式。
1370 0