validate_password
コンポーネントは、アカウントパスワードを要求し、潜在的なパスワードの強度テストを有効にすることで、セキュリティを向上させます。 このコンポーネントは、コンポーネント監視用のパスワードポリシーおよびステータス変数を構成できるシステム変数を公開します。
MySQL 8.0 では、validate_password
プラグインが validate_password
コンポーネントとして再実装されました。 (コンポーネントの一般情報は、セクション5.5「MySQL のコンポーネント」 を参照してください。) 次の手順では、プラグインではなくコンポーネントの使用方法について説明します。 プラグインフォームの validate_password
を使用する手順は、MySQL 5.7 Reference Manual の The Password Validation Plugin を参照してください。
validate_password
のプラグインフォームは引き続き使用できますが、非推奨になっています。将来のバージョンの MySQL で削除される予定です。 プラグインを使用する MySQL インストールでは、かわりにコンポーネントの使用に移行する必要があります。 セクション6.4.3.3「パスワード検証コンポーネントへの移行」を参照してください。
validate_password
コンポーネントは、次の機能を実装します:
クリアテキスト値として指定されたパスワードを割り当てる SQL ステートメントの場合、
validate_password
は現在のパスワードポリシーに対してパスワードをチェックし、弱い場合はパスワードを拒否します (ステートメントはER_NOT_VALID_PASSWORD
エラーを返します)。 これは、ALTER USER
、CREATE USER
およびSET PASSWORD
ステートメントに適用されます。CREATE USER
ステートメントの場合、validate_password
ではパスワードを指定する必要があり、パスワードポリシーを満たしている必要があります。 これは、アカウントが最初にロックされている場合でも当てはまります。アカウントを後でロック解除すると、ポリシーを満たすパスワードなしでアクセス可能になるためです。validate_password
には、潜在的なパスワードの強度を評価するVALIDATE_PASSWORD_STRENGTH()
SQL 関数が実装されています。 この関数は、パスワード引数を取り、0 (弱い) から 100 (強い) までの整数を返します。
アカウントパスワード (ALTER USER
、CREATE USER
および SET PASSWORD
) を割当てまたは変更するステートメントの場合、ここで説明する validate_password
機能は、MySQL に内部的に資格証明を格納する認証プラグインを使用するアカウントにのみ適用されます。 MySQL 外部の資格証明システムに対して認証を実行するプラグインを使用するアカウントの場合、パスワード管理もそのシステムに対して外部で処理する必要があります。 内部資格証明記憶域の詳細は、セクション6.2.15「パスワード管理」 を参照してください。
前述の制限は、アカウントに直接影響しないため、VALIDATE_PASSWORD_STRENGTH()
関数の使用には適用されません。
例:
-
validate_password
は、次のステートメントでクリアテキストパスワードを確認します。 デフォルトのパスワードポリシーではパスワードに最低 8 文字の長さが要求されるため、パスワードが弱いことからステートメントはエラーを生成します。mysql> ALTER USER USER() IDENTIFIED BY 'abc'; ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
-
元のパスワード値はチェックに使用できないため、ハッシュ値として指定されたパスワードはチェックされません:
mysql> ALTER USER 'jeffrey'@'localhost' IDENTIFIED WITH mysql_native_password AS '*0D3CED9BEC10A777AEC23CCC353A8C08A633045E'; Query OK, 0 rows affected (0.01 sec)
-
現在のパスワードポリシーを満たすパスワードがアカウントに含まれていないため、アカウントが最初にロックされていても、このアカウント作成ステートメントは失敗します:
mysql> CREATE USER 'juanita'@'localhost' ACCOUNT LOCK; ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
-
パスワードを確認するには、
VALIDATE_PASSWORD_STRENGTH()
関数を使用します:mysql> SELECT VALIDATE_PASSWORD_STRENGTH('weak'); +------------------------------------+ | VALIDATE_PASSWORD_STRENGTH('weak') | +------------------------------------+ | 25 | +------------------------------------+ mysql> SELECT VALIDATE_PASSWORD_STRENGTH('lessweak$_@123'); +----------------------------------------------+ | VALIDATE_PASSWORD_STRENGTH('lessweak$_@123') | +----------------------------------------------+ | 50 | +----------------------------------------------+ mysql> SELECT VALIDATE_PASSWORD_STRENGTH('N0Tweak$_@123!'); +----------------------------------------------+ | VALIDATE_PASSWORD_STRENGTH('N0Tweak$_@123!') | +----------------------------------------------+ | 100 | +----------------------------------------------+
パスワードチェックを構成するには、validate_password.
という形式の名前を持つシステム変数を変更します。これらは、パスワードポリシーを制御するパラメータです。 セクション6.4.3.2「パスワード検証オプションおよび変数」を参照してください。
xxx
validate_password
がインストールされていない場合、validate_password.
システム変数は使用できず、ステートメントのパスワードはチェックされず、xxx
VALIDATE_PASSWORD_STRENGTH()
関数は常に 0 を返します。 たとえば、プラグインがインストールされていない場合、アカウントには 8 文字未満のパスワードを割り当てることも、パスワードをまったく割り当てないこともできます。
validate_password
がインストールされていると仮定すると、3 レベルのパスワードチェックが実装されます: LOW
、MEDIUM
および STRONG
。 デフォルトは MEDIUM
です。これを変更するには、validate_password.policy
の値を変更します。 これらのポリシーにより、実装されるパスワードテストはますます厳密になります。 次の説明では、適切なシステム変数を変更して変更できるデフォルトのパラメータ値について説明します。
LOW
ポリシーは、パスワードの長さのみテストします。 パスワードは少なくとも 8 文字の長さでなければなりません。 この長さを変更するには、validate_password.length
を変更します。MEDIUM
ポリシーでは、パスワードに少なくとも 1 つの数字、1 つの小文字、1 つの大文字および 1 つの特殊文字 (英数字以外) を含める必要があるという条件が追加されます。 これらの値を変更するには、validate_password.number_count
、validate_password.mixed_case_count
およびvalidate_password.special_char_count
を変更します。STRONG
ポリシーは、パスワードの 4 文字以上の部分文字列が、(辞書ファイルが指定された場合に) 辞書ファイル内の単語と一致してはならないという条件を追加します。 ディクショナリファイルを指定するには、validate_password.dictionary_file
を変更します。
また、validate_password
では、現在のセッションの有効なユーザーアカウントのユーザー名部分と一致するパスワードを転送または逆方向に拒否する機能がサポートされています。 この機能を制御するために、validate_password
では、デフォルトで有効になっている validate_password.check_user_name
システム変数が公開されます。