

# パスワードを検証するためのカスタム関数の作成
<a name="Appendix.Oracle.CommonDBATasks.CustomPassword"></a>

カスタムパスワード検証関数は、以下の方法で作成できます。
+ スタンダード検証ロジックを使用するには、また `SYS` スキーマに関数を格納するには、`create_verify_function` の手順を使用します。
+ カスタム検証ロジックを使用するには、または `SYS` スキーマに関数を格納しないようにするには、`create_passthrough_verify_fcn` の手順を使用します。

# create\$1verify\$1function プロシージャ
<a name="Appendix.Oracle.CommonDBATasks.CustomPassword.Standard"></a>

Amazon RDS プロシージャ `rdsadmin.rdsadmin_password_verify.create_verify_function` を使用してパスワードを検証するには、カスタム関数を作成できます。`create_verify_function` プロシージャは、RDS for Oracle のすべてのバージョンでサポートされています。

`create_verify_function` プロシージャには以下のパラメータがあります。


****  

| パラメータ名 | データ型 | デフォルト | 必須 | 説明 | 
| --- | --- | --- | --- | --- | 
|  `p_verify_function_name`  |  varchar2  |  —  |  はい  |  カスタム関数の名前。この関数は、SYS スキーマに作成されます。この関数をユーザープロファイルに割り当てます。  | 
|  `p_min_length`  |  number  |  8  |  いいえ  |  必要な文字の最小数。  | 
|  `p_max_length`  |  number  |  256  |  いいえ  |  許容された文字の最大数。  | 
|  `p_min_letters`  |  number  |  1  |  いいえ  |  必要な文字の最小数。  | 
|  `p_min_uppercase`  |  number  |  0  |  いいえ  |  必要な大文字の最小数。  | 
|  `p_min_lowercase`  |  number  |  0  |  いいえ  |  必要な小文字の最小数。  | 
|  `p_min_digits`  |  number  |  1  |  いいえ  |  必要な数字の最小数。  | 
|  `p_min_special`  |  number  |  0  |  いいえ  |  必要な特殊文字の最小数。  | 
|  `p_min_different_chars`  |  number  |  3  |  いいえ  |  古いパスワードと新しいパスワードの間で必要な異なる文字の最小数。  | 
|  `p_disallow_username`  |  boolean  |  true  |  いいえ  |  パスワードでユーザー名を禁止するには、`true` に設定します。  | 
|  `p_disallow_reverse`  |  boolean  |  true  |  いいえ  |  パスワードで反転したユーザー名を禁止するには、`true` に設定します。  | 
|  `p_disallow_db_name`  |  boolean  |  true  |  いいえ  |  パスワードでデータベースまたはサーバー名を禁止するには、`true` に設定します。  | 
|  `p_disallow_simple_strings`  |  boolean  |  true  |  いいえ  |  パスワードで単純な文字列を禁止するには、`true` に設定します。  | 
|  `p_disallow_whitespace`  |  boolean  |  false  |  いいえ  |  パスワードで空白文字を禁止するには、`true` に設定します。  | 
|  `p_disallow_at_sign`  |  boolean  |  false  |  いいえ  |  パスワードで「@」文字の使用を禁止するには、`true` に設定します。  | 

複数のパスワード検証関数を作成できます。

カスタム関数名に制限があります。カスタム関数名を既存のシステムオブジェクト名と同じにすることはできません。30 文字を超える名前は使用できません。また、名前には文字列として `PASSWORD`、`VERIFY`、`COMPLEXITY`、`ENFORCE`、`STRENGTH` のいずれかを含める必要があります。

次の例では、`CUSTOM_PASSWORD_FUNCTION` という名前の関数を作成します。この関数のパスワードは、最低で 2 つの大文字、1 つの数字、1 つの特殊文字を含む、12 文字以上で構成する必要があります。また、「@」文字は使用できません。

```
begin
    rdsadmin.rdsadmin_password_verify.create_verify_function(
        p_verify_function_name => 'CUSTOM_PASSWORD_FUNCTION', 
        p_min_length           => 12, 
        p_min_uppercase        => 2, 
        p_min_digits           => 1, 
        p_min_special          => 1,
        p_disallow_at_sign     => true);
end;
/
```

検証関数のテキストを表示するには、`DBA_SOURCE` を照会します。次の例では、カスタムパスワード関数 `CUSTOM_PASSWORD_FUNCTION` のテキストを取得します。

```
COL TEXT FORMAT a150

  SELECT TEXT 
    FROM DBA_SOURCE 
   WHERE OWNER = 'SYS' 
     AND NAME = 'CUSTOM_PASSWORD_FUNCTION' 
ORDER BY LINE;
```

検証関数をユーザープロファイルに関連付けるには、`ALTER PROFILE` を使用します。次の例では、`CUSTOM_PASSWORD_FUNCTION` という名前の検証 PL/SQL 関数を `DEFAULT` ユーザープロファイルに関連付けます。`PASSWORD_VERIFY_FUNCTION` は Oracle プロファイルリソース名です。

```
ALTER PROFILE DEFAULT LIMIT PASSWORD_VERIFY_FUNCTION CUSTOM_PASSWORD_FUNCTION;
```

どのユーザープロファイルがどの照合機能に関連付けられているかを確認するには、`DBA_PROFILES` を照会します。次の例では、カスタム検証関数 `CUSTOM_PASSWORD_FUNCTION` に関連付けられたプロファイルを取得します。

```
SELECT * FROM DBA_PROFILES WHERE RESOURCE_NAME = 'PASSWORD_VERIFY_FUNCTION' AND LIMIT = 'CUSTOM_PASSWORD_FUNCTION';


PROFILE                    RESOURCE_NAME                     RESOURCE  LIMIT
-------------------------  --------------------------------  --------  ------------------------
DEFAULT                    PASSWORD_VERIFY_FUNCTION          PASSWORD  CUSTOM_PASSWORD_FUNCTION
```

次の例では、すべてのプロシージャとそれらに関連付けられたパスワード検証関数を取得します。

```
SELECT * FROM DBA_PROFILES WHERE RESOURCE_NAME = 'PASSWORD_VERIFY_FUNCTION';

PROFILE                    RESOURCE_NAME                     RESOURCE  LIMIT
-------------------------  --------------------------------  --------  ------------------------
DEFAULT                    PASSWORD_VERIFY_FUNCTION          PASSWORD  CUSTOM_PASSWORD_FUNCTION
RDSADMIN                   PASSWORD_VERIFY_FUNCTION          PASSWORD  NULL
```

# create\$1passthrough\$1verify\$1fcn プロシージャ
<a name="Appendix.Oracle.CommonDBATasks.CustomPassword.Custom"></a>

`create_passthrough_verify_fcn` プロシージャは、RDS for Oracle のすべてのバージョンでサポートされています。

Amazon RDS 手順 `rdsadmin.rdsadmin_password_verify.create_passthrough_verify_fcn` を使用してパスワードを検証するには、カスタム関数を作成できます。`create_passthrough_verify_fcn` プロシージャには以下のパラメータがあります。


****  

| パラメータ名 | データ型 | デフォルト | 必須 | 説明 | 
| --- | --- | --- | --- | --- | 
|  `p_verify_function_name`  |  varchar2  |  —  |  はい  |  カスタム検証関数の名前。これは、SYS 関数で作成されるラッパー関数です。検証ロジックは含まれていません。この関数をユーザープロファイルに割り当てます。  | 
|  `p_target_owner`  |  varchar2  |  —  |  はい  |  カスタム検証関数のスキーマ所有者。  | 
|  `p_target_function_name`  |  varchar2  |  —  |  はい  |  検証ロジックを含む既存のカスタム関数の名前。カスタム関数はブール値を返します。パスワードが有効の場合は `true`、無効の場合は `false` が関数より返ります。  | 

次の例では、`PASSWORD_LOGIC_EXTRA_STRONG` という名前の関数のロジックを使用するパスワード検証関数を作成します。

```
begin
    rdsadmin.rdsadmin_password_verify.create_passthrough_verify_fcn(
        p_verify_function_name => 'CUSTOM_PASSWORD_FUNCTION', 
        p_target_owner         => 'TEST_USER',
        p_target_function_name => 'PASSWORD_LOGIC_EXTRA_STRONG');
end;
/
```

検証関数をユーザープロファイルに関連付けるには、`alter profile` を使用します。次の例では、検証関数を `DEFAULT` ユーザープロファイルに関連付けています。

```
ALTER PROFILE DEFAULT LIMIT PASSWORD_VERIFY_FUNCTION CUSTOM_PASSWORD_FUNCTION;
```