[MySQL8.x] ルートパスワード・セキュア設定の変更

MySQL8をインストールしたあと、ルートのパスワード変更と、パスワードポリシーの変更を行います。
MySQL8は厳格なパスワードポリシーとなっており、短いパスワードや簡単なパスワードが利用できなくなっています。あまり厳しすぎるポリシーは運用上実用的とは言えないので、自分の求めるポリシーに変更したほうが使いやすいですね。

MySQLの初期パスワードを確認

初期パスワードはmysqlのログの中に記載されています。
ログの中には色々なデーターが含まれていて見難いので、 「grep password」でパスワードの含まれる行だけを表示します。

# grep password /var/log/mysqld.log

このようにパスワードが表示されます。

2020-03-10T10:33:39.477523Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: iEfk>A)<w4S0

最後の「iEfk>A)<w4S0」がパスワードになります。

これでMySQLにログインしてみます。

MySQLが立ちあがっていない場合は

# systemctl start mysqld

でMySQLを起動します。

MySQLにログイン

# mysql -u root -p
Enter password:

パスワードを聞かれるので先程のパスワードを入力します。

ログインできたらルートのパスワードを変更してみます。

alter user root@localhost identified with mysql_native_password by '任意のパスワード';

ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

ある程度の長さのパスワードを入力しないとポリシー違反と言われます。
まずは英語大文字小文字、数字、記号を組み合わせた長めのパスワードを設定します。
ここでパスワードを変更しておかないとポリシーの変更ができません。

新しく設定したルートパスワードで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      |
+--------------------------------------+--------+
7 rows in set (0.01 sec)

これを見ながらポリシーを変えます。
「 validate_password.policy」をLowに変更します。

 set global validate_password.policy=LOW;
Query OK, 0 rows affected (0.00 sec)

これで変更されました。確認してみます。

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             | LOW   |
| validate_password.special_char_count | 1     |
+--------------------------------------+-------+
7 rows in set (0.00 sec)

任意のパスワードを再度設定します。

alter user root@localhost identified with mysql_native_password by '任意のパスワード';

設定を永続的に

セキュアポリシーはMySQLを再起動すると元に戻ってしまうので、永続的に反映させるようにします。

ターミナルからmy.confを開きます。

# vi /etc/my.cnf

mysqldの項目に下記を加筆します。

[mysqld]
validate_password.policy=LOW

これで再起動すればOKです。

systemctl restart mysqld


Author: webmaster