PASSWORD_VERIFY_FUNCTION (암호인증)
사용자에게 새로운 암호를 할당하기 전에 암호의 타당성을 인증하는 PL/SQL 함수를 사용할 수 있다.
오라클 서버는 기본 함수를 제공하며 데이터베이스 관리자가 PL/SQL 함수를 만들 수 있다.
- 파라미터 : PASSWORD_VERIFY_FUNCTION
password의 검증 함수로 검증진행
사용자 암호를 설정하는 과정에서 단순한 문자나 숫자 등으로 암호를 설정하지 못하도록
암호를 검증하는 방법이 제공되는데,
이는 $ORACLE_HOME/rdbms/admin/utlpwdmg.sql 스크립트이다.
이 스크립트를 실행하면 VERIFY_FUNCTION 함수가 생성되고 사용자가 암호를 4자 이하로
설정하거나 사용자 ID와 암호를 같은 값으로 설정하는 경우에 에러 메시지를 표시하고
암호를 생성하지 못하도록 한다.
- VERIFY_FUNCTION_11G 함수 생성
SQL> @?/rdbms/admin/utlpwdmg.sql
또는
SQL> @"D:\app\Oracle\product\11.2.0\dbhome_1\RDBMS\ADMIN\utlpwdmg.sql"
※ utlpwdmg.sql 함수 생성 SQL을 수행시 profile 이 기본값으로 변경 되므로
VERIFYT_FUNCTION 을 사용하시려면 함수 생성 SQL을 수행 한뒤에 PROFILE을 변경 하거나
PROFILE 이 설정 되어있는 대로 사용 하시려면 utlpwdmg.sql 내용 중
ALTER PROFILE DEFAULT LIMIT
PASSWORD_LIFE_TIME 180 -- 패스워드 변경 기간 기존 암호가 유효한 기간, 11g의 기본값은 180일이다.
PASSWORD_GRACE_TIME 7 -- 암호 변경 메시지 출력날짜
PASSWORD_REUSE_TIME UNLIMITED -- 이전 암호를 다시 입력할 수 있기 전의 제한 시간을 지정
PASSWORD_REUSE_MAX UNLIMITED -- 비밀번호를 재사용할 수 있는 횟수 , 비밀번호 순환 방지
FAILED_LOGIN_ATTEMPTS 10
PASSWORD_LOCK_TIME 1 -- 계정이 잠긴 후 잠금 해제되기 전에 경과해야하는 일 수 실패한 로그인 시도가 충족된 후 계정을 잠글 시간을 지정 11g의 기본값은 하루
PASSWORD_VERIFY_FUNCTION verify_function_11G;
내용을 삭제 또는 주석처리 후 utlpwdmg.sql 파일 실행하면 profile이 기본값으로 변경 되지 않습니다.
10g는 기본이 복잡도가 4자 11g는 8자 입니다.
10g에서 복잡도를 8자로 하려면 utlpwdmg.sql 쿼리 안에서 내용을 변경 해줘야 합니다.
utlpwdmg.sql
==10g================================================================
-- Check for the minimum length of the password
IF length(password) < 4 THEN
raise_application_error(-20001, 'Password length less than 4');
END IF;
=====================================================================
utlpwdmg.sql
==11g================================================================
-- Check for the minimum length of the password
IF length(password) < 8 THEN
raise_application_error(-20001, 'Password length less than 8');
END IF;
=====================================================================
- VERIFY_FUNCTION 설정
SQL> ALTER PROFILE DEFAULT LIMIT PASSWORD_VERIFY_FUNCTION verify_function; -- 10g
SQL> ALTER PROFILE DEFAULT LIMIT PASSWORD_VERIFY_FUNCTION verify_function_11G; -- 11g
[VERIFY_FUNCTION 설정을 원래대로]
SQL> ALTER PROFILE DEFAULT LIMIT PASSWORD_VERIFY_FUNCTION NULL;
- FAILED_LOGIN_ATTEMPTS : 로그인 실패 가능 횟수
- PASSWORD_LOCK_TIME : 암호가 사용기간 만료되어 계정이 잠겨진 채로 남아 있었던 일 수 (단위:일)
- PASSWORD_LIFE_TIME : 암호의 만료 기간을 일 수로 나타냄 (단위:일)
- PASSWORD_GRACE_TIME : 암호의 사용기간이 만료된 후 첫 번째 성공적인 로그인부터 암호변경을 할 때까지의 유예기간 (단위:일)
- PASSWORD_REUSE_TIME : 이전 암호가 재사용 가능할 때까지의 일 수 (단위:일)
- PASSWORD_REUSE_MAX : 이전 암호가 재사용 가능한 최대 횟수
- PASSWORD_VERIFY_FUNCTION : 암호를 할당하기 전 복잡성 검사를 수행할 PL/SQL 함수
*> 암호 복잡성 검증 함수
- 암호의 최소 길이는 4자
※10g는 4자, 11g는 8자 기본값, 변경 가능
- 암호는 사용자 ID와 달라야 함
- 암호는 적어도 하나 이상의 영문자, 숫자, 구두점으로 구성
- 암호는 welcome, account, database, user와 같이 단순한 단어와 달라야 함
- 암호는 적어도 이전 암호와 세 자 이상 달라야 함
- 프로시저는 수행 성공시 TRUE, 실패시 FALSE 값 반환
- 프로시저에 예외 발생시 에러가 반환되고 ALTER USER 또는 CREATE USER 명령은 종료
- 프로시저에 오류 발생시 오류 메시지가 반환되고 ALTER USER 또는 CREATE USER 명령은 종료
- 프로시저는 SYS 소유
== VERIFY_FUNCTION 적용
SQL>
SQL> set line200 pages999
SQL> col profile for a20
SQL> col resource_name for a40
SQL> col resource_type for a15
SQL> col limit for a20
SQL> select * from dba_profiles;
PROFILE RESOURCE_NAME RESOURCE_TYPE LIMIT
-------------------- ---------------------------------------- --------------- --------------------
DEFAULT COMPOSITE_LIMIT KERNEL UNLIMITED
DEFAULT SESSIONS_PER_USER KERNEL UNLIMITED
DEFAULT CPU_PER_SESSION KERNEL UNLIMITED
DEFAULT CPU_PER_CALL KERNEL UNLIMITED
DEFAULT LOGICAL_READS_PER_SESSION KERNEL UNLIMITED
DEFAULT LOGICAL_READS_PER_CALL KERNEL UNLIMITED
DEFAULT IDLE_TIME KERNEL UNLIMITED
DEFAULT CONNECT_TIME KERNEL UNLIMITED
DEFAULT PRIVATE_SGA KERNEL UNLIMITED
DEFAULT FAILED_LOGIN_ATTEMPTS PASSWORD 10
DEFAULT PASSWORD_LIFE_TIME PASSWORD 180
DEFAULT PASSWORD_REUSE_TIME PASSWORD UNLIMITED
DEFAULT PASSWORD_REUSE_MAX PASSWORD UNLIMITED
DEFAULT PASSWORD_VERIFY_FUNCTION PASSWORD VERIFY_FUNCTION_11G
DEFAULT PASSWORD_LOCK_TIME PASSWORD 1
DEFAULT PASSWORD_GRACE_TIME PASSWORD 7
## 11g VERIFY_FUNCTION 요약 ##
# 함수 생성
@?/rdbms/admin/utlpwdmg.sql
# profile에 VERIFY_FUNCTION 적용
SQL> ALTER PROFILE DEFAULT LIMIT PASSWORD_VERIFY_FUNCTION verify_function; -- 10g
SQL> ALTER PROFILE DEFAULT LIMIT PASSWORD_VERIFY_FUNCTION verify_function_11G; -- 11g
# 적용시 변경되는 프로파일 항목
FAILED_LOGIN_ATTEMPTS 10
부정확한 패스워드 입력을 10회 하면 account의 상태가 locked 상태로 변경되며, 해당 account 로는 dbms 접속 불가
PASSWORD_LIFE_TIME 180
패스워드의 수명을 나타내며 단위는 '일' (180일, 6개월을 의미)
180일 이내에 패스워드를 변경하지 않으면 계정에 접속이 불가능해 진다. (패스워드의 유효기간이 지났기 때문에) 단, account 상태를 locked 로 변경하지는 않는다.
180일 이후에 password_grace_time 내에 패스워드를 변경하면 문제 없이 해당 account 를 사용할 수 있다.
PASSWORD_VERIFY_FUNCTION VERIFY_FUNCTION_11G
password 를 검증하는 함수를 이용
사용자가 암호를 4자 이하로 설정하거나 사용자 ID와 암호를 같은 값으로 설정하는 경우에 에러 메시지를 표시하고 암호를 생성하지 못하도록 한다.
PASSWORD_LOCK_TIME 1
login 허용횟수를 지나면 password 를 locked 시키는 기간을 나타내며 단위는 '일' (1일이 지나면 풀린다는 의미)
PASSWORD_GRACE_TIME 7
password_life_time 수명이 지난 후 7일이 지나기 전에 비밀번호를 변경하지 않으면 해당 account의 상태가 locked 상태로 변경되며, 해당 account 로는 dbms 접속 불가
# 복잡도 설정 변경, VERIFY_FUNCTION 설정 방법
1. cd $ORACLE_HOME/rdbms/admin 경로에 있는 utlpwdmg.sql 라는 파일을 수정
1) 최소 PASSWORD 갯수 설정
-- Check for the minimum length of the password
IF length(password) < 8 THEN
raise_application_error(-20001, 'Password length less than 8');
END IF;
-- 위 값에서 8 이라고 되어있는 값이 최소 PASSWORD 글자수를 의미 하므로 10 으로 변경 시켜줘야 합니다.
변경 후
-- Check for the minimum length of the password
IF length(password) < 10 THEN
raise_application_error(-20001, 'Password length less than 10');
END IF;
-- 이렇게 수정하면 최소 PASSWORD 글자수 가 10개로 변경됩니다.
2) 9i, 10g 에서의 VERIFY_FUNCTION 사용시 특수문자 포함 기능 OFF
※ 11g 에서 사용되는 복잡도 함수인 VERIFY_FUNCTION_11G 에서는 대소문자, 숫자 만 복잡도에 포함
9i, 10g 에서 사용되는 복잡도 함수인 VERIFY_FUNCTION 에서는 대소문자, 숫자, 특수문자 가 복잡도에 포함
그러므로 VERIFY_FUNCTION 을 사용하는 9i, 10g 환경에서는 특수문자 포함 기능을 OFF 시켜줘야 함.
만약 11g 환경에서 VERIFY_FUNCTION 을 사용하게되는 상황이 오게되도 특수문자 포함 기능을 OFF 시켜야 함.
-- 3. Check for the punctuation
<<findpunct>>
ispunct:=TRUE; -- 특수문자 포함 기능 off 하려면 값을 TRUE로 변경(기본값:FALSE)
FOR i IN 1..length(punctarray) LOOP
FOR j IN 1..m LOOP
IF substr(password,j,1) = substr(punctarray,i,1) THEN
ispunct:=TRUE;
GOTO endsearch;
END IF;
END LOOP;
END LOOP;
IF ispunct = FALSE THEN
raise_application_error(-20003, 'Password should contain at least one \
digit, one character and one punctuation');
3) utlpwdmg.sql 수행시 profile 값 초기화로 인한 기존 계정 expired 장애 방지
utlpwdmg.sql 내용 중 하단에 위치
ALTER PROFILE DEFAULT LIMIT
PASSWORD_LIFE_TIME 180
PASSWORD_GRACE_TIME 7
PASSWORD_REUSE_TIME UNLIMITED
PASSWORD_REUSE_MAX UNLIMITED
FAILED_LOGIN_ATTEMPTS 10
PASSWORD_LOCK_TIME 1
PASSWORD_VERIFY_FUNCTION verify_function_11G;
또는
ALTER PROFILE DEFAULT LIMIT
PASSWORD_LIFE_TIME 60
PASSWORD_GRACE_TIME 10
PASSWORD_REUSE_TIME 1800
PASSWORD_REUSE_MAX UNLIMITED
FAILED_LOGIN_ATTEMPTS 3
PASSWORD_LOCK_TIME 1/1440
PASSWORD_VERIFY_FUNCTION verify_function;
내용을 주석처리 또는 내용 을 지우셔야 합니다.
위 내용이 주석처리 되지 않거나 남아있는경우에서 utlpwdmg.sql 쿼리를 수행시
기존에 있던 default profile 이 전부 초기값으로 변경되면서 기존에 사용되던 계정이 expired 상태로 변경되는 장애가
발생할 수 있습니다.
반드시 ALTER PROFILE 내용을 주석처리 또는 내용 삭제를 해주셔야 합니다.
2. sysdba 접속하여 utlpwdmg.sql 스크립트 수행
- DB접속
$sqlplus / as sysdba
- 복잡도 함수 생성
SQL>@utlpwdmg.sql
Function created.
- 9i, 10g VERIFY_FUNCTION 설정
SQL>ALTER PROFILE DEFAULT LIMIT PASSWORD_VERIFY_FUNCTION VERIFY_FUNCTION;
- 11g VERIFY_FUNCTION 설정
SQL>ALTER PROFILE DEFAULT LIMIT PASSWORD_VERIFY_FUNCTION VERIFY_FUNCTION_11G;
- 적용 되었는지 확인
SQL>set line200 pages999
col limit for a20
select * from dba_profiles;
- VERIFY_FUNCTION 설정 전
PROFILE RESOURCE_NAME RESOURCE LIMIT
------------------------------ -------------------------------- -------- --------------------
DEFAULT COMPOSITE_LIMIT KERNEL UNLIMITED
DEFAULT SESSIONS_PER_USER KERNEL UNLIMITED
DEFAULT CPU_PER_SESSION KERNEL UNLIMITED
DEFAULT CPU_PER_CALL KERNEL UNLIMITED
DEFAULT LOGICAL_READS_PER_SESSION KERNEL UNLIMITED
DEFAULT LOGICAL_READS_PER_CALL KERNEL UNLIMITED
DEFAULT IDLE_TIME KERNEL UNLIMITED
DEFAULT CONNECT_TIME KERNEL UNLIMITED
DEFAULT PRIVATE_SGA KERNEL UNLIMITED
DEFAULT FAILED_LOGIN_ATTEMPTS PASSWORD 10
DEFAULT PASSWORD_LIFE_TIME PASSWORD 180
DEFAULT PASSWORD_REUSE_TIME PASSWORD UNLIMITED
DEFAULT PASSWORD_REUSE_MAX PASSWORD UNLIMITED
DEFAULT PASSWORD_VERIFY_FUNCTION PASSWORD NULL
DEFAULT PASSWORD_LOCK_TIME PASSWORD 1
DEFAULT PASSWORD_GRACE_TIME PASSWORD 7
- 9i, 10g 설정시
PROFILE RESOURCE_NAME RESOURCE LIMIT
------------------------------ -------------------------------- -------- --------------------
DEFAULT COMPOSITE_LIMIT KERNEL UNLIMITED
DEFAULT SESSIONS_PER_USER KERNEL UNLIMITED
DEFAULT CPU_PER_SESSION KERNEL UNLIMITED
DEFAULT CPU_PER_CALL KERNEL UNLIMITED
DEFAULT LOGICAL_READS_PER_SESSION KERNEL UNLIMITED
DEFAULT LOGICAL_READS_PER_CALL KERNEL UNLIMITED
DEFAULT IDLE_TIME KERNEL UNLIMITED
DEFAULT CONNECT_TIME KERNEL UNLIMITED
DEFAULT PRIVATE_SGA KERNEL UNLIMITED
DEFAULT FAILED_LOGIN_ATTEMPTS PASSWORD 10
DEFAULT PASSWORD_LIFE_TIME PASSWORD 180
DEFAULT PASSWORD_REUSE_TIME PASSWORD UNLIMITED
DEFAULT PASSWORD_REUSE_MAX PASSWORD UNLIMITED
DEFAULT PASSWORD_VERIFY_FUNCTION PASSWORD VERIFY_FUNCTION
DEFAULT PASSWORD_LOCK_TIME PASSWORD 1
DEFAULT PASSWORD_GRACE_TIME PASSWORD 7
- 11g 설정시
PROFILE RESOURCE_NAME RESOURCE LIMIT
------------------------------ -------------------------------- -------- --------------------
DEFAULT COMPOSITE_LIMIT KERNEL UNLIMITED
DEFAULT SESSIONS_PER_USER KERNEL UNLIMITED
DEFAULT CPU_PER_SESSION KERNEL UNLIMITED
DEFAULT CPU_PER_CALL KERNEL UNLIMITED
DEFAULT LOGICAL_READS_PER_SESSION KERNEL UNLIMITED
DEFAULT LOGICAL_READS_PER_CALL KERNEL UNLIMITED
DEFAULT IDLE_TIME KERNEL UNLIMITED
DEFAULT CONNECT_TIME KERNEL UNLIMITED
DEFAULT PRIVATE_SGA KERNEL UNLIMITED
DEFAULT FAILED_LOGIN_ATTEMPTS PASSWORD 10
DEFAULT PASSWORD_LIFE_TIME PASSWORD 180
DEFAULT PASSWORD_REUSE_TIME PASSWORD UNLIMITED
DEFAULT PASSWORD_REUSE_MAX PASSWORD UNLIMITED
DEFAULT PASSWORD_VERIFY_FUNCTION PASSWORD VERIFY_FUNCTION_11G
DEFAULT PASSWORD_LOCK_TIME PASSWORD 1
DEFAULT PASSWORD_GRACE_TIME PASSWORD 7
-- 12c
Resource NameLimitDescription
PASSWORD_LIFE_TIME | 180 | Sets the number of days the user can use his current password. |
PASSWORD_GRACE_TIME | 7 | Sets the number of days that a user has to change his password before it expires. |
PASSWORD_REUSE_TIME | UNLIMITED | Sets the number of days before which a password cannot be reused. |
PASSWORD_REUSE_MAX | UNLIMITED | Sets the number of password changes required before the current password can be reused. |
FAILED_LOGIN_ATTEMPTS | 10 | Specify the number of failed attempts to log in to the user account before the account is locked. |
PASSWORD_LOCK_TIME | 1 | Specify the number of days an account will be locked after the specified number of consecutive failed login attempts. |
PASSWORD_VERIFY_FUNCTION | ora12c_verify_function | PL/SQL password complexity verification function to enforce password complexity. |
Resource NameLimit
PASSWORD_LIFE_TIME | 60 |
PASSWORD_REUSE_TIME | 365 |
PASSWORD_REUSE_MAX | 5 |
FAILED_LOGIN_ATTEMPTS | 3 |
PASSWORD_VERIFY_FUNCTION | ora12c_strong_verify_function |
국방부 권장
Resource NameLimit
PASSWORD_LIFE_TIME | 60 |
PASSWORD_REUSE_TIME | 365 |
PASSWORD_REUSE_MAX | 5 |
FAILED_LOGIN_ATTEMPTS | 3 |
PASSWORD_VERIFY_FUNCTION | ora12c_strong_verify_function |
이 기능은 새로운 12c 비밀번호 확인 기능입니다. verify_function_11G와 유사하고 약간 더 강력한 암호 복잡성을 적용합니다.
- Password at least 8 characters
- at least 1 letters
- at least 1 digits
- must not contain database name
- must not contain user name or reverse user name
- must not contain oracle
- must not be too simple like welcome1
- password must differ by at least 3 characters from the old password
ora12c_strong_verify_function
This function is provided to give stronger password complexity. It considers recommendations of the Department of Defense Database (STIG) with the following limits.
- Password at least 9 characters
- at least 2 capital letters
- at least 2 small letters
- at least 2 digits
- at least 2 special characters
- password must differ by at least 4 characters from the old password
'Oracle > Admin' 카테고리의 다른 글
[Oracle] OCR VIGING DISK 재구성 (0) | 2024.08.14 |
---|---|
[Oracle]GPnP(grid plug n play) (0) | 2024.08.14 |
[Oracle]ORA-08104 (0) | 2024.08.01 |
[Oracle] Row Size 구하기 (2) | 2024.07.24 |
[Oracle] ora.diskmon offline (0) | 2024.07.15 |