叫ぶうさぎの悪ふざけ

うさぎが目印のWebエンジニアが、得たことや思ったことを言の葉に乗せて叫ぶ場所です。

MySQL 5.7 以降の初期パスワード変更方法、および強度の話

MySQL 5.7 以降から、インストール直後のパスワードの生成方法が変更になって久しいです。 今更感もあるのですが、僕がしょっちゅう忘れて、個人esaに記録したのを読み返すので、いっそのこと公開してしまえ、と思い、エントリーを書いています。(MySQL 5.7.18で確認)

インストール直後のパスワード

yumなどでインストールした際、rootユーザーのデフォルトパスワードが ランダム生成 されるようになり、パスワードrootではログインできなくなりました。 そして、インストール時、パスワードは コンソール上には表示されません 故に以下から獲得し、ログインする必要があります。

/var/log/mysqld.log の中に以下の記録があります。

[Note] A temporary password is generated for root@localhost: [12桁の英数記号ランダム文字列]
  • まずは初期ログインします
$ mysql -u root -p
Enter password: [上記のパスワード]

パスワードの強度を確認し、必要に応じて変更

さてパスワードを変更しよう、と思って「とりあえず簡単なパスワードにしよう」と軽いノリで変更すると パスワードポリシーでエラー になります。

  • 安直なパスワード変更はエラー
mysql> SET PASSWORD FOR root@localhost=password('root');
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

ではパスワードのポリシーどうなってんの、と確認してみると、初期値を変えろと怒られます。

  • パスワードポリシーの確認
mysql> SHOW VARIABLES LIKE 'validate_password%';
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

というわけで強度の高いパスワードに変更します。 MySQL5.7 のパスワードポリシー初期値はMEDIUMとなっていて、後述しますが 8文字以上、英数大文字小文字と記号 で構成されている必要があります。

  • 強度の高いパスワードへの変更
mysql> SET PASSWORD FOR root@localhost=password('Mamy1326@');
Query OK, 0 rows affected, 1 warning (0.00 sec)

MySQL5.7 のパスワードポリシーは以下の種類があります。 よりセキュアにするならば、強度を低くしたくはありませんが、適切に管理するから緩くする 判断は各自の責任で行って頂ければと思います。

パスワードポリシー 概要 サンプル
共通 8文字以上
LOW 文字種の制限はなく、パスワードの長さのみチェック 12345678
MEDIUM LOWポリシーに加え、最低1つの数値文字を含み、1つの小文字および大文字を含み、1つの特殊文字 (英数字以外) を含む Mamy1326@
STRONG MEDIUMポリシーに加え、4文字以上の部分文字列が、(辞書ファイルが指定された場合に) 辞書ファイル内の単語と一致してはならない

パスワードポリシーを確認してみる

パスワード変更実施したので、パスワードポリシーを確認してみましょう。

  • パスワードポリシーの確認
mysql> SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+--------+
| Variable_name                        | Value  |
+--------------------------------------+--------+
| validate_password_check_user_name    | OFF    |
| 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_length パスワードの長さが8文字以上 に設定されています。

  • validate_password_policy パスワードポリシーがMEDIUMに設定されています。

あまり変更する必要はないと思いますが、低くするならば相応の覚悟で実施しましょう。

パスワードポリシーを変更してみる

一応、変更方法は以下になります。

  • パスワードポリシーの変更(ゆるゆる)
mysql> SET GLOBAL validate_password_length=4;
Query OK, 0 rows affected (0.00 sec)

mysql> SET GLOBAL validate_password_policy=LOW;
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+-------+
| Variable_name                        | Value |
+--------------------------------------+-------+
| validate_password_check_user_name    | OFF   |
| validate_password_dictionary_file    |       |
| validate_password_length             | 4     |
| 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)

注意点

validate_password_policy=MEDIUM に設定しても、LOWだった頃に設定したパスワードは有効です。 LOW→MEDIUMに強度を上げた場合は、パスワード再設定を忘れないようにしましょう。

さいごに

パスワードを適切に取り扱い、あなたも素敵なセキュアライフを!