MySQL 8.0.34 在密码管理上的改进
本文作者详细说明了 MySQL 8.0.34 版本在密码管理上的改进。
作者:Sri Sakthivel
本文来源:Percona 官网博客
- 爱可生开源社区出品。
MySQL 8.0.34为我们带来了新的密码验证参数 validate_password.changed_characters_percentage
。使用此功能,我们可以控制在 validate_password
接受用户帐户的新密码之前用户必须更改的密码中的最小字符数。本文中,提供了一些场景,展示了参数 validate_password.changed_characters_percentage
如何影响用户密码更改。
要求
为了实现这一点,我们应该启用“密码验证策略”(在 MySQL 8.0.13 中引入)。我们可以通过使用参数 password_require_current
或在创建或更改用户时指定 PASSWORD REQUIRE CURRENT
来全局允许它。Brain Sumpter 在他的文章 MySQL 8:密码验证策略 中已经很好地解释了这个主题。我建议您阅读它以了解有关“密码验证策略”的更多信息。就我而言,我只是启用了参数 password_require_current
来全局强制执行“密码验证策略”。
percona labs MySQL 8.0.34 > set persist password_require_current = 1; Query OK, 0 rows affected (0.05 sec) percona labs MySQL 8.0.34 > select @@password_require_current; +-----------------------------------+ | @@password_require_current | +-----------------------------------+ | 1 | +-----------------------------------+ 1 row in set (0.00 sec)
一旦我们启用 password_require_corrent
选项,我们应该在 REPLACE 子句中提供旧密码。否则,它将不允许更改密码。将收到以下错误:
percona labs MySQL 8.0.34 > alter user 'test'@'localhost' identified by 'Test@321'; ERROR 3892 (HY000): Current password needs to be specified in the REPLACE clause in order to change it.
注意:对系统数据库
mysql
库具有全局 CREATE USER 和 UPDATE 权限的用户仍然可以更改密码,而无需指定当前密码。
创建测试环境
在测试服务器中安装了 MySQL 8.0.34 版本,并安装了 validate_password
组件。
percona labs MySQL 8.0.34 > select @@version, @@version_comment; +-------------+--------------------------------------+ | @@version | @@version_comment | +-------------+--------------------------------------+ | 8.0.34 | MySQL Community Server - GPL | +-------------+--------------------------------------+ 1 row in set (0.00 sec) percona labs MySQL 8.0.34 > INSTALL COMPONENT 'file://component_validate_password'; Query OK, 0 rows affected (0.00 sec) percona labs MySQL 8.0.34 > select @@validate_password.changed_characters_percentage; +----------------------------------------------------------------+ | @@validate_password.changed_characters_percentage | +----------------------------------------------------------------+ | 0 | +----------------------------------------------------------------+ 1 row in set (0.00 sec)
我建议安装 validate_password
组件 而不是 validate_password
插件(已弃用)。将其安装为插件时您可能看不到此功能。
测试
已将 changed_characters_percentage
值设置为 50。这意味着每当用户尝试重置密码时,新密码不应包含任何旧字符的 50%。
percona labs MySQL 8.0.34 > set global validate_password.changed_characters_percentage=50; Query OK, 0 rows affected (0.00 sec) percona labs MySQL 8.0.34 > select @@validate_password.changed_characters_percentage; +----------------------------------------------------------------+ | @@validate_password.changed_characters_percentage | +----------------------------------------------------------------+ | 50 | +----------------------------------------------------------------+ 1 row in set (0.00 sec)
然后,我创建了用户 percona1
,密码为 Percona@321
。
percona labs MySQL 8.0.34 > create user 'percona1'@'localhost' identified by 'Percona@321'; Query OK, 0 rows affected (0.00 sec) percona labs MySQL 8.0.34 > grant select on *.* to 'percona1'@'localhost'; Query OK, 0 rows affected (0.00 sec) percona labs MySQL 8.0.34 > flush privileges; Query OK, 0 rows affected (0.01 sec)
现在,让我们尝试将密码更改为 Percona@567
。
percona labs MySQL 8.0.34 > select user(); +--------------------+ | user() | +--------------------+ | percona1@localhost | +--------------------+ 1 row in set (0.00 sec) percona labs MySQL 8.0.34 > alter user percona1@localhost identified by 'Percona@567' replace 'Percona@321'; ERROR 4165 (HY000): The new password must have at least '5' characters that are different from the old password. It has only '3' character(s) different. For this comparison, uppercase letters and lowercase letters are considered to be equal.
它不允许我将密码从 Percona@321
更改为 Percona@567
,并且该错误非常清楚地解释了情况。我的密码有 11 个字符,而我的新密码只有三个字符差异(Percona@321
到 Percona@567
)。根据我的 changed_characters_percentage
值,新密码应包含 50% 的新字符。这意味着我的新密码应至少包含五个不同的字符。因此,新密码不符合要求。
现在,让我们尝试使用另一个新密码 Percona %#567
。它与之前的密码有五个不同的字符。
percona labs MySQL 8.0.34 > alter user percona1@localhost identified by 'Percona%#567' replace 'Percona@321'; Query OK, 0 rows affected (0.01 sec)
只要满足要求就可以正常工作!
它如何处理大小写字母?
为了解释这种情况,我创建了另一个用户 percona2
,密码为 PERCONa@321
。
percona labs MySQL 8.0.34 > create user 'percona2'@'localhost' identified by 'PERCONa@321'; Query OK, 0 rows affected (0.00 sec)
密码有 11 个字符。因此,我们必须在新密码中至少更改五个字符。我会将密码从 PERCONa@321
更新为 perconA@321
。在本例中,我将更改大小写和小写的七个字符。
percona labs MySQL 8.0.34 > alter user percona2@localhost identified by 'perconA@321' replace 'PERCONa@321'; ERROR 4165 (HY000): The new password must have at least '5' characters that are different from the old password. It has only '0' character(s) different. For this comparison, uppercase letters and lowercase letters are considered to be equal.
不工作。它无法更改,因为大写字母和小写字母被视为相同。
如何处理不同的字符数?
为了测试这个场景,我创建了一个用户 percona3
,密码为 Percona@321
。我们可以测试以下场景。
- 更多现有角色
- 更多不存在的角色
更多现有角色
为了测试这一点,我将密码从 Percona@321
更改为 Percona@3213333333
。(只需在现有密码中添加七个“3”字符即可)。
percona labs MySQL 8.0.34 > select user(); +--------------------+ | user() | +--------------------+ | percona3@localhost | +--------------------+ 1 row in set (0.00 sec) percona labs MySQL 8.0.34 > alter user percona3@localhost identified by 'Percona@3213333333' replace 'Percona@321'; ERROR 4165 (HY000): The new password must have at least '5' characters that are different from the old password. It has only '0' character(s) different. For this comparison, uppercase letters and lowercase letters are considered to be equal.
该错误报告“0”个字符差异,因为我们在密码中添加了七个新字符。但是,字符(3)已经存在于密码 Percona@3213333333
中。在这种情况下,这是不可接受的。
更多不存在的角色
为了测试这一点,我现在将密码从 Percona@321
更改为 Percona@3214455667788
。因此,在本例中,我将向现有密码添加十个新字符。但是,我有五个不存在的字符(4,5,6,7,8)。
percona labs MySQL 8.0.34 > alter user percona3@localhost identified by 'Percona@3214455667788' replace 'Percona@321'; Query OK, 0 rows affected (0.01 sec)
有用!
所以,从上面两个例子来看,密码长度可能会有所不同。但是,它应该满足更改字符的百分比。
结论
MySQL 8 有很多安全改进和新的实现,我想说这个功能非常好,可以改进密码验证并在更改用户密码时增加更多安全性。
更多技术文章,请访问:https://opensource.actionsky.com/
关于 SQLE
爱可生开源社区的 SQLE 是一款面向数据库使用者和管理者,支持多场景审核,支持标准化上线流程,原生支持 MySQL 审核且数据库类型可扩展的 SQL 审核工具。
SQLE 获取

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
GaussDB技术解读系列之应用无损透明(ALT)
本文作者 :华为云GaussDB研发高级工程师 藏琦 1.背景 GaussDB作为一款企业级分布式数据库,提供了“同城跨AZ双活、两地三中心、双集群强一致”等极致的高可用容灾能力。当某个数据库节点由于故障无法对外提供服务时,为了继续保证数据库服务的可用性,JDBC驱动会将业务后续的数据库连接请求发送到其它可用节点上。但故障发生后,已经与故障节点建立会话的连接无法自动切换到可用节点上,导致使用这些连接的业务单元发生报错。如果业务单元缺少连接重试或业务一致性校验,可能会引起应用中断,甚至业务数据不一致的问题,造成用户严重的业务损失。 因此,华为云GaussDB数据库提供了一种在数据库故障情况下的客户端连接转移方案 —— ALT(Application Lossness Transparent,应用无损透明)。该方案的原理是,当数据库集群的某个节点由于故障无法对外提供服务,若此时集群内还存在其它可用节点,则将故障节点上的会话连接自动迁移到目标节点上,客户端无需再次发出连接请求,仍然可以继续执行数据库操作。整个过程中,客户端应用程序是无感知的,就像是经历了一次略有延迟的SQL请求处理,极大地提...
- 下一篇
实录分享 | 使用Prometheus和Grafana监控Alluxio运行状况
欢迎来到【微直播间】,2min纵览大咖观点 本次分享主要包括三个方面: Prometheus&Grafana简介 环境搭建 手动调优 一、 Prometheus&Grafana简介关于Prometheus: Prometheus 是一个开源的完整监控解决方案,其对传统监控系统的测试和告警模型进行了彻底的颠覆,形成了基于中央化的规则计算、统一分析和告警新模型。 关于Grafana: Grafana是一款采用Go语言编写的开源应用,主要用于大规模指标数据的可视化展现,是网络架构和应用分析中最流行的时序数据展示工具,目前已经支持绝大部分常用的时序数据库。 二、环境搭建 为了确保Alluxio的最佳性能和可用性,建立一个强大的监控系统至关重要,基于监控系统我们能够迅速发现系统问题并优化资源利用。后面会逐步介绍如何配置Prometheus和Grafana监控Alluxio,详细的解决方案可见下方直播视频。 前置条件:安装Alluxio,同时将Presto与Alluxio共同运行; 2. 配置Prometheus Server; 3. 启动Prometheus Server; 4....
相关文章
文章评论
共有0条评论来说两句吧...