36.137 STRONG_PASSWORD_CHECKプロシージャ

このプロシージャは、提示されたパスワードがOracle Application Expressサイト管理者によって定義されたパスワード強度要件を満たすかどうかに基づいて、Boolean OUT値を戻します。

構文

APEX_UTIL.STRONG_PASSWORD_CHECK(
    p_username                    IN  VARCHAR2,
    p_password                    IN  VARCHAR2,
    p_old_password                IN  VARCHAR2,
    p_workspace_name              IN  VARCHAR2,
    p_use_strong_rules            IN  BOOLEAN,
    p_min_length_err              OUT BOOLEAN,
    p_new_differs_by_err          OUT BOOLEAN,
    p_one_alpha_err               OUT BOOLEAN,
    p_one_numeric_err             OUT BOOLEAN,
    p_one_punctuation_err         OUT BOOLEAN,
    p_one_upper_err               OUT BOOLEAN,
    p_one_lower_err               OUT BOOLEAN,
    p_not_like_username_err       OUT BOOLEAN,
    p_not_like_workspace_name_err OUT BOOLEAN,
    p_not_like_words_err          OUT BOOLEAN,
    p_not_reusable_err            OUT BOOLEAN);

パラメータ

表36-117 STRONG_PASSWORD_CHECKのパラメータ

パラメータ 説明

p_username

現行のワークスペース内のアカウントを識別するユーザー名

p_password

パスワードの強度ルールを基準にチェックするパスワード

p_old_password

アカウントの現行のパスワード(「新しいパスワードは古いパスワードと異なること」というルールを適用する目的のみに使用されます)

p_workspace_name

現行のワークスペース名(「パスワードにはワークスペース名を含まないこと」というルールを適用する目的のみに使用されます)

p_use_strong_rules

このAPIをコールする場合はFALSEを渡します

p_min_length_err

パスワードが最小の長さの要件を満たすかどうかに基づいて、TRUEまたはFALSEの結果が戻ります

p_new_differs_by_err

パスワードが「新しいパスワードは古いパスワードと異なること」という要件を満たすかどうかに基づいて、TRUEまたはFALSEの結果が戻ります

p_one_alpha_err

パスワードがアルファベットを1文字以上含むことという要件を満たすかどうかに基づいて、TRUEまたはFALSEの結果が戻ります

p_one_numeric_err

パスワードが数字を1文字以上含むことという要件を満たすかどうかに基づいて、TRUEまたはFALSEの結果が戻ります

p_one_punctuation_err

パスワードが句読記号を1文字以上含むことという要件を満たすかどうかに基づいて、TRUEまたはFALSEの結果が戻ります

p_one_upper_err

パスワードが大文字を1文字以上含むことという要件を満たすかどうかに基づいて、TRUEまたはFALSEの結果が戻ります

p_one_lower_err

パスワードが小文字を1文字以上含むことという要件を満たすかどうかに基づいて、TRUEまたはFALSEの結果が戻ります

p_not_like_username_err

パスワードがユーザー名を含まないことという要件を満たすかどうかに基づいて、TRUEまたはFALSEの結果が戻ります

p_not_like_workspace_name_err

パスワードがワークスペース名を含まないことという要件を満たすかどうかに基づいて、TRUEまたはFALSEの結果が戻ります

p_not_like_words_err

パスワードが指定された単純な単語を含まないことという要件を満たすかどうかに基づいて、TRUEまたはFALSEの結果が戻ります

p_not_reusable_err

パスワードがパスワード履歴ルールに基づいて再利用できるかどうかに基づいて、TRUEまたはFALSEの結果が戻ります

次の例に、STRONG_PASSWORD_CHECKプロシージャを使用する方法を示します。このプロシージャは、ユーザーSOMEBODYの新しいパスワードfooが、Oracle Application Expressのサイト管理者によって定義されたすべてのパスワードの強度要件を満たしていることをチェックします。いずれかのチェックが失敗した場合(関連するOUTパラメータがTRUEを戻した場合)、この例では、関連メッセージが出力されます。たとえば、Oracle Application Expressのサイト管理者がパスワードには1つ以上の数字が必要であると定義した場合にパスワードfooがチェックされると、p_one_numeric_err OUTパラメータによってTRUEが戻され、「Password must contain at least one numeric character」というメッセージが出力されます。

DECLARE
    l_username                    varchar2(30);
    l_password                    varchar2(30);
    l_old_password                varchar2(30);
    l_workspace_name              varchar2(30);
    l_min_length_err              boolean;
    l_new_differs_by_err          boolean;
    l_one_alpha_err               boolean;
    l_one_numeric_err             boolean;
    l_one_punctuation_err         boolean;
    l_one_upper_err               boolean;
    l_one_lower_err               boolean;
    l_not_like_username_err       boolean;
    l_not_like_workspace_name_err boolean;
    l_not_like_words_err          boolean;
    l_not_reusable_err            boolean;
    l_password_history_days       pls_integer;
BEGIN
    l_username := 'SOMEBODY';
    l_password := 'foo';
    l_old_password := 'foo';
    l_workspace_name := 'XYX_WS';
    l_password_history_days := 
        apex_instance_admin.get_parameter ('PASSWORD_HISTORY_DAYS');
 
    APEX_UTIL.STRONG_PASSWORD_CHECK(
        p_username                    => l_username,
        p_password                    => l_password,
        p_old_password                => l_old_password,
        p_workspace_name              => l_workspace_name,
        p_use_strong_rules            => false,
        p_min_length_err              => l_min_length_err,
        p_new_differs_by_err          => l_new_differs_by_err,
        p_one_alpha_err               => l_one_alpha_err,
        p_one_numeric_err             => l_one_numeric_err,
        p_one_punctuation_err         => l_one_punctuation_err,
        p_one_upper_err               => l_one_upper_err,
        p_one_lower_err               => l_one_lower_err,
        p_not_like_username_err       => l_not_like_username_err,
        p_not_like_workspace_name_err => l_not_like_workspace_name_err,
        p_not_like_words_err          => l_not_like_words_err,
        p_not_reusable_err            => l_not_reusable_err);

    IF l_min_length_err THEN
        htp.p('Password is too short');
    END IF;
 
    IF l_new_differs_by_err THEN
        htp.p('Password is too similar to the old password');
    END IF;
 
    IF l_one_alpha_err THEN
        htp.p('Password must contain at least one alphabetic character');
    END IF;
 
    IF l_one_numeric_err THEN
        htp.p('Password  must contain at least one numeric character');
    END IF;
 
    IF l_one_punctuation_err THEN
        htp.p('Password  must contain at least one punctuation character');
    END IF;
 
    IF l_one_upper_err THEN
        htp.p('Password must contain at least one upper-case character');
    END IF;
 
    IF l_one_lower_err THEN
        htp.p('Password must contain at least one lower-case character');
    END IF;
 
    IF l_not_like_username_err THEN
        htp.p('Password may not contain the username');
    END IF;
 
    IF l_not_like_workspace_name_err THEN
        htp.p('Password may not contain the workspace name');
    END IF;
 
    IF l_not_like_words_err THEN
        htp.p('Password contains one or more prohibited common words');
    END IF;

    IF l_not_reusable_err THEN
        htp.p('Password cannot be used because it has been used for the account within the last '||l_password_history_days||' days.');
    END IF;
END;