오라클 User의 PASSWORD 관련 설정들을 변경하여 보자.
기본적으로 오라클에서는 이와 관련된 SCRIPT가 내장되어 있다.
C:\oracle\product\10.1.0\db_1\RDBMS\ADMIN\utlpwdmg.sql
CREATE OR REPLACE FUNCTION verify_function (username varchar2, password varchar2, old_password varchar2) RETURN boolean IS n boolean; m integer; differ integer; isdigit boolean; ischar boolean; ispunct boolean; digitarray varchar2(20); punctarray varchar2(25); chararray varchar2(52);
BEGIN digitarray:= '0123456789'; chararray:= 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; punctarray:='!"#$%&()``*+,-/:;<=>?_';
-- Check if the password is same as the username IF NLS_LOWER(password) = NLS_LOWER(username) THEN raise_application_error(-20001, 'Password same as or similar to user'); END IF;
-- Check for the minimum length of the password IF length(password) < 4 THEN raise_application_error(-20002, 'Password length less than 4'); END IF;
-- Check if the password is too simple. A dictionary of words may be -- maintained and a check may be made so as not to allow the words -- that are too simple for the password. IF NLS_LOWER(password) IN ('welcome', 'database', 'account', 'user', 'password', 'oracle', 'computer', 'abcd') THEN raise_application_error(-20002, 'Password too simple'); END IF;
-- Check if the password contains at least one letter, one digit and one -- punctuation mark. -- 1. Check for the digit isdigit:=FALSE; m := length(password); FOR i IN 1..10 LOOP FOR j IN 1..m LOOP IF substr(password,j,1) = substr(digitarray,i,1) THEN isdigit:=TRUE; GOTO findchar; END IF; END LOOP; END LOOP; IF isdigit = FALSE THEN raise_application_error(-20003, 'Password should contain at least one digit, one character and one punctuation'); END IF; -- 2. Check for the character <<findchar>> ischar:=FALSE; FOR i IN 1..length(chararray) LOOP FOR j IN 1..m LOOP IF substr(password,j,1) = substr(chararray,i,1) THEN ischar:=TRUE; GOTO findpunct; END IF; END LOOP; END LOOP; IF ischar = FALSE THEN raise_application_error(-20003, 'Password should contain at least one \ digit, one character and one punctuation'); END IF; -- 3. Check for the punctuation <<findpunct>> ispunct:=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'); END IF;
<<endsearch>> -- Check if the password differs from the previous password by at least -- 3 letters IF old_password IS NOT NULL THEN differ := length(old_password) - length(password);
IF abs(differ) < 3 THEN IF length(password) < length(old_password) THEN m := length(password); ELSE m := length(old_password); END IF;
differ := abs(differ); FOR i IN 1..m LOOP IF substr(password,i,1) != substr(old_password,i,1) THEN differ := differ + 1; END IF; END LOOP;
IF differ < 3 THEN raise_application_error(-20004, 'Password should differ by at \ least 3 characters'); END IF; END IF; END IF; -- Everything is fine; return TRUE ; RETURN(TRUE); END; /
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME 60 --암호유효기간 60일 PASSWORD_GRACE_TIME 10 --암호를 변경하지 않을시 계속 재촉하는 기간
PASSWORD_REUSE_TIME 1800 --1800일 동안 예전에 사용했던 값을 사용할 수 없다. PASSWORD_REUSE_MAX UNLIMITED --여기에 값을 주게 되면 예전에 사용되었던 passwd의 갯수를 기억하고 그 갯수만큼은 사용할 수 없게한다. --이 둘의 값은 양자택일로서 하나가 언리미티드면 하나는 숫자값이어야 한다.
FAILED_LOGIN_ATTEMPTS 3 --로긴이 3번 틀리면 새로 접속해야 한다. PASSWORD_LOCK_TIME 1/1440 --로긴이 틀려 새로 접속해야할 때 1/1440일(=1분) 동안 세션이 잠긴다. PASSWORD_VERIFY_FUNCTION verify_function; |
이제 sys에서 스크립트를 실행한다.
SQL>@C:\oracle\product\10.1.0\db_1\RDBMS\ADMIN\utlpwdmg.sql
이제 실습을 위해 SYS에서 임의의 사용자(SCOTT) PW를 만료시킨다.
ALTER USER SCOTT PASSWORD EXPIRE;
이제 SCOTT으로 접속을 시도하게 되면 password를 변경하란 메시지가 출력된다.
또한 새롭게 생성될 passwd 규칙이 위 스크립트에서 기본 4글자에 영/숫/특 기호의 조합이 이루어져야 되며,
암호 입력에 3번이상 오류가 발생시, 계정이 자동으로 잠기므로
sys에서 계정의 잠금을 풀어준다.
ALTER USER SCOTT ACCOUNT UNLOCK;
(다른 실습들은 SKIP)
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
실습을 원상태로 돌릴려면 아래의 SQL문을 실행한다.
ALTER PROFILE "DEFAULT"
LIMIT FAILED_LOGIN_ATTEMPTS
UNLIMITED PASSWORD_LOCK_TIME
UNLIMITED PASSWORD_GRACE_TIME
UNLIMITED PASSWORD_LIFE_TIME
UNLIMITED PASSWORD_REUSE_TIME
UNLIMITED PASSWORD_VERIFY_FUNCTION NULL;
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
설정 내용들을 확인하기 위해서는
SELECT *
FROM DBA_PROFILES
WHERE PROFILE='DEFAULT';
을 통해 설정 값들을 확인 및 변경할 수 있다.
'Database' 카테고리의 다른 글
오라클 주요 간단 정리 (0) | 2009.05.13 |
---|---|
Backup Solution (0) | 2009.04.30 |
오라클 내장 주요 sql 스크립트 (0) | 2009.04.26 |
오라클 예약어 (0) | 2009.04.26 |
CHAPTER25. BACKUP & RECOVERY (0) | 2009.04.21 |
Chapter16. Oracle OS authentication User create (0) | 2009.04.21 |
CHAPER 10 ORACLE TEMPORARY TABLE (0) | 2009.04.20 |
chaper 9 oracle extent & segment 정보확인 (0) | 2009.04.20 |
TABLESPACE의 생성 및 관리 (0) | 2009.04.20 |
테이블스페이스의 추가 및 변경 (0) | 2009.04.17 |