この記事には広告を含む場合があります。
記事内で紹介する商品を購入することで、当サイトに売り上げの一部が還元されることがあります。
英数字だけでパスワードが設定できない問題の原因と対処法
MySQL5.7.8以降で今まで通り、英数字のみでパスワードの設定を行うと下記のようにエラーが発生します。パスワードが安全ではない…とのエラーですが、本記事ではエラーの原因と回避策を確認していきます。
〇発生するエラー画面
1 2 |
mysql> CREATE USER user IDENTIFIED BY 'password'; ERROR 1819 (HY000): Your password does not satisfy the current policy requirements |
エラーが発生する原因
エラーの原因は、MySQL5.6.6で導入された validate_password の機能が、MySQL5.7.8以降でデフォルトで有効化されました。それによりセキュリティポリシーとして弱いパスワードを設定しようとするとエラーが発生する…ということです。
〇MySQL5.7.8 のリリースノート(validate_password がデフォルトで導入された記述あり)
https://dev.mysql.com/doc/relnotes/mysql/5.7/en/news-5-7-8.html
では MySQL にて validate_password の設定項目を確認した内容を記載します。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
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.00 sec) |
公式サイトの項目説明を見ながら SQL の結果を見ると
英字 1文字以上
数字 1文字以上
記号 1文字以上
がデフォルトとして設定されているみたいです。
validate_password_policy の説明については、
Policy Tests Performed
0 or LOW Length
1 or MEDIUM Length; numeric, lowercase/uppercase, and special characters
2 or STRONG Length; numeric, lowercase/uppercase, and special characters; dictionary file
となっています。
英語が苦手な人のために日本語訳も入れておきます。
MEDIUM:パスワードの長さ、数字、大文字・小文字、記号をチェックする。
STRONG:パスワードの長さ、数字、大文字・小文字、記号、及び辞書ファイル(有名な名詞などを使用していないことを確認)をチェックする。
〇MySQL5.6.6 のリファレンス(validate_password の設定項目の説明)
https://dev.mysql.com/doc/refman/5.6/en/validate-password-options-variables.html#sysvar_validate_password_policy
エラーを解決する方法
では解消方法を確認してみます。
1 2 |
mysql> CREATE USER user IDENTIFIED BY "qT51j_Qkt7"; Query OK, 0 rows affected (0.01 sec) |
対処法1:一時的に制約を下げる
まずは公式サイトがおすすめしている対処方法として、SQL の「SET GLOBAL」命令で一時的に設定を変更するものがあります。
実際に打ち込む命令はこんな感じです。
1 2 |
SET GLOBAL validate_password_length=6; SET GLOBAL validate_password_policy=LOW; |
上記の命令は、MySQL を再起動するまで有効になるので、需要としては事足りるかもしれませんね。
対処法2:パスワードポリシーの設定を変更する
2つ目の対応としては、パスワードポリシーの設定自体を変更する方法があります。
例えばポリシー自体を無効化するのであれば
のように設定を OFF します。
チェック項目をパスワードの長さだけに変更するなら
と設定します。
また AWS にある RDS にて同じ設定を行うのであれば、パラメータグループから設定変更すれば対処できます。
さいごに
「validate_password_policy」は安易なパスワードを設定させないために導入された機能です。設定を変更する方法を紹介しましたが、データベースの安全を考慮するなら記号付きのパスワードを設定した方が良いのかなと思います。