에러메시지
ORA-28001: 비밀번호가 만기
ORA-28001: the password has expired
현상
로컬 DB에 접속하려고 들어갑니다.
며칠 전에는 잘 로그인 되더니 오류가 납니다.
원인
평소처럼 오라클 DB에 접속하여고 하는데 이런 에러를 겪은 적이 있을 것 입니다.
오라클은 따로 설정해주지 않으면,
오라클 11g부터는 180일 지나고 자동으로 비밀번호가 만료됩니다.
그리고 이 기간이 지나면 해당 계정으로 로그인이 불가합니다.
그래서 만료가 되기 전에
"ORA-28002: 1 일안에 비밀번호가 만기 될 것입니다 암호를 변경하시겠습니까?"
라고 친절하게 알려줍니다.
그런데 저는 오랜만에 로컬 DB에 접속했던 터라 이미 만료가 되어 버렸네요.
해결
방법은 2가지입니다.
1. 임시로 계정 비밀번호 변경
2. 패스워드 유효기간을 영구적으로 늘리기
※ 둘 다 반드시 SYS 계정으로 접속하셔야 합니다
1. 임시로 계정 비밀번호 변경
1-1. 계정 상태 확인
SELECT USERNAME
, EXPIRY_DATE
, ACCOUNT_STATUS
FROM DBA_USERS
;
비밀번호 만료 계정은
ACCOUNT_STATUS 가 EXFIRED로 표시되어 있을 것입니다.
EXPIRY_DATE 역시 과거 날짜로 되어 있을 것입니다.
정상적인 계정은
ACCOUNT_STATUS 가 OPEN으로 표시되어있습니다.
EXPIRY_DATE는 NULL로 비어 있습니다.
1-2. 패스워드 기간 확인
SELECT RESOURCE_NAME
, LIMIT
FROM DBA_PROFILES
WHERE PROFILE = 'DEFAULT'
AND RESOURCE_NAME = 'PASSWORD_LIFE_TIME'
;
보통은 LIMIT에 180일로 표시됩니다.
1-3. 패스워드 변경
ALTER USER user_id IDENTIFIED BY new_password;
변경 후 1-1 쿼리를 실행해서 계정 정보를 확인해봅니다.
ACCOUNT_STATUS 가 OPEN으로 변경되었다면 로그인이 가능합니다.
하지만 이 방법은 다시 180일이 지나면 또 해줘야 합니다.
보안에 상관없이 유효기간을 늘리고 싶다면 2번을 수행해주세요.
2. 패스워드 유효기간을 영구적으로 늘리기
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;
계정 유효기간을 영구적으로 늘려서 비밀번호 만료를 막는 방법입니다.
보안을 생각하면 좋지 않은 방법이지만 테스트 계정으로 쓸 DB라면 괜찮을 것 같습니다.
역시 쿼리 실행 후 1-2로 가서 패스워드 기간을 확인해 봅니다.
아래와 같이 LIMIT가 UNLIMIT로 변경되어 유효기간이 영구히 늘어나게 된 것을 확인할 수 있습니다.
추가 사항
패스워드 제한 기간을 유지하고 180일을 360일로 변경하는 법
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME 360;
기존 180일 제한이 360일로 변경되어 1년에 한 번 정도 비밀번호를 변경할 수 있게 됩니다.
여러분의 DB상황에 맞게 적용하시면 될 것 같습니다.
<참조사이트>
댓글