MySQL5.7.8で導入された面倒なパスワードのポリシーを変更する

mysql_logo_large

この記事には広告を含む場合があります。

記事内で紹介する商品を購入することで、当サイトに売り上げの一部が還元されることがあります。

英数字だけでパスワードが設定できない問題の原因と対処法

MySQL5.7.8以降で今まで通り、英数字のみでパスワードの設定を行うと下記のようにエラーが発生します。パスワードが安全ではない…とのエラーですが、本記事ではエラーの原因と回避策を確認していきます。

〇発生するエラー画面

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 の設定項目を確認した内容を記載します。

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 の結果を見ると

パスワードの長さ 8文字以上
英字 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

となっています。

英語が苦手な人のために日本語訳も入れておきます。

LOW:パスワードの長さのみチェックする。
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

 

エラーを解決する方法

では解消方法を確認してみます。

mysql> CREATE USER user IDENTIFIED BY "qT51j_Qkt7";
Query OK, 0 rows affected (0.01 sec)

上記のようにパスワードポリシーに準拠するのは、対処法としては当たり前なので一旦置いておきます(汗)。

 

対処法1:一時的に制約を下げる
まずは公式サイトがおすすめしている対処方法として、SQL の「SET GLOBAL」命令で一時的に設定を変更するものがあります。

実際に打ち込む命令はこんな感じです。

SET GLOBAL validate_password_length=6;
SET GLOBAL validate_password_policy=LOW;

上記の命令は、MySQL を再起動するまで有効になるので、需要としては事足りるかもしれませんね。

 

対処法2:パスワードポリシーの設定を変更する
2つ目の対応としては、パスワードポリシーの設定自体を変更する方法があります。

例えばポリシー自体を無効化するのであれば

[mysqld] validate-password=OFF

のように設定を OFF します。

チェック項目をパスワードの長さだけに変更するなら

[mysqld] validate_password_policy=LOW

と設定します。

また AWS にある RDS にて同じ設定を行うのであれば、パラメータグループから設定変更すれば対処できます。
password_simple_error_rds

 

さいごに

「validate_password_policy」は安易なパスワードを設定させないために導入された機能です。設定を変更する方法を紹介しましたが、データベースの安全を考慮するなら記号付きのパスワードを設定した方が良いのかなと思います。

 

 

ウェブプログラミングについては下記の本も参考になるので、スキルアップにお役立てください。

created by Rinker
徳丸 浩(著)
ページ数: 688ページ
出版社:SBクリエイティブ
発売日:2018/06/21

出典:amazon