如何使用 validate_password 插件提高 Amazon RDS MySQL DB 实例的安全性?
上次更新日期:2020 年 10 月 19 日
我有一个运行 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 | 要求密码至少包含一个数字 |
validate_password_policy | 中等 | 设置组标签 |
validate_password_special_char_count | 1 | 要求密码至少包含一个特殊字符 |
您可以在数据库实例使用的自定义数据库参数组中配置这些参数,但 validate_password_dictionary_file 和 validate_password_check_user_name 除外。
注意:如果您的数据库实例使用默认参数组,则必须创建一个新的参数组,然后将其附加到该数据库实例。这是因为您无法修改默认参数组的参数设置。有关更多信息,请参阅使用数据库参数组。
注意:Amazon RDS 不会验证密码。如果您使用 AWS 管理控制台、modify-db-instance AWS 命令行界面 (AWS CLI) 命令或 ModifyDBInstance RDS API 操作设置用户密码,则即使新密码不符合您的密码策略,也可以成功进行更改。
重置现有密码并创建符合策略的密码
安装并启用 password_validate 插件后,请重置您的现有密码以使其符合新的验证策略。
首先,测试数据库实例上安装的 password_validate 插件。为此,您可以使用上面列出的默认插件参数创建新的数据库用户:
MySQL [(none)]> CREATE USER 'USER123'@'%' identified by 'password';
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
由于 validate_password_policy 设置为 MEDIUM(中等),请确保密码满足 MySQL validate_password_policy 文档中所述的条件。上述 CREATE USER 命令不满足密码策略,因此执行失败,并显示错误“Your password does not satisfy the current policy requirements”(您的密码不满足当前策略要求)。
通过运行以下命令,使用符合密码策略的密码创建用户:
MySQL [(none)]> CREATE USER 'USER123'@'%' identified by 'Password@57';
Query OK, 0 rows affected (0.01 sec)
运行以下命令来验证您是否已成功创建用户:
MySQL [(none)]> SELECT user, host FROM mysql.user WHERE ( user='USER123' AND host='%' );
+-------------------+------+
| user | host |
+-------------------+------+
| validate_password | % |
+-------------------+------+
1 row in set (0.00 sec)
要更改现有用户的密码,请使用符合策略的密码运行以下命令,如下所示:
5.6:
mysql> SET PASSWORD FOR 'USER123'@'%' = PASSWORD('Password@2020');
Query OK, 0 rows affected (0.01 sec)
5.7 and 8.0:
mysql> alter user 'USER123'@'%' 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;