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に強度を上げた場合は、パスワード再設定を忘れないようにしましょう。
さいごに
パスワードを適切に取り扱い、あなたも素敵なセキュアライフを!