본문 바로가기
프로그래밍/데이터베이스

오라클 비밀번호 만료(Oracle password has expired)

by pentode 2018. 4. 9.

오늘 데이터베이스에 접속을 하려고 하니 비밀번호가 만료되었다는 오류메세지가 뜹니다(ORA-28001: the password has expired). 데이터베이스는 Oracle 11g r2 express editon 입니다. 

 

 

11g r2 가 나왔을 때 사용자의 기본 프로필이 180일 지나면 비밀번호가 만료 되도록 변경 되었습니다. 예전에 이것 때문에 여러곳에서 갑자기 웹서비스가 안된다고 연락이 왔었던 기억이 납니다. 그 때는 보안 때문에 문제가 지금처럼 많이 발생하던 시절이 아니라, 한번 정한 비밀번호를 주기적인 변경없이 계속 사용했었습니다. 요즘은 대부분 3개월 주기로 비밀번호를 변경하는걸로 알고 있습니다.

 

비밀번호가 만료되면 비밀번호를 변경해주는게 맞겠습니다. 실제로 만료 전부터 로그인하면 만료기간에 몇일 남았다는 메세지가 뜨게 됩니다. 개인이 직접 로그인 하는 상황이라면 이 정보가 보일것이고, 웹 사이트의 비밀번호라면 서버 로그에 남게 되고 사용자는 모를 것이기 때문에 관리자가 주기에 따라 비밀번호를 잘 관리해야 합니다.

 

비밀번호는 SYSTEM 계정으로 들어가서 다음 명령으로 변경하면 됩니다.

 

ALTER USER user_id IDENTIFIED BY new_password;

 

만약 집에서 개인적으로 테스트 해보는 환경이라면 매번 비밀번호를 변경하는게 불편할 수도 있겠습니다. 다음 명령으로 만료가 되지 않도록 설정할 수 있습니다.

 

ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;

 

추가로 또 하나 이야기 하자면, 로그인 시 비밀번호가 10번 틀리면 계정이 잠기는 것이 기본 프로필 설정입니다. 잠긴 계정을 풀려면 다음 명령을 사용합니다.

 

ALTER USER user_id ACCOUNT UNLOCK;

 

시스템 계정까지 비밀번호가 비밀번호가 만료되었다면 시스템의 로컬에서 sqlplus 를 사용해서  인증없이 로그인한 후 비밀번호를 변경하면 되겠습니다. 다음처럼 합니다.

 

C:\>sqlplus "/as sysdba"

 

 

현재 기본 프로필 설정을 다음 명령으로 확인할 수 있습니다.

 

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

 

만료일 및 계정 상태 확인

 

SELECT EXPIRY_DATE FROM DBA_USERS WHERE USERNAME = 'user_id';
SELECT USERNAME, ACCOUNT_STATUS FROM DBA_USERS WHERE USERNAME = 'user_id';

 

반응형