MySQL 5.
validate_passwordコンポーネント
validate_
デフォルトではインストールされていないため、利用する際にはコンポーネントのインストールが必要です。設定後は、3段階のポリシーに基づいてパスワードの検証が行われます。ただし、検証が行われるのはパスワードを平文で設定する場合のみです。ハッシュ値を使ってパスワードを設定する場合には、この検証は適用されません。
インストール方法
validate_file://
を指定します。インストールが完了すると、mysql.
テーブルで確認することができます。
mysql> INSTALL COMPONENT 'file://component_validate_password'; mysql> > SELECT * FROM mysql.component ORDER BY 1 DESC LIMIT 1; +--------------+--------------------+------------------------------------+ | component_id | component_group_id | component_urn | +--------------+--------------------+------------------------------------+ | 16 | 16 | file://component_validate_password | +--------------+--------------------+------------------------------------+ 1 row in set (0.03 sec)
コンポーネントが不要になった場合は、UNINSTALL COMPONENT 'file://
を実行することで削除することができます。
関連する変数
コンポーネントのインストールが完了すると、SHOW VARIABLES
構文を使用してvalidate_
> SHOW VARIABLES LIKE 'validate_password%'; +-------------------------------------------------+--------+ | Variable_name | Value | +-------------------------------------------------+--------+ | validate_password.changed_characters_percentage | 0 | | 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 | +-------------------------------------------------+--------+ 8 rows in set (0.02 sec)
- policy
- この変数は、LOW/
MEDIUM/ STRONGの3段階のポリシーを設定するための変数です。各設定の内容は以下の通りです。 - LOW:少なくとも8文字以上の長さのパスワードが要求されます。
- MEDIUM:LOWの条件に加え、1つの数字、1つの小文字、1つの大文字、1つの特殊文字を含むことが要求されます。
- STRONG:MEDIUMの条件に加え、4文字以上の部分文字列が辞書ファイル内の単語と一致してはならないという条件が加わります。
- デフォルトではMEDIUMが設定されています。
- check_
user_ name - ユーザー名と同じパスワードを設定できなくします
(いわゆる 「Joe Account」 の禁止)。 - changed_
characters_ percentage - 変更前のパスワードと比較して、変更後の文字列の変更割合を0~100%で設定します。ただし、この機能は
ALTER USER ~ REPLACE
コマンドでパスワードを変更する場合にのみ有効です。この変数はバージョン8.0.34から追加されています。 - length
- 設定されるパスワードの最小文字数を指定します。
- mixed_
case_ count - ポリシーがMEDIUM以上の場合、パスワードに含める必要がある小文字と大文字の最小回数を指定します。
- number_
count - ポリシーがMEDIUM以上の場合、パスワードに含める必要がある数字の最小回数を指定します。
- special_
char_ count - ポリシーがMEDIUM以上の場合、パスワードに含める必要がある特殊文字の最小回数を指定します。
- dictionary_
file - ポリシーがSTRONGの場合、パスワードの一部が辞書内の単語と一致しないようにするために使用する辞書ファイルを指定します。
検証
では、実際に強度の弱いパスワードを設定しようとした場合に発生するエラーを確認していきましょう。設定は以下の通りです。
> SHOW VARIABLES LIKE 'validate_password%'; +-------------------------------------------------+--------+ | Variable_name | Value | +-------------------------------------------------+--------+ | validate_password.changed_characters_percentage | 50 | | 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 | +-------------------------------------------------+--------+
mysql> ALTER USER 'fukamachi'@'localhost' IDENTIFIED BY 'TestP1$'; ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
mysql> ALTER USER 'fukamachi'@'localhost' IDENTIFIED BY 'testpass'; ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
mysql> ALTER USER fukamachi@localhost IDENTIFIED BY 'Fukamachi%124' REPLACE 'Fukamachi%123'; ERROR 4165 (HY000): The new password must have at least '6' characters that are different from the old password. It has only '1' character(s) different. For this comparison, uppercase letters and lowercase letters are considered to be equal.
mysql> ALTER USER 'fukamachi'@'localhost' IDENTIFIED BY 'TestP1$$'; Query OK, 0 rows affected (0.01 sec)
validate_
VALIDATE_PASSWORD_STRENGTH()関数
validate_
戻り値 | 意味 |
---|---|
0 | 文字列の長さが4文字以内の場合 |
25 | validate_ |
50 | LOWを満たす |
75 | MEDIUMを満たす |
100 | STRONGを満たす |
mysql> SELECT VALIDATE_PASSWORD_STRENGTH("Test1234"),VALIDATE_PASSWORD_STRENGTH("Fukamachi$123"); +----------------------------------------+---------------------------------------------+ | VALIDATE_PASSWORD_STRENGTH("Test1234") | VALIDATE_PASSWORD_STRENGTH("Fukamachi$123") | +----------------------------------------+---------------------------------------------+ | 50 | 100 | +----------------------------------------+---------------------------------------------+ 1 row in set (0.00 sec)
まとめ
今回は、validate_
validate_