Oracle ORA-28046 오류 원인과 해결 방법 완벽 가이드

ORA-28046
2026년 10월 05일 | DBMS Error 가이드

이 글에서 다루는 내용

ORA-28046 에러의 원인 분석, 해결 SQL, 예방 방법을 실무 관점에서 정리합니다.

ORA-28046 Password change for SYS disallowed 는?

ORA-28046은 Oracle 데이터베이스에서 SYS 계정의 비밀번호를 변경하려 할 때, 설정된 비밀번호 정책(Password Complexity Verification) 또는 프로파일 제약이 이를 허용하지 않을 경우 발생하는 에러입니다. 특히 Oracle 11g 이후 버전에서는 SYS 계정에 대해 별도의 비밀번호 검증 함수가 적용될 수 있으며, 이 조건을 충족하지 못할 경우 비밀번호 변경이 차단됩니다. 또한 Oracle Data Guard 환경이나 특정 보안 정책이 적용된 환경에서 SYS 비밀번호 변경 시도 시 이 에러가 자주 목격됩니다.


주요 발생 원인

  • 비밀번호 복잡성 검증 함수(Password Complexity Verification Function) 적용

Oracle 프로파일에 PASSWORD_VERIFY_FUNCTION이 설정되어 있을 경우, SYS 계정의 새 비밀번호가 해당 함수의 복잡성 요건(최소 길이, 특수문자 포함 여부, 대소문자 혼용 등)을 만족하지 못하면 ORA-28046이 발생합니다. Oracle 기본 제공 함수인 ORA12C_STRONG_VERIFY_FUNCTION 또는 verify_function_11G 등이 DEFAULT 프로파일에 설정된 경우 SYS 계정도 영향을 받을 수 있습니다. 예를 들어, 비밀번호를 단순히 oracle로 변경하려 할 때 이 함수가 거부 신호를 보내면 에러가 발생합니다.

  • Oracle Data Guard 구성 환경에서의 제약

Data Guard Primary/Standby 구성에서는 SYS 비밀번호 변경 시 Primary와 Standby 간의 인증 파일(orapwd) 동기화 문제가 발생할 수 있습니다. Oracle은 이러한 환경에서 무분별한 SYS 비밀번호 변경을 방지하기 위해 특정 상황에서 ORA-28046을 반환합니다. Standby 데이터베이스가 마운트 상태가 아니거나 password file이 누락된 경우에도 이 에러가 트리거될 수 있습니다.

  • 잘못된 ALTER USER 구문 또는 권한 부족

SYS 계정의 비밀번호 변경은 일반적인 ALTER USER 구문으로도 가능하지만, 비밀번호 변경 시 사용하는 구문이 Oracle 버전 또는 설정에 따라 제한될 수 있습니다. SYSDBA 권한 없이 일반 DBA 권한으로 SYS 비밀번호 변경을 시도하거나, OS 인증(OS Authentication)이 활성화된 환경에서 잘못된 방식으로 접근할 경우에도 이 에러가 발생할 수 있습니다. 특히 Oracle 12c 이후 CONTAINER=ALL 구문이 CDB 환경에서 요구될 수 있어 구문 누락으로 인한 에러가 빈번합니다.


해결 방법

해결책 1: 비밀번호 복잡성 검증 함수 확인 및 비활성화 후 변경

먼저 현재 DEFAULT 프로파일에 적용된 비밀번호 검증 함수를 확인합니다.

-- 프로파일에 적용된 PASSWORD_VERIFY_FUNCTION 확인
SELECT profile, resource_name, limit
FROM dba_profiles
WHERE resource_name = 'PASSWORD_VERIFY_FUNCTION'
ORDER BY profile;

검증 함수가 설정되어 있다면, 복잡성 요건을 충족하는 비밀번호로 변경하거나, 일시적으로 검증 함수를 NULL로 설정한 후 변경할 수 있습니다.

-- 임시로 비밀번호 검증 함수 비활성화 (SYS로 SYSDBA 연결 필요)
ALTER PROFILE DEFAULT LIMIT PASSWORD_VERIFY_FUNCTION NULL;

-- SYS 비밀번호 변경
ALTER USER SYS IDENTIFIED BY "NewSecureP@ssw0rd!";

-- 비밀번호 변경 후 검증 함수 재활성화
ALTER PROFILE DEFAULT LIMIT PASSWORD_VERIFY_FUNCTION ORA12C_STRONG_VERIFY_FUNCTION;

> ⚠️ 주의: 검증 함수를 비활성화하는 것은 임시 조치여야 하며, 비밀번호 변경 후 즉시 원복해야 합니다.


해결책 2: 복잡성 요건을 충족하는 비밀번호로 직접 변경

검증 함수를 비활성화하지 않고, 복잡성 요건을 충족하는 비밀번호를 사용하여 변경합니다. Oracle의 강력한 비밀번호 정책은 일반적으로 다음 조건을 요구합니다: 최소 8자 이상, 대문자 1개 이상, 소문자 1개 이상, 숫자 1개 이상, 특수문자 1개 이상.

-- SYSDBA로 접속한 상태에서 복잡성 요건 충족 비밀번호로 변경
CONNECT / AS SYSDBA

ALTER USER SYS IDENTIFIED BY "Oracle_Secure#2024";

-- 변경 결과 확인
SELECT username, account_status, password_versions, last_login
FROM dba_users
WHERE username = 'SYS';

해결책 3: Data Guard 환경에서 SYS 비밀번호 변경

Data Guard 환경에서는 orapwd 파일을 직접 재생성하는 방법이 안전합니다.

-- 1단계: Primary DB에서 SYS 비밀번호 변경
ALTER USER SYS IDENTIFIED BY "NewSysPassword#1";

-- 2단계: orapwd 파일 재생성 (OS 레벨에서 실행)
-- orapwd file=$ORACLE_HOME/dbs/orapw<SID> password=NewSysPassword#1 force=y

-- 3단계: 새로운 password file을 Standby로 복사 (OS 명령어)
-- scp $ORACLE_HOME/dbs/orapw<SID> standby_host:$ORACLE_HOME/dbs/

-- 4단계: Standby에서 확인
SELECT * FROM v$pwfile_users;

해결책 4: CDB 환경(Oracle 12c 이상)에서 SYS 비밀번호 변경

-- CDB Root에서 SYSDBA로 접속 후 변경
CONNECT / AS SYSDBA

-- CDB 전체에 적용하려면 CONTAINER=ALL 옵션 사용
ALTER USER SYS IDENTIFIED BY "CDB_SysPass#2024" CONTAINER=ALL;

-- 특정 PDB에서만 변경할 경우
ALTER SESSION SET CONTAINER = PDBNAME;
ALTER USER SYS IDENTIFIED BY "PDB_SysPass#2024";

예방 방법

  • 비밀번호 정책 문서화 및 표준화

조직 내 Oracle 데이터베이스의 비밀번호 복잡성 정책을 명확히 문서화하고, SYS/SYSTEM 등 특권 계정의 비밀번호 변경 절차를 표준 운영 절차서(SOP)에 포함시킵니다. 비밀번호 변경 전 반드시 현재 적용된 프로파일과 검증 함수를 확인하는 체크리스트를 운영하고, 정기적인(최소 분기 1회) 비밀번호 교체 스케줄을 수립하되 복잡성 요건을 사전에 정의된 패턴에 따라 준수합니다.

“`sql

— 정기 점검: 모든 프로파일의 비밀번호 정책 확인 쿼리

SELECT profile, resource_name, limit

FROM dba_profiles

WHERE resource_type = ‘PASSWORD’

ORDER BY profile, resource_name;

“`

  • Data Guard 환경의 비밀번호 파일 관리 자동화

Data Guard 구성 환경에서는 SYS 비밀번호 변경 시 자동으로 Standby로 password file이 동기화되도록 구성합니다. Oracle 12.2 이상에서는 REDO_TRANSPORT_USER 파라미터와 함께 password file을 Redo Log를 통해 자동 전파하는 기능을 활용합니다. 또한 비밀번호 변경 후 즉시 양쪽 노드에서 V$PWFILE_USERS를 조회하여 동기화 여부를 검증하는 스크립트를 운영 자동화 도구(Ansible, Shell Script 등)에 포함시킵니다.

“`sql

— Data Guard에서 password file 동기화 확인

SELECT username, sysdba, sysoper, sysasm

FROM v$pwfile_users

ORDER BY username;

— 12.2 이상: 자동 password file 전파 설정 확인

SELECT name, value

FROM v$parameter

WHERE name IN (‘remote_login_passwordfile’, ‘log_archive_dest_2’);

“`


관련 에러

  • ORA-28003: PASSWORD_VERIFY_FUNCTION에 의해 비밀번호 복잡성 검증에 실패했을 때 발생하며, ORA-28046과 함께 나타나는 경우가 많습니다.
  • ORA-28007: 비밀번호 재사용 제한(PASSWORD_REUSE_MAX 또는 PASSWORD_REUSE_TIME)에 의해 이전에 사용한 비밀번호로 변경 시 발생합니다.
  • ORA-01017: 비밀번호 변경 후 인증 파일이 올바르게 업데이트되지 않았을 경우 SYSDBA 접속 시 발생할 수 있습니다.
  • ORA-28011: 계정 비밀번호가 만료 임박 상태일 때 경고로 발생하며, SYS 계정 관리와 연관됩니다.
  • ORA-28009: SYS 또는 SYSTEM 계정으로의 접속이 AS SYSDBA 또는 AS SYSOPER 없이 시도될 때 발생하는 에러로, SYS 계정 관리 시 함께 알아두어야 합니다.
DBMS 에러 코드 시리즈

주요 DBMS error code를 정리하는 시리즈입니다.
블로그 홈에서 다른 에러도 확인하세요.

본 포스트는 AI가 생성한 기술 가이드입니다. 운영 환경 적용 전 충분한 검토를 권장합니다.

댓글 남기기