😽

MySQLで怒られる。 create user "user_name"@"localhost" identified by ...

2023/07/17に公開

MySQLでデータベースを作成して、grant previledgeをしようとしたら、怒られた話。

grant previledgeでは、ユーザー( user )に対して指定の種類の権限( priv_type )を指定のレベル( priv_level )で設定します。複数の権限をまとめて設定する場合はカンマ(,)で区切って続けて記述。
ユーザー権限を指定できる。

実行したいもの

実行したいもの
mysql> grant all priviledge on [database_name].* to 'username'@'localhost' identified by 'password';

エラー文

ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

日本語訳: 「パスワードが現在のポリシー要件を満たしていない」

と言われた。


MySQLのパスワードポリシーについて

コマンド行形式 --validate-password-policy=value
システム変数 validate_password_policy
スコープ グローバル
動的 はい
SET_VARヒントの適用 いいえ
列挙
デフォルト値 1
有効な値 0 / 1 / 2
  • 0 または LOW : 長さ
  • 1 または MEDIUM : 長さ; 数字、小文字/大文字、および特殊文字
  • 2 または STRONG : 長さ; 数字、小文字/大文字、および特殊文字。辞書ファイル

確認してみる

show global variables like '%validate%';で、mysqlにおけるバリデーションを一覧で見れる。この中に validate_password_policyがあるので、それをLOWにすることで、上の長さだけにできるので、簡単に書き換えができる。

mysql
mysql> $show global variables like '%validate%';
+--------------------------------------+--------+
| Variable_name                        | Value  |
+--------------------------------------+--------+
| query_cache_wlock_invalidate         | OFF    |
| 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      |
+--------------------------------------+--------+

書き換える

LOWに書き換える時はsetを使って、変えることができる

mysql
mysql> $set global validate_password_policy=LOW;

-> Query OK, 0 rows affected (0.00 sec)

再度、確認してみる

mysql
mysql> show global variables like '%validate%';
+--------------------------------------+-------+
| Variable_name                        | Value |
+--------------------------------------+-------+
| query_cache_wlock_invalidate         | OFF   |
| 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             | LOW   |
| validate_password_special_char_count | 1     |
+--------------------------------------+-------+

LOWに変わりましたね(下から2行目)。これで、行うおうとしていたコマンドができるようになります。

実行したかったコマンド

行おうとしたコマンド
mysql> grant all priviledge on [database_name].* to 'username'@'localhost' identified by 'password';

-> Query OK, 0 rows affected, 1 warning (0.01 sec)

これで行けるはず。

ちなみに。他のもの。

パスワードの文字の長さなども変えられる。

// 10文字以上
mysql> set global validate_password_length=10;

他にもこれらがある。

バリデーション名 簡単な内容 デフォルトの値
validate_password_check_user_name パスワードにユーザー名の一部が含まれていないか 無効
validate_password_dictionary_file 除外する文字列を定義したファイルを設定できる 未指定
validate_password_length パスワードに必要な最小の文字数 8文字
validate_password_mixed_case_count パスワードに必要な小文字および大文字の最大数。 パスワードポリシーが MEDIUM以上で有効 1文字(有効)
validate_password_number_count パスワードに必要な数値文字 (数字) の最大数。パスワードポリシーがMEDIUM以上で有効 1文字(有効)
validate_password_policy パスワードポリシー MEDIUM
validate_password_special_char_count スワードに必要な英数字以外の文字の最大数。パスワードポリシーが MEDIUM以上で有効 1文字(有効)

何か個人開発とかでセキュリティ関係なく、試したい時にはいろいろ変えてみると楽になる!(基本、policy変更だけでいいと思うけど笑)

Discussion