본문 바로가기
SERVER/DATABASE

[ORACLE] ORA-28002 해결방법 (the password will expire within n days Error)

by 익익이 2024. 4. 1.
728x90
반응형

 

오라클 계정 만료가 n일 남았다고?

 

계정 만료?

오라클 계정의 비밀번호 주기가 180일이 기본이고, 만료일에 대한 알림이었다. 해당 계정이 있는 오라클 접속부터 비밀번호 주기 변경까지 차례대로 진행해 보겠다.

 

 

리눅스 오라클 SQLPLUS 실행 및 sysdba 접속

먼저, sqlplus 를 실행한다.

su oracle
## su oracle 이후 암호 입력 // ssh 계정 암호
sqlplus "/as sysdba"

 

접속이 완료 된 모습
접속이 완료 된 모습. SQL 사용이 가능해졌다.

 

생성된 계정 비밀번호 생명주기 설정 확인

다음은 계정이 생성될 때 설정을 볼 수 있는 SQL 문이며 PASSWORD 에 대한 생명 주기를 알 수 있다

SELECT RESOURCE_NAME, LIMIT FROM DBA_PROFILES WHERE PROFILE = 'DEFAULT' AND RESOURCE_TYPE = 'PASSWORD';

password 생명 주기
password 생명 주기

 

생명주기 dbeaver 확인
같은 SQL 문으로 DBeaver 에서 확인한 모습.

 

계정 비밀번호 생명주기 변경

제목과 같이 ORA-28002: the password will expire within n days Error 에러코드가 뜬다면, 계정에 대한 만료일이 n일 밖에 안 남았다는 뜻이고, 만료일이 지나면 자동으로 계정이 잠긴다. 해당 계정에 대한 현재 상태를 알고 싶다면 다음과 같이 입력한다.

select * from dba_users where username = '계정이름';

SQL 문으로 DBeaver 에서 확인한 모습

ACCOUNT_STATUS  EXPIRY_DATE 컬럼을 확인해 보면,

ACCOUNT_STATUS 는 현재 계정 상태가 열려있는 지, 닫혀 있는 지 확인할 수 있는 컬럼이고, EXPIRY_DATE 는현재 계정에 대한 만료 날짜가 언제까지인 지 확인할 수 있는 컬럼이다.

사실 오라클에서 계정만료에 대한 에러 코드가 뜬다면, ① 해당 계정에 대한 비밀번호를 바꿔주면 해결 되고, 저런 알림을 주기적으로 보고 싶지 않은 경우에 ② 생명주기 변경 후, 해당 계정에 대한 비밀번호를 바꿔주면 된다. 두 가지의 해결 방법이 있으니 둘 중 원하는 방법으로 하면 된다.

 

① 계정에 대한 비밀번호 변경 방법

위에서 확인했듯, 기본 주기가 180일이기 때문에 만료가 다가오는 계정에 대한 비밀번호를 변경해주면, 자동적으로 180일 기준에 맞춰 EXPIRY_DATE 컬럼의 값이 변경된다. 

ALTER USER 계정이름 identified BY 계정비밀번호;
ALTER USER TEST identified BY testTest;

*주의*
오라클은 계정에 대한 대소문자 구분이 없지만, 
비밀번호에 대한 대소문자 구분은 있다. 비밀번호를 변경할 때에 대소문자 구분을 하니 조심하자.

 

② 생명주기 변경 후, 해당 계정에 대한 비밀번호 변경

주기적으로 (기본 180일 또는 설정한 일자) 마다 만료일에 대한 알림이 뜨는게 싫다면, 위에서 확인한 PASSWORD 의 생명주기를 UNLIMITED 로 변경하고 처럼 비밀번호를 변경해주면 된다.

아래 SQL 문으로 생명주기를 UNLIMITED 로 변경 후,

ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;

 

계정에 대한 비밀번호를 변경하고,

ALTER USER 계정이름 identified BY 계정비밀번호;
ALTER USER TEST identified BY testTest;

 

dba_users 에서 확인 시

select * from dba_users where username = '계정이름';

EXPIRY_DATE 컬럼이 변경된 것을 알 수 있다.

① 계정에 대한 비밀번호 변경 방법을 사용했다면, EXPIRY_DATE 가 설정된 날짜(기본 180일)에 맞게 늘어난 걸 확인할 수 있을 것이고 ② 생명주기 변경 후, 해당 계정에 대한 비밀번호 변경을 사용했다면, EXPIRY_DATE 가 UNLIMITED로 변경된 것을 확인할 수 있을 것이다.

이런 식으로 해주면 ORA-28002 에 대한 에러 해결을 할 수 있다. 

위와 같은 과정을 지난 후, SQLPLUS 접속을 종료한다.

exit

SQL 접속 종료
접속 종료된 모습

 

 

+) 추가

[ORACLE] ORA-28000: the account is locked : 계정이 잠겼습니다.

위와 같은 상황(ORA-28002)을 무시하고 있다보면 계정이 자동적으로 잠길 것이다. 해당 계정에 대한 잠금 해제는 위에 방법보다 훨씬 쉽게 SQL 한 줄이면 된다! 먼저, 계정의 잠김 상태를 확인해 본다.

# 전체 확인
select username, account_status, lock_date from dba_users; 

# 특정 계정 확인
select username, account_status, lock_date from dba_users where username = 'username';

계정 잠김여부 확인
계정의 잠김여부 DBeaver 확인

 

계정 잠금 해제 방법

ALTER USER 계정이름 ACCOUNT UNLOCK;
ALTER USER TEST ACCOUNT UNLOCK;

ACCOUNT_STATUS 가 OPEN 으로 바뀌면 잠금이 해제된 것이다.

300x250
반응형