MySQL を実行する Amazon Relational Database Service (Amazon RDS) インスタンスがあります。validate_password プラグインを使用して、パスワードをテストし、DB インスタンスのセキュリティを向上させたいと考えています。
簡単な説明
MySQL には、RDS MySQL DB インスタンスのセキュリティを強化できる validate_password プラグインが用意されています。このプラグインでは、使用しているDB インスタンスの DB パラメータグループにあるパラメータを使用して、パスワードポリシーが適用されます。このプラグインは、MySQL 5.7 と 8.0 バージョンを実行する DB インスタンスをサポートしています。
**注:**validate\ _password プラグインは MySQL のデフォルト設定の一部ではなく、独立したプラグインです。Amazon RDS が MySQL DB インスタンスを作成する場合、プラグインはデフォルトではインストールされません。
解決策
RDS for MySQL DB インスタンスの validate_password プラグインを有効にする
リードユーザーを使用して RDS for MySQL DB インスタンスに接続し、以下のコマンドを実行します。
MySQL [(none)]> INSTALL PLUGIN validate_password SONAME 'validate_password.so';
これにより、validate_password プラグインがインストールされ、デフォルトのパラメータ値でプラグインが実行されます。
validate_password プラグインが RDS MySQL DB インスタンスにインストールされ、アクティブ化されていることを確認します。
DB インスタンスで次のクエリを実行して、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
validate_password_mixed_case_count
- 値 - 1
- 説明 - パスワードに大文字と小文字を含める
validate_password_number_count
- 値 - 1
- 説明 - パスワードには、少なくとも 1 つの数字を含める
validate_password_policy
- 値 - MEDIUM
- 説明 - 設定グループレベル
validate_password_special_char_count
- 値 - 1
- 説明 - パスワードには、最低 1 文字の特殊文字を含める
validate_password_dictionary_file と validate_password_check_user_name を除いて、DB インスタンスで使用されているカスタム DB パラメータグループにこれらのパラメータを設定できます。DB インスタンスがデフォルトのパラメータグループを使用している場合は、新しいパラメータグループを作成し、この DB インスタンスにアタッチする必要があります。これは、デフォルトのパラメータグループのパラメータ設定は変更できないためです。詳細については、「DB パラメータグループを使用する」をご参照ください。
**注:**Amazon RDS では、パスワードを検証しません。次のいずれかを使用してユーザーパスワード設定を行うと、パスワードポリシーを満たさない場合でも変更が成功します。
- AWS Management コンソール
- AWS コマンドラインインターフェイス (AWS CLI) modify-db-instance コマンド
- Amazon RDS API ModifyDBInstance オペレーション
既存のパスワードをリセットし、ポリシーに準拠するパスワードを作成する
password_validate プラグインをインストールして有効にしたら、新しい検証ポリシーに準拠させるために既存のパスワードをリセットします。
1. DB インスタンスにインストールされた password_validate プラグインをテストします。上記のデフォルトのプラグインパラメータを使用して、新しい DB ユーザーを作成します。
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."
2.次のコマンドを実行して、パスワードポリシーを満たすパスワードでユーザーを作成します。
MySQL [(none)]> CREATE USER 'USER123'@'%' identified by 'Password@57';
Query OK, 0 rows affected (0.01 sec)
3.次のコマンドを実行して、ユーザーが正常に作成されたことを確認します。
MySQL [(none)]> SELECT user, host FROM mysql.user WHERE ( user='USER123' AND host='%' );
+-------------------+------+
| user | host |
+-------------------+------+
| validate_password | % |
+-------------------+------+
1 row in set (0.00 sec)
4.既存のユーザーのパスワードを変更するには、次のコマンドを実行します。次の例に示すように、ポリシーに準拠するパスワードを使用します。
mysql> alter user 'USER123'@'%' identified by 'Password@2020';
Query OK, 0 rows affected (0.01 sec)
既存のユーザーのパスワードをリセットする方法の詳細については、MySQL ドキュメントの、How to reset the root password(ルートパスワードのリセット方法)を参照してください。
RDS MySQL DB インスタンスの validate_password プラグインを無効にする
MySQL [(none)]> UNINSTALL PLUGIN validate_password;
関連情報
RDS for MySQL に対するパスワード検証プラグインの使用
MySQL ドキュメントでのパスワード検証プラグイン