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