2026년 10월 04일 | DBMS Error 가이드
이 글에서 다루는 내용
ORA-28008 에러의 원인 분석, 해결 SQL, 예방 방법을 실무 관점에서 정리합니다.
ORA-28008 invalid old password 는?
ORA-28008 에러는 Oracle 데이터베이스에서 사용자가 비밀번호를 변경할 때 기존 비밀번호(old password)를 잘못 입력했을 경우 발생하는 에러입니다. 이 에러는 주로 ALTER USER 명령어에서 REPLACE 절을 사용하거나, 애플리케이션 레벨에서 비밀번호 변경 API를 호출할 때 나타납니다. Oracle 12c 이후부터 보안이 강화되어 DBA 권한이 없는 일반 사용자가 자신의 비밀번호를 변경할 때는 반드시 기존 비밀번호를 정확히 입력해야 하므로, 이 에러를 만날 가능성이 높아졌습니다.
주요 발생 원인
1. 기존 비밀번호를 잘못 입력한 경우
가장 흔한 원인으로, 사용자가 비밀번호 변경 시 REPLACE 절에 현재 비밀번호를 잘못 입력하는 경우입니다. 오타, 대소문자 혼동, 또는 비밀번호가 이미 다른 경로로 변경된 상태에서 이전 비밀번호를 입력할 때 주로 발생합니다. Oracle은 기본적으로 비밀번호를 대소문자 구분(case-sensitive)으로 처리하므로, 정확한 비밀번호를 입력하지 않으면 이 에러가 즉시 발생합니다.
2. 애플리케이션 또는 미들웨어에서 하드코딩된 비밀번호 사용
애플리케이션 설정 파일이나 커넥션 풀 설정에 비밀번호가 하드코딩되어 있는 경우, DBA가 수동으로 비밀번호를 변경한 뒤 애플리케이션이 이전 비밀번호를 사용하여 비밀번호 변경을 시도할 때 이 에러가 발생합니다. WAS(Web Application Server)의 데이터소스 설정이나 JDBC 연결 정보가 업데이트되지 않은 상황이 대표적입니다. 이 경우 에러 로그에 대량의 ORA-28008이 반복적으로 기록되는 현상이 나타납니다.
3. Oracle Password Policy(프로파일)에 의한 비밀번호 만료 후 변경 시도
Oracle의 PASSWORD_LIFE_TIME 또는 PASSWORD_GRACE_TIME 설정으로 인해 비밀번호가 만료(EXPIRED)된 이후, 사용자가 비밀번호를 변경하는 과정에서 기존 비밀번호를 정확히 입력하지 못하면 ORA-28008이 발생합니다. 특히 비밀번호 만료 후 장기간 로그인을 시도하지 않은 계정에서, 사용자가 비밀번호를 잊어버린 경우에도 이 에러가 발생할 수 있습니다.
해결 방법
해결책 1: 올바른 기존 비밀번호로 비밀번호 변경
사용자가 직접 비밀번호를 변경할 때는 아래와 같이 REPLACE 절에 정확한 현재 비밀번호를 입력해야 합니다.
-- 올바른 비밀번호 변경 구문 (일반 사용자)
ALTER USER scott IDENTIFIED BY new_password123
REPLACE old_password456;
-- SQL*Plus에서 비밀번호 변경 (대화형)
PASSWORD
-- 이 명령어는 기존 비밀번호와 새 비밀번호를 대화형으로 입력받음
해결책 2: DBA 권한으로 비밀번호 강제 초기화
기존 비밀번호를 분실하거나 알 수 없는 경우, DBA 권한을 가진 계정(SYS, SYSTEM 등)으로 REPLACE 절 없이 비밀번호를 강제로 변경할 수 있습니다.
-- DBA 권한으로 비밀번호 강제 변경 (REPLACE 절 불필요)
ALTER USER scott IDENTIFIED BY new_secure_password;
-- 변경 후 계정 상태 확인
SELECT username, account_status, password_versions, last_login
FROM dba_users
WHERE username = 'SCOTT';
-- 계정이 EXPIRED 상태인 경우 추가 처리
ALTER USER scott ACCOUNT UNLOCK;
ALTER USER scott PASSWORD EXPIRE; -- 다음 로그인 시 비밀번호 변경 강제
해결책 3: 애플리케이션 비밀번호 동기화
애플리케이션의 하드코딩된 비밀번호 문제가 원인인 경우, Oracle Wallet 또는 외부 비밀번호 관리 도구를 사용하는 것을 권장합니다.
-- 현재 계정 상태 및 비밀번호 버전 확인
SELECT username, account_status, password_versions,
expiry_date, lock_date
FROM dba_users
WHERE username = 'APP_USER';
-- 비밀번호 변경 후 관련 프로파일 확인
SELECT profile, resource_name, limit
FROM dba_profiles
WHERE profile = (SELECT profile FROM dba_users WHERE username = 'APP_USER')
AND resource_name IN ('PASSWORD_LIFE_TIME', 'PASSWORD_GRACE_TIME',
'PASSWORD_REUSE_TIME', 'FAILED_LOGIN_ATTEMPTS');
-- 임시로 비밀번호 만료 정책 비활성화 (개발 환경에서만 권장)
ALTER PROFILE default LIMIT PASSWORD_LIFE_TIME UNLIMITED;
해결책 4: 비밀번호 검증 함수(Password Verification Function) 확인
일부 환경에서는 비밀번호 검증 함수가 ORA-28008을 트리거하는 경우도 있으므로 확인이 필요합니다.
-- 프로파일에 설정된 비밀번호 검증 함수 확인
SELECT profile, resource_name, limit
FROM dba_profiles
WHERE resource_name = 'PASSWORD_VERIFY_FUNCTION';
-- 비밀번호 검증 함수 비활성화 (테스트 목적)
ALTER PROFILE default LIMIT PASSWORD_VERIFY_FUNCTION NULL;
-- 변경 후 비밀번호 재설정
ALTER USER scott IDENTIFIED BY new_password123
REPLACE wrong_attempt;
예방 방법
1. Oracle Wallet 또는 외부 비밀 관리 도구를 활용한 비밀번호 관리
애플리케이션에 비밀번호를 하드코딩하는 방식은 ORA-28008 외에도 다양한 보안 문제를 야기합니다. Oracle Wallet(mkstore 명령어 사용)이나 HashiCorp Vault, AWS Secrets Manager와 같은 외부 비밀 관리 도구를 사용하면 비밀번호 변경 시 애플리케이션 재배포 없이도 안전하게 자격 증명을 관리할 수 있습니다. 특히 Oracle 12c 이상에서는 외부 비밀번호 스토어(External Password Store)를 활용하여 클라이언트 측 비밀번호를 안전하게 관리하는 것을 강력히 권장합니다.
2. 비밀번호 변경 절차 표준화 및 교육
DBA 팀 내에서 비밀번호 변경 절차를 문서화하고 표준화하여, 비밀번호 변경 시 반드시 관련 애플리케이션 팀과 사전에 공유하는 프로세스를 수립해야 합니다. 또한, 정기적인 비밀번호 변경 스케줄을 수립하고 변경 이력을 관리하는 내부 정책을 마련하면 ORA-28008과 같은 비밀번호 관련 에러를 사전에 예방할 수 있습니다.
관련 에러
- ORA-28001:
the password has expired— 비밀번호가 만료된 경우 발생하며, ORA-28008과 함께 자주 나타납니다. - ORA-28003:
password verification for the specified password failed— 비밀번호 검증 함수에 의해 새 비밀번호가 정책을 만족하지 못할 때 발생합니다. - ORA-28000:
the account is locked— 잘못된 비밀번호를 반복 입력하여 계정이 잠긴 경우 발생하며,FAILED_LOGIN_ATTEMPTS초과 시 나타납니다. - ORA-01017:
invalid username/password; logon denied— 로그인 자체가 실패할 때 발생하는 에러로, 비밀번호 불일치 시 가장 먼저 만나게 되는 에러입니다.
주요 DBMS error code를 정리하는 시리즈입니다.
블로그 홈에서 다른 에러도 확인하세요.
본 포스트는 AI가 생성한 기술 가이드입니다. 운영 환경 적용 전 충분한 검토를 권장합니다.