如何使用 validate_password 插件提高我的 Amazon RDS MySQL 数据库实例的安全性?

上次更新时间:2020 年 6 月 17 日

我有一个运行 MySQL 的 Amazon Relational Database Service (Amazon RDS) 数据库实例。我想使用 validate_password 插件测试密码并提高数据库实例的安全性。 我该如何操作?

简短描述

MySQL 提供了 validate_password 插件,它可用于提高 RDS MySQL 数据库实例的安全性。此插件通过使用数据库实例的数据库参数组中的参数来实施密码策略。运行 MySQL 版本 5.6、5.7 和 8.0 的数据库实例支持该插件。

注意:validate_password 插件不是默认 MySQL 配置的一部分。相反,它作为单独的插件存在。当 Amazon RDS 创建 MySQL 数据库实例时,默认情况下不会安装该插件。

解决方法

为 RDS MySQL 数据库实例启用 validate_password 插件

以主用户身份连接到 RDS MySQL 数据库实例,然后运行以下命令:

MySQL [(none)]> INSTALL PLUGIN validate_password SONAME 'validate_password.so';

这将安装 validate_password 插件,然后使用默认参数值运行该插件。

验证 validate_password 插件是否已在 RDS MySQL 数据库实例上安装并处于活动状态

在数据库实例上运行以下查询,以检查 validate_password 插件的状态:

MySQL [(none)]> SELECT plugin_name, plugin_status, 
plugin_type, plugin_library FROM information_schema.plugins WHERE 
plugin_name='validate_password';

    +-------------------+---------------+-------------------+----------------------+
    | plugin_name       | plugin_status | plugin_type       | plugin_library       |
    +-------------------+---------------+-------------------+----------------------+
    | validate_password | ACTIVE        | VALIDATE PASSWORD | validate_password.so |
    +-------------------+---------------+-------------------+----------------------+

检查 validate_password 插件的默认值

使用以下查询检查插件的默认参数值:

MySQL [(none)]> SHOW GLOBAL VARIABLES LIKE 'validate_password%';

以下是对每个参数的说明:

名称 描述
validate_password_check_user_name  
validate_password_dictionary_file    
validate_password_length 8 最短密码长度
validate_password_mixed_case_count 1 要求密码包含大写和小写字符
validate_password_number_count 1 要求密码至少包含 1 个数字
validate_password_policy 中等 设置组标签
validate_password_special_char_count 1 要求密码至少包含 1 个特殊字符

您可以在数据库实例使用的自定义数据库参数组中配置这些参数,但 validate_password_dictionary_filevalidate_password_check_user_name 除外。

注意:如果您的数据库实例使用默认参数组,则必须创建一个新的参数组,然后将其附加到该数据库实例。这是因为您无法修改默认参数组的参数设置。有关更多信息,请参阅使用数据库参数组

注意:Amazon RDS 不会验证密码。如果您使用 AWS 管理控制台、modify-db-instance AWS 命令行界面 (AWS CLI) 命令或 ModifyDBInstance RDS API 操作设置了用户密码,则即使新密码不符合您的密码策略,也可以成功进行更改。

重置现有密码并创建符合策略的密码

安装并启用 password_validate 插件后,请重置您的现有密码以使其符合新的验证策略。

首先,使用上面列出的默认插件参数来测试数据库实例上安装的 password_valdiate 插件,以创建新的数据库用户:

MySQL [(none)]> CREATE USER 'validate_password'@'%' identified by 'password';
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

由于 validate_password_policy 设置为中等,您必须确保密码满足 MySQL validate_password_policy 文档中所述的条件。由于上述 CREATE USER 命令不满足密码策略,因此失败,并显示错误“您的密码不满足当前策略要求”。

通过执行以下命令,使用符合密码策略的密码创建用户:

MySQL [(none)]> CREATE USER 'validate_password'@'%' identified by 'Password@57';
Query OK, 0 rows affected (0.01 sec)

运行以下查询以验证您已成功创建用户:

MySQL [(none)]> SELECT user, host FROM mysql.user WHERE ( user='validate_password' AND host='%' );
+-------------------+------+
| user              | host |
+-------------------+------+
| validate_password | %    |
+-------------------+------+
1 row in set (0.00 sec)

要更改现有用户,请使用符合策略的密码运行 ALTER USER 查询,如下所示:

mysql> alter user 'validate_password'@'%' identified by 'Password@2020';
Query OK, 0 rows affected (0.01 sec)

要了解有关为现有用户重置密码的更多信息,请参阅 MySQL 文档中有关如何重置根密码的信息

为 RDS MySQL 数据库实例禁用 validate_password 插件

要从数据库实例中禁用 validate_password 插件,请以主用户身份运行以下命令:

MySQL [(none)]> UNINSTALL PLUGIN validate_password;

这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助?