2026년 06월 24일 | DBMS Error 가이드
이 글에서 다루는 내용
ORA-00990 에러의 원인 분석, 해결 SQL, 예방 방법을 실무 관점에서 정리합니다.
ORA-00990 missing or invalid privilege 는?
ORA-00990 에러는 Oracle 데이터베이스에서 GRANT 문을 사용하여 권한을 부여하려 할 때, 존재하지 않거나 유효하지 않은 권한 이름을 지정했을 경우 발생하는 에러입니다. 즉, Oracle이 인식할 수 없는 권한명을 사용하거나, 문법적으로 잘못된 권한 표현을 사용했을 때 Oracle 엔진이 해당 권한을 파싱하지 못해 발생합니다. DBA나 개발자가 스크립트 작성 중 오타를 내거나, 버전별로 지원되지 않는 권한을 명시했을 때 자주 마주치는 에러이므로 실무에서 반드시 숙지해야 합니다.
주요 발생 원인
1. 존재하지 않는 권한명 또는 오타 사용
Oracle에서 권한명은 정확하게 명시되어야 하며, 단 한 글자의 오타도 ORA-00990 에러를 유발합니다. 예를 들어 SELECT 대신 SELCT, CREATE SESSION 대신 CREAT SESSION처럼 잘못 입력하면 Oracle은 해당 권한을 전혀 인식하지 못합니다. 특히 대규모 배포 스크립트나 자동화 배치 작업에서 오타가 섞여 있을 경우, 배포 전체가 실패하는 치명적인 상황으로 이어질 수 있습니다.
2. 잘못된 권한 조합 또는 문법 오류
GRANT 문에서 여러 권한을 한 번에 부여할 때 구분자(콤마)를 누락하거나, 객체 권한과 시스템 권한을 혼용하는 등 문법 규칙을 위반했을 때도 이 에러가 발생합니다. Oracle은 시스템 권한과 객체 권한을 엄격히 구분하며, 하나의 GRANT 문에서 두 가지를 혼합해서 사용하면 파서가 정상적으로 해석하지 못합니다. 스크립트를 급하게 작성하다 보면 이러한 실수가 발생하기 쉬우므로, 권한 부여 문장은 반드시 검토 후 실행해야 합니다.
3. 특정 Oracle 버전에서 지원되지 않는 권한 사용
Oracle 12c, 19c, 21c 등 버전별로 지원하는 권한의 종류와 이름이 다를 수 있습니다. 예를 들어 Oracle 12c 이후에 추가된 권한(CREATE PLUGGABLE DATABASE 등)을 구버전 Oracle에서 사용하려 하면 ORA-00990이 발생할 수 있습니다. 또한, 멀티테넌트(CDB/PDB) 환경에서 컨테이너 범위(CONTAINER=ALL)와 관련된 권한을 잘못 명시하는 경우에도 이 에러가 나타납니다.
해결 방법
원인 1 해결: 정확한 권한명 확인 및 수정
Oracle 공식 권한 목록을 확인하려면 SYSTEM_PRIVILEGE_MAP 딕셔너리 뷰를 조회합니다.
-- Oracle에서 사용 가능한 시스템 권한 전체 목록 조회
SELECT NAME
FROM SYSTEM_PRIVILEGE_MAP
ORDER BY NAME;
-- 오타가 의심될 때 부분 일치 검색
SELECT NAME
FROM SYSTEM_PRIVILEGE_MAP
WHERE NAME LIKE '%SESSION%'
ORDER BY NAME;
위 조회 결과를 바탕으로 정확한 권한명을 확인한 후, 아래와 같이 올바르게 권한을 부여합니다.
-- 잘못된 예 (ORA-00990 발생)
GRANT CREAT SESSION TO app_user;
-- 올바른 예
GRANT CREATE SESSION TO app_user;
-- 객체 권한 부여 올바른 예
GRANT SELECT, INSERT, UPDATE ON hr.employees TO app_user;
원인 2 해결: 권한 문법 교정
시스템 권한과 객체 권한을 분리하여 별도의 GRANT 문으로 실행합니다.
-- 잘못된 예: 시스템 권한과 객체 권한 혼용 (ORA-00990 발생 가능)
GRANT CREATE SESSION, SELECT ON hr.employees TO app_user;
-- 올바른 예: 시스템 권한 따로
GRANT CREATE SESSION TO app_user;
-- 올바른 예: 객체 권한 따로
GRANT SELECT ON hr.employees TO app_user;
-- 여러 시스템 권한 동시 부여 (올바른 문법)
GRANT CREATE SESSION, CREATE TABLE, CREATE VIEW TO app_user;
-- 여러 객체에 대한 권한은 개별로 부여
GRANT SELECT ON hr.employees TO app_user;
GRANT SELECT ON hr.departments TO app_user;
GRANT EXECUTE ON hr.process_salary TO app_user;
원인 3 해결: Oracle 버전 및 환경 확인
현재 Oracle 버전과 CDB/PDB 여부를 확인한 후 적절한 권한을 사용합니다.
-- 현재 Oracle 버전 확인
SELECT * FROM V$VERSION;
-- CDB 환경 여부 확인
SELECT CDB FROM V$DATABASE;
-- CDB 환경에서 PDB 전체에 권한 부여
GRANT CREATE SESSION TO c##app_user CONTAINER=ALL;
-- PDB 내에서만 권한 부여 (CDB 접속 후 PDB로 전환)
ALTER SESSION SET CONTAINER = pdb_name;
GRANT CREATE SESSION TO app_user;
-- 현재 사용자에게 부여된 권한 확인
SELECT PRIVILEGE
FROM DBA_SYS_PRIVS
WHERE GRANTEE = 'APP_USER'
ORDER BY PRIVILEGE;
-- 객체 권한 확인
SELECT OWNER, TABLE_NAME, PRIVILEGE
FROM DBA_TAB_PRIVS
WHERE GRANTEE = 'APP_USER'
ORDER BY OWNER, TABLE_NAME;
예방 방법
1. 권한 부여 스크립트 사전 검증 및 표준화
권한 관련 DDL 스크립트는 실제 운영 환경에 반영하기 전 반드시 개발 또는 테스트 환경에서 사전 검증하는 절차를 의무화해야 합니다. SYSTEM_PRIVILEGE_MAP과 DBA_SYS_PRIVS 딕셔너리 뷰를 활용하여 자동화된 검증 스크립트를 작성하고, 권한명을 하드코딩하지 않고 표준 권한 목록을 관리하는 문서나 테이블을 별도로 운영하는 것이 좋습니다.
-- 권한 부여 전 유효성 검사 예제
DECLARE
v_count NUMBER;
v_priv VARCHAR2(100) := 'CREATE SESSION'; -- 검사할 권한명
BEGIN
SELECT COUNT(*)
INTO v_count
FROM SYSTEM_PRIVILEGE_MAP
WHERE NAME = v_priv;
IF v_count = 0 THEN
DBMS_OUTPUT.PUT_LINE('유효하지 않은 권한명입니다: ' || v_priv);
ELSE
DBMS_OUTPUT.PUT_LINE('유효한 권한명입니다: ' || v_priv);
END IF;
END;
/
2. 최소 권한 원칙(Principle of Least Privilege) 적용 및 정기 감사
사용자에게 업무에 필요한 최소한의 권한만 부여하고, 불필요한 권한은 즉시 회수하는 정책을 수립합니다. 정기적으로 DBA_SYS_PRIVS, DBA_TAB_PRIVS, DBA_ROLE_PRIVS 뷰를 조회하여 권한 현황을 점검하고, 이상 징후가 있을 경우 즉각 조치하는 감사 루틴을 운영하는 것이 실무에서 매우 중요합니다.
관련 에러
- ORA-00942:
table or view does not exist— 권한 부여 대상 객체가 존재하지 않을 때 발생하며, ORA-00990과 함께 자주 나타납니다. - ORA-01031:
insufficient privileges— 권한 자체는 유효하지만 실행 주체에게 해당 권한이 없을 때 발생합니다. ORA-00990은 권한명 자체의 문제이고, ORA-01031은 권한 보유 여부의 문제입니다. - ORA-00987:
missing or invalid username(s)—GRANT문에서 사용자명이 잘못되었을 때 발생하며, ORA-00990과 유사한 맥락에서 나타납니다. - ORA-00904:
invalid identifier— 잘못된 식별자 사용 시 발생하며, 권한 관련 스크립트 작성 오류 시 함께 발생하는 경우가 있습니다.
주요 DBMS error code를 정리하는 시리즈입니다.
블로그 홈에서 다른 에러도 확인하세요.
본 포스트는 AI가 생성한 기술 가이드입니다. 운영 환경 적용 전 충분한 검토를 권장합니다.