[출처] http://refill.egloos.com/4841310
Profile을 확인해보자.
SQL> select profile from dba_users where username = 'aaaa';
PROFILE
---------
DEFAULT
그럼 'PASSWORD_GRACE_TIME', 'PASSWORD_LIFE_TIME'이 DEFAULT Profile에서 어떻게 설정되어있는지 보자.
SQL> select limit, resource_name from dba_profiles where resource_name
in ('PASSWORD_GRACE_TIME', 'PASSWORD_LIFE_TIME', 'PASSWORD_REUSE_MAX',
PASSWORD_REUSE_TIME') and PROFILE = (select profile from dba_users where
username = 'aaaa');
LIMIT RESOURCE_NAME
----------- ------------------------
180 PASSWORD_LIFE_TIME
UNLIMITED PASSWORD_REUSE_TIME
UNLIMITED PASSWORD_REUSE_MAX
7 PASSWORD_GRACE_TIME
PASSWORD_REUSE_TIME과 PASSWORD_REUSE_MAX는 서로 관련이 있다.
PASSWORD_REUSE_TIME는 패스워드가 재사용되지 못하는 기간을 정의한다.
PASSWORD_REUSE_MAX는 현재 패스워드가 재사용되기 전에 몇 번이나 패스워드를 바꿀 것을 요청하는지를 정의한다.
이번 문제를 처리하기 위해서는 PASSWORD_LIFE_TIME과 PASSWORD_GRACE_TIME에만 신경쓰면 된다.
DEFAULT Profile의 PASSWORD_LIFE_TIME는 같은 패스워드를 인증에 사용할 수 있는 날 수를 정의한다.
PASSWORD_GRACE_TIME은 경고가 발생한 날부터 로그인이 가능한 유예 기간의 날 수를 정의한다.
패스워드가 유예 기간동안 변경되지 않는다면 패스워드는 소멸된다.
aaaa 사용자의 PASSWORD_GRACE_TIME 값은 7로 설정되어 있다.
그래서 ORA-28002 경고가 발생하지만 여전히 데이터베이스에 로그온 할 수가 있다.
유예기간 동안 패스워드를 변경하지 않는다면 패스워드는 소멸될 것이고 좀 더 지나면 접속이 거부될 것이다.
PASSWORD_GRACE_TIME 값을 설정하지 않는다면 UNLIMITED가 기본값이 되고 데이터베이스에서 경고는 발생하지만 사용자는 무기한으로 접속이 가능해진다.
보통 PASSWORD_LIFE_TIME이 계정이 생성된 날짜와 연관되어 있다고 잘못 해석한다. 실제로 PASSWORD_LIFE_TIME은 계정의 패스워드가 변경된 시간이나 패스워드가 변경되지 않았다면 계정이 만들어진 시간을 측정해서 Profile을 제한한다.
계정 생성 시간과 패스워드 변경 시간은 USER$.CTIME과 USER$.PTIME에서 볼 수 있다.
SQL> select ctime, ptime from sys.user$ where name = 'aaaa';
CTIME PTIME
---------- -----------
14-OCT-07 14-OCT-07
dba_users 뷰에서도 계정이 생성된 시간을 볼 수 있다.
SQL> select created from dba_users where username = 'aaaa';
CREATED
----------
14-OCT-07
자.. 이제 현재 시간을 보자.
SQL> select sysdate from dual;
SYSDATE
----------
09-FEB-09
패스워드를 변경한 시간과 현재 시간의 간격이 PASSWORD_LIFE_TIME를 훌쩍 넘겨버렸다.
자 이제 PASSWORD_GRACE_TIME 설정에 따라 7일간만 aaaa 사용자로 데이터베이스에 접속할 수 있다. 물론 경고는 발생한다.
이 문제의 해결 방법
-----------------------
가. 패스워드를 바꾼다.
일시적으로 이 에러를 단지 피하길 원한다면 패스워드를 바꾸면 된다.
$ sqlplus aaa/bbb
SQL> password
Old password:
New password:
Retype new password:
Password changed
SQL> conn aaaa/ccc!12
Connected
이제 변경시간을 확인해보자.
SQL> select ctime, ptime from sys.user$ where name = 'aaaa';
CTIME PTIME
---------- ----------
14-OCT-07 09-FEB-09
이건 일시적인 방법이고.. 180일 후에는 또 같은 메시지를 볼 수 있다.
나. 사용자의 Profile 중 PASSWORD_LIFE_TIME resource를 바꾼다.
aaaa사용자의 DEFAULT Profile 중 PASSWORD_LIFE_TIME resource를 변경하는 영구적인 방법.
SQL> select profile from dba_users where username = 'aaaa';
PROFILE
----------
DEFAULT
다음과 같이 처리하면 위의 에러를 다시는 보지 않을 것이다.
SQL> alter profile default limit PASSWORD_LIFE_TIME UNLIMITED;
Profile altered.
끝.
ps. 퍼갈 때는 댓글 남겨주시고. 출처 밝혀주시길.
'OraclE' 카테고리의 다른 글
User & Privilege & Role [펌] (0) | 2010.04.06 |
---|---|
TABLESPACE, SEGMENT, EXTENT [펌] (0) | 2010.03.04 |
(10G) TRANSACTION ROLLBACK을 하는 문장을 찾는 방법과 ROLLBACK 시간 예상하기 (0) | 2010.02.23 |
scott 생성 (0) | 2010.02.17 |
Oracle(오라클) [Technical Architecture] - Partition Table(파티션 테이블) [펌] (0) | 2010.02.17 |