MySQL8.0のパスワードポリシーについて

みなさんこんにちは。サーバの構築業務を担当している川合です。

今回は、最近リリースされましたMySQL8.0についての記事となります。
まだ詳細な内容を確認できていませんが、いきなり躓いたのでその内容について書きたいと思います。

概要

CentOS7.5でMySQL8.0をインストールしています。

インストール時に設定される初期パスワードを変更するにあたり、パスワードポリシーを少しゆるめパスワードを再設定しようとしたところ上手くいきませんでした。

validate_passwordのポリシーをLOWに変更して8文字以下でパスワードを設定できるようにしたのですが何故か上手くいかず、色々と調べて回った内容について解説したいと思います。

validate_passwordプラグイン
validate_passwordコンポーネント

この2つの違いがパスワード再設定が上手くいかない原因でした。

環境構築

現時点でのMySQL8.0の最新は、8.0.11-1です。

MySQL8.0のインストールには、MySQLのリポジトリを利用します。
リポジトリはインストール後、無効化しておきます。

rpm -ivh https://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm
sed -i 's/enabled=1/enabled=0/g' /etc/yum.repos.d/mysql-community.repo

あとは、yum コマンドにてインストールすることでMySQL8.0を利用できます。

yum install --enablerep=mysql80-community mysql-community-server mysql-community-devel

systemdコマンドにてMySQLを起動することでMySQLにログインすることが可能になります。

現象確認

MySQL5.7から初期パスワードがログファイルに出力されるようになっています。
MySQL8.0でも同様にログファイルに出力されています。

cat /var/log/mysqld.log |grep "temporary password"

上記のコマンドにて、設定されている初期パスワードが確認できます。
設定作業を行うには、設定されている初期パスワードを一度変更する必要があります。

mysql> show variables like 'validate_password';
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

mysql> SET PASSWORD= 'hogehoge';
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

各種設定のパラメータを確認しようにもパスワード変更が必要となり
簡単なパスワードを設定しようとするとエラーとなります。

ですので、mysql_secure_installation を実行して初期設定を完了させます。
一旦パスワードは、初期パスワードで再設定して処理を進めると以下の作業を行えます。

VALIDATE PASSWORD PLUGIN can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD plugin?

Press y|Y for Yes, any other key for No: y

validate_passwordの設定作業を実施するかどうか確認が入りますので、設定を変更します。

There are three levels of password validation policy:

LOW Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 0

Estimated strength of the password: 100
Change the password for root ? ((Press y|Y for Yes, any other key for No) : y

New password:

Re-enter new password:

Estimated strength of the password: 50
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) :y
... Failed! Error: Your password does not satisfy the current policy requirements

ポリシーをLOWに設定して、hogehoge でパスワードを再設定します。
本来であれば、ポリシーをゆるめたのでパスワードが変更できますが、エラーとなっています。
数字を入れてもだめだったので、初期パスワードにて再設定して残りの処理を実施しました。

初期設定がこれで完了するので、MySQLにログインして設定値を確認してみます。


mysql> show variables like 'validate_password';
+--------------------------------------------+----------+
| Variable_name        | Value |
+--------------------------------------------+----------+
| validate_password.check_user_name | ON |
| validate_password.dictionary_file | |
| validate_password.length | 8 |
| validate_password.mixed_case_count | 1 |
| validate_password.number_count | 1 |
| validate_password.policy | MEDIUM |
| validate_password.special_char_count | 1 |
| validate_password_check_user_name | ON |
| validate_password_dictionary_file | |
| validate_password_length | 8 |
| validate_password_mixed_case_count | 1 |
| validate_password_number_count | 1 |
| validate_password_policy | LOW |
| validate_password_special_char_count | 1 |
+--------------------------------------------+----------+

validate_password. と validatepassword で設定が重複しています。
validatepassword の方には、LOWが反映されているので変更されたのはこちらだけのようです。

validate_password. は、MEDIUMのままなのでこちらのポリシーが設定作業中に適用されて簡単なパスワードに変更することができなかったようです。

解決方法

参考URL
https://dev.mysql.com/doc/refman/8.0/en/validate-password-transitioning.html

MySQL8.0.4 以降から、validate_passwordがコンポーネントとして実装されているようです。
validate_passwordプラグインについては、廃止が予定されていて将来削除されてしまいます。

コンポーネントとプラグインは共存可能で、処理はコンポーネントが優先されるようです。

mysql_secure_installation では、プラグインを導入していますので
作業でポリシーを変更しているのは、プラグイン側の設定となります。

なので、コンポーネント側の設定はデフォルトのままなので
ゆるいパスワードで再設定することが出来なかった訳です。

今後はコンポーネント側のポリシーでパスワードが制御されますので
mysql_secure_installation でプラグインを追加で入れる必要はありません。

もし入れてしまっても、プラグインをアンインストールすることで元の状態に戻すことは可能です。

あとは、MySQLの設定ファイルにコンポーネント側の設定を記載するれば作業は完了です。

validate_password.policy=LOW

ちなみに、プラグインを導入していてMySQLを再起動などして
ログを出力させてみると、以下のような警告のログが表示されています。

MY-001287 - 'validate password plugin' is deprecated and will be removed in a future release. Please use validate_password component instead

プラグインは、近い将来削除されるのでコンポーネントを利用して下さい。とログには出ています。

まとめ

軽く触ってみた感じですが、MySQL5.7が登場したときよりかは大きな変化はないように感じました。
インストール後の簡単な設定もMySQL5.7の時の同様な手順で大丈夫そうです。

・古い設定ファイルを流用した場合にどんな警告が出るのか
・バージョンアップに伴い、無くなったパラメータなどないのか
・初期設定がまだ足りていないのか

などなど、引き続き確認していきたいと思います。

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA