MySQL 8.0 リファレンスマニュアル


6.4.3 パスワード検証コンポーネント

validate_password コンポーネントは、アカウントパスワードを要求し、潜在的なパスワードの強度テストを有効にすることで、セキュリティを向上させます。 このコンポーネントは、コンポーネント監視用のパスワードポリシーおよびステータス変数を構成できるシステム変数を公開します。

注記

MySQL 8.0 では、validate_password プラグインが validate_password コンポーネントとして再実装されました。 (コンポーネントの一般情報は、セクション5.5「MySQL のコンポーネント」 を参照してください。) 次の手順では、プラグインではなくコンポーネントの使用方法について説明します。 プラグインフォームの validate_password を使用する手順は、MySQL 5.7 Reference ManualThe Password Validation Plugin を参照してください。

validate_password のプラグインフォームは引き続き使用できますが、非推奨になっています。将来のバージョンの MySQL で削除される予定です。 プラグインを使用する MySQL インストールでは、かわりにコンポーネントの使用に移行する必要があります。 セクション6.4.3.3「パスワード検証コンポーネントへの移行」を参照してください。

validate_password コンポーネントは、次の機能を実装します:

  • クリアテキスト値として指定されたパスワードを割り当てる SQL ステートメントの場合、validate_password は現在のパスワードポリシーに対してパスワードをチェックし、弱い場合はパスワードを拒否します (ステートメントは ER_NOT_VALID_PASSWORD エラーを返します)。 これは、ALTER USERCREATE USER および SET PASSWORD ステートメントに適用されます。

  • CREATE USER ステートメントの場合、validate_password ではパスワードを指定する必要があり、パスワードポリシーを満たしている必要があります。 これは、アカウントが最初にロックされている場合でも当てはまります。アカウントを後でロック解除すると、ポリシーを満たすパスワードなしでアクセス可能になるためです。

  • validate_password には、潜在的なパスワードの強度を評価する VALIDATE_PASSWORD_STRENGTH() SQL 関数が実装されています。 この関数は、パスワード引数を取り、0 (弱い) から 100 (強い) までの整数を返します。

注記

アカウントパスワード (ALTER USERCREATE 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.xxx という形式の名前を持つシステム変数を変更します。これらは、パスワードポリシーを制御するパラメータです。 セクション6.4.3.2「パスワード検証オプションおよび変数」を参照してください。

validate_password がインストールされていない場合、validate_password.xxx システム変数は使用できず、ステートメントのパスワードはチェックされず、VALIDATE_PASSWORD_STRENGTH() 関数は常に 0 を返します。 たとえば、プラグインがインストールされていない場合、アカウントには 8 文字未満のパスワードを割り当てることも、パスワードをまったく割り当てないこともできます。

validate_password がインストールされていると仮定すると、3 レベルのパスワードチェックが実装されます: LOWMEDIUM および STRONG。 デフォルトは MEDIUM です。これを変更するには、validate_password.policy の値を変更します。 これらのポリシーにより、実装されるパスワードテストはますます厳密になります。 次の説明では、適切なシステム変数を変更して変更できるデフォルトのパラメータ値について説明します。

  • LOW ポリシーは、パスワードの長さのみテストします。 パスワードは少なくとも 8 文字の長さでなければなりません。 この長さを変更するには、validate_password.length を変更します。

  • MEDIUM ポリシーでは、パスワードに少なくとも 1 つの数字、1 つの小文字、1 つの大文字および 1 つの特殊文字 (英数字以外) を含める必要があるという条件が追加されます。 これらの値を変更するには、validate_password.number_countvalidate_password.mixed_case_count および validate_password.special_char_count を変更します。

  • STRONG ポリシーは、パスワードの 4 文字以上の部分文字列が、(辞書ファイルが指定された場合に) 辞書ファイル内の単語と一致してはならないという条件を追加します。 ディクショナリファイルを指定するには、validate_password.dictionary_file を変更します。

また、validate_password では、現在のセッションの有効なユーザーアカウントのユーザー名部分と一致するパスワードを転送または逆方向に拒否する機能がサポートされています。 この機能を制御するために、validate_password では、デフォルトで有効になっている validate_password.check_user_name システム変数が公開されます。


関連キーワード:  パスワード, validate, アカウント, コンポーネント, 認証, 変数, インストール, 変更, PASSWORD, 検証