关于mysql:MySQL-8034-在密码管理上的改进

15次阅读

共计 5695 个字符,预计需要花费 15 分钟才能阅读完成。

本文作者具体阐明了 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 USERUPDATE 权限的用户依然能够更改明码,而无需指定以后明码。

创立测试环境

在测试服务器中装置了 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@321Percona@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://www.percona.com/blog/mysql-8-0-34-improved-password-m…

更多技术文章,请拜访:https://opensource.actionsky.com/

对于 SQLE

爱可生开源社区的 SQLE 是一款面向数据库使用者和管理者,反对多场景审核,反对标准化上线流程,原生反对 MySQL 审核且数据库类型可扩大的 SQL 审核工具。

SQLE 获取

类型 地址
版本库 https://github.com/actiontech/sqle
文档 https://actiontech.github.io/sqle-docs/
公布信息 https://github.com/actiontech/sqle/releases
数据审核插件开发文档 https://actiontech.github.io/sqle-docs/docs/dev-manual/plugin…
正文完
 0