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 error code를 정리하는 시리즈입니다.
블로그 홈에서 다른 에러도 확인하세요.
본 포스트는 AI가 생성한 기술 가이드입니다. 운영 환경 적용 전 충분한 검토를 권장합니다.