

# 사용자 지정 암호 확인 함수 생성
<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`  |  숫자  |  8  |  아니요  |  필요한 최소 문자 수입니다.  | 
|  `p_max_length`  |  숫자  |  256  |  아니요  |  허용되는 최대 문자 수입니다.  | 
|  `p_min_letters`  |  숫자  |  1  |  아니요  |  필요한 최소 글자 수입니다.  | 
|  `p_min_uppercase`  |  숫자  |  0  |  아니요  |  필요한 최소 대문자 수입니다.  | 
|  `p_min_lowercase`  |  숫자  |  0  |  아니요  |  필요한 최소 소문자 수입니다.  | 
|  `p_min_digits`  |  숫자  |  1  |  아니요  |  필요한 최소 자릿수 숫자입니다.  | 
|  `p_min_special`  |  숫자  |  0  |  아니요  |  필요한 최소 특수문자 수입니다.  | 
|  `p_min_different_chars`  |  숫자  |  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`  |  boolean  |  false  |  아니요  |  `true`로 설정되어 암호에 공백 문자를 사용할 수 없습니다.  | 
|  `p_disallow_at_sign`  |  boolean  |  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
```

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