본문 바로가기
OraclE

ORA-28002 : the password will expired within N days. 해결 방법 [펌]

by 타마마임팩트_쫀 2010. 3. 2.

[출처] 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. 퍼갈 때는 댓글 남겨주시고. 출처 밝혀주시길.