モヒカンは正義

プログラマー風林火山で言う「風のエンジニア」になりたい(比較的)若者Webエンジニアの備忘録

MySQLにパスワードポリシーで怒られるときの回避策

MySQL5.7.8以降で、ゆるいパスワードでユーザを作成しようとした際に下記のようなエラーで怒られる

mysql> create user "user_name"@"localhost" identified by "some_weak_password";
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

MySQL :: MySQL 5.7 Release Notes :: Changes in MySQL 5.7.8 (2015-08-03, Release Candidate)

5.7.8以降では validate_password プラグインがデフォルトでインストールされるようになっており、その影響で脆弱なパスワードはプラグインによって怒られるようになっている

現状確認

MySQL :: MySQL 5.7 Reference Manual :: 6.4.3 The Password Validation Plugin

mysql> show global variables like '%validate%';
+--------------------------------------+--------+
| 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)

ドキュメントと上記設定を見る限り、デフォルトでは

  • パスワード長 8文字以上
  • 大文字小文字 1文字以上
  • 数字 1文字以上
  • 記号 1文字以上

でないと怒られるらしい

回避策

1. validate_password.policyをLOWに下げる

MySQL :: MySQL 5.7 Reference Manual :: 6.4.3.2 Password Validation Plugin Options and Variables

によると validate_password.policyMEDIUM のときは、長さ、数字、大文字小文字、記号の4項目で制約がかかるが、 LOW にすると長さのみの制約になるようだ

f:id:pinkumohikan:20181222193801p:plain

オンラインで実行する場合のクエリ

mysql> set global validate_password.policy = "LOW";
Query OK, 0 rows affected (0.00 sec)

2. 各種制約文字数を下げる

*_count 系の設定値を変更することで、最低文字数の条件を緩和することができる

例えば「記号は必須にしたくないなー」というときは validate_password.special_char_count0 にしてやれば、パスワードに記号が含まれていなくてもエラーにはならなくなる

オンラインで実行する場合のクエリ

mysql> set global validate_password.special_char_count = 0;
Query OK, 0 rows affected (0.01 sec)

注意

文中で紹介したオンラインで実行する場合のクエリを実行してもDBサーバが再起動するとデフォルトに戻るので、永久的な設定としたい場合は my.cnf の mysqld ディレクティブとかに設定を書いておく必要がある

おまけ

参考にした資料、記事等

yoku0825.blogspot.com

MySQL :: MySQL 5.7 Release Notes :: Changes in MySQL 5.7.8 (2015-08-03, Release Candidate)

MySQL :: MySQL 5.7 Reference Manual :: 6.4.3 The Password Validation Plugin

MySQL :: MySQL 5.7 Reference Manual :: 6.4.3.2 Password Validation Plugin Options and Variables