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文字以上
でないと怒られるらしい
2020/07/04 追記
prefixが validate_password.
ではなく validate_password_
の場合もあるらしい。自分の環境ではドットとアンスコどちらが正しいかは上記コマンドで確認できるので、実行前に確認してほしい。
回避策
1. validate_password.policyをLOWに下げる
MySQL :: MySQL 5.7 Reference Manual :: 6.4.3.2 Password Validation Plugin Options and Variables
によると validate_password.policy
が MEDIUM のときは、長さ、数字、大文字小文字、記号の4項目で制約がかかるが、 LOW にすると長さのみの制約になるようだ
オンラインで実行する場合のクエリ
mysql> set global validate_password.policy = "LOW"; Query OK, 0 rows affected (0.00 sec)
2. 各種制約文字数を下げる
*_count
系の設定値を変更することで、最低文字数の条件を緩和することができる
例えば「記号は必須にしたくないなー」というときは validate_password.special_char_count
を 0 にしてやれば、パスワードに記号が含まれていなくてもエラーにはならなくなる
オンラインで実行する場合のクエリ
mysql> set global validate_password.special_char_count = 0; Query OK, 0 rows affected (0.01 sec)
注意
文中で紹介したオンラインで実行する場合のクエリを実行してもDBサーバが再起動するとデフォルトに戻るので、永久的な設定としたい場合は my.cnf の mysqld
ディレクティブとかに設定を書いておく必要がある
おまけ
mysql> set session validate_password.special_char_count = 0;
— ぴんくもひかん (@pinkumohikan) 2018年12月22日
ERROR 1229 (HY000): Variable 'validate_password.special_char_count' is a GLOBAL variable and should be set with SET GLOBAL
そうだと思った!!!!
参考にした資料、記事等
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