

# create\_verify\_function 过程
<a name="Appendix.Oracle.CommonDBATasks.CustomPassword.Standard"></a>

您可以使用 Amazon RDS 过程 `rdsadmin.rdsadmin_password_verify.create_verify_function` 创建自定义函数来验证密码。所有版本的 RDS for Oracle 都支持 `create_verify_function` 过程。

`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` | 布尔值 | true | 否 | 设置为 `true` 可禁止在密码中使用用户名。 | 
| `p_disallow_reverse` | 布尔值 | true | 否 | 设置为 `true` 则禁止在密码中使用反向用户名。 | 
| `p_disallow_db_name` | 布尔值 | true | 否 | 设置为 `true` 则禁止在密码中使用数据库或服务器名称。 | 
| `p_disallow_simple_strings` | 布尔值 | true | 否 | 设置为 `true` 则禁止将简单字符串用作密码。 | 
| `p_disallow_whitespace` | 布尔值 | false | 否 | 设置为 `true` 则禁止在密码中使用空格字符。 | 
| `p_disallow_at_sign` | 布尔值 | false | 否 | 设置为 `true` 以禁止在密码中使用 @ 字符。 | 

可以创建多个密码验证函数。

自定义函数的名称受到一些限制。您的自定义函数不能具有与现有系统对象相同的名称。名称长度不能超过 30 个字符。另外，名称必须包括以下字符串之一：`PASSWORD`、`VERIFY`、`COMPLEXITY`、`ENFORCE` 或 `STRENGTH`。

下面的示例创建一个名为 `CUSTOM_PASSWORD_FUNCTION` 的函数。此函数要求密码具有至少 12 个字符、2 个大写字符、1 个数字和 1 个特殊字符，并且该密码禁止使用 @ 字符。

```
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
```