본문 바로가기
Database/Oracle

[ORACLE] ROLE_TAB_PRIVS 뷰 완벽 해설 – 사용자별 테이블 권한 확인 가이드

by Papa Martino V 2025. 10. 9.
728x90

ROLE_TAB_PRIVS
[ORACLE] ROLE_TAB_PRIVS 뷰

 

Oracle Database에서 ROLE_TAB_PRIVS 뷰는 “Role(역할)”을 통해 부여된 테이블 수준의 권한 정보를 확인할 수 있는 중요한 데이터 딕셔너리 뷰입니다. 데이터베이스 관리자는 이 뷰를 통해 특정 Role이 어떤 테이블에 접근 권한을 가지고 있는지, 그리고 해당 권한이 직접 또는 간접적으로 어떤 사용자에게 영향을 주는지를 체계적으로 파악할 수 있습니다.


1. ROLE_TAB_PRIVS 개요

ROLE_TAB_PRIVS는 “Role 기반 테이블 권한 관리”의 핵심 뷰로서, Role이 소유한 테이블, 뷰, 시퀀스 등의 객체에 대한 권한 정보를 제공합니다. 즉, DBA_TAB_PRIVSUSER_TAB_PRIVS와 달리, “사용자”가 아닌 “역할(Role)” 중심으로 정리되어 있는 것이 가장 큰 특징입니다.

이 뷰를 통해 데이터베이스 보안 설계 시, 다음과 같은 질문에 명확한 답을 얻을 수 있습니다.

  • 특정 Role이 어떤 테이블에 SELECT, INSERT, DELETE 권한을 가지고 있는가?
  • Role을 통해 간접적으로 사용자에게 부여된 권한은 무엇인가?
  • Role에 포함된 권한이 시스템 전반에 어떤 영향을 미치는가?

2. 주요 컬럼 설명

컬럼명 데이터 유형 설명
ROLE VARCHAR2(30) 권한을 가진 Role 이름
OWNER VARCHAR2(30) 권한이 부여된 객체의 소유자
TABLE_NAME VARCHAR2(30) 권한이 부여된 테이블 이름
COLUMN_NAME VARCHAR2(30) 컬럼 수준의 권한이 있을 경우 컬럼명
PRIVILEGE VARCHAR2(40) 부여된 권한명 (SELECT, INSERT, DELETE 등)
GRANTABLE VARCHAR2(3) GRANT 옵션 여부 (‘YES’일 경우 다른 사용자에게 재부여 가능)

이 뷰는 보통 다음 SQL 문으로 조회됩니다.

SELECT ROLE, OWNER, TABLE_NAME, PRIVILEGE, GRANTABLE
FROM ROLE_TAB_PRIVS
ORDER BY ROLE, OWNER;

3. ROLE_TAB_PRIVS 활용 예시

예시 1) 특정 ROLE이 가진 모든 테이블 권한 조회

SELECT ROLE, OWNER, TABLE_NAME, PRIVILEGE
FROM ROLE_TAB_PRIVS
WHERE ROLE = 'HR_READ_ONLY';

→ HR_READ_ONLY 역할이 접근 가능한 모든 테이블 목록과 권한을 확인할 수 있습니다.

예시 2) 특정 테이블에 접근할 수 있는 ROLE 확인

SELECT ROLE, PRIVILEGE
FROM ROLE_TAB_PRIVS
WHERE OWNER = 'SCOTT' AND TABLE_NAME = 'EMP';

→ SCOTT.EMP 테이블에 접근할 수 있는 모든 ROLE을 빠르게 파악할 수 있습니다.


4. ROLE_TAB_PRIVS와 관련된 주요 뷰 비교

뷰 이름 설명 조회 대상
ROLE_TAB_PRIVS Role에 부여된 테이블 수준의 권한 Role 중심
USER_TAB_PRIVS 현재 사용자에게 부여된 테이블 권한 User 중심
DBA_TAB_PRIVS 모든 사용자 및 Role의 테이블 권한 정보 전체 데이터베이스
ROLE_SYS_PRIVS Role에 부여된 시스템 권한 Role 중심 (System Level)
ROLE_ROLE_PRIVS Role 간의 상호 권한 관계 Role 관계 구조

즉, ROLE_TAB_PRIVS는 ‘테이블 수준의 접근 권한’을 Role 단위로 분석할 때 핵심이 되며, 보안 및 권한 감사(Audit) 시스템 구축 시 반드시 함께 조회되어야 하는 기본 뷰입니다.


5. ROLE_TAB_PRIVS 뷰의 관리 및 활용 포인트

  • 보안 정책 점검: 특정 Role이 불필요하게 DML 권한(UPDATE, DELETE 등)을 가지고 있는지 점검.
  • Role 정비 작업: Role에 중복된 권한이 있는 경우 정리하여 보안 리스크 감소.
  • Role 상속 구조 분석: ROLE_ROLE_PRIVS와 조합하여 Role 간 권한 계층 구조를 파악.
  • 자동 감사 스크립트 구성: DBA는 ROLE_TAB_PRIVS를 주기적으로 조회하여 보안 보고서를 자동 생성 가능.
SELECT r.ROLE, r.OWNER, r.TABLE_NAME, r.PRIVILEGE
FROM ROLE_TAB_PRIVS r
WHERE r.PRIVILEGE IN ('DELETE', 'UPDATE')
AND r.GRANTABLE = 'YES';

이 쿼리를 통해 재부여(Grantable) 가능한 고위험 권한을 가진 Role을 선별할 수 있습니다.


6. ROLE_TAB_PRIVS 뷰의 내부 구조 및 동작 원리

ROLE_TAB_PRIVS는 Oracle 내부적으로 SYS.DBA_TAB_PRIVSSYS.ROLE$ 등의 시스템 테이블을 기반으로 생성됩니다. 즉, 실제로는 DBA_TAB_PRIVS에 저장된 권한 중에서 ‘GRANTEE’ 컬럼이 Role인 경우만 필터링하여 보여주는 형태입니다.

따라서 ROLE_TAB_PRIVS를 직접 수정할 수는 없으며, 권한 부여나 회수는 반드시 다음 명령을 통해 수행해야 합니다.

GRANT SELECT ON HR.EMPLOYEES TO HR_READ_ONLY;
REVOKE UPDATE ON HR.EMPLOYEES FROM HR_READ_ONLY;

이렇게 변경된 내용은 ROLE_TAB_PRIVS 뷰에 즉시 반영됩니다.


7. ROLE_TAB_PRIVS와 보안 감사(Audit)의 연계

대규모 데이터베이스 환경에서는 Role이 여러 사용자에게 동시에 부여되므로, 권한이 어떻게 전파되는지를 추적하기 위해 ROLE_TAB_PRIVSDBA_ROLE_PRIVS, 그리고 DBA_TAB_PRIVS를 함께 분석하는 것이 중요합니다.

예를 들어, 아래 SQL은 특정 사용자가 Role을 통해 간접적으로 접근 가능한 모든 테이블을 보여줍니다.

SELECT u.GRANTEE AS USER_NAME, r.ROLE, t.OWNER, t.TABLE_NAME, t.PRIVILEGE
FROM DBA_ROLE_PRIVS u
JOIN ROLE_TAB_PRIVS t ON u.GRANTED_ROLE = t.ROLE
JOIN DBA_ROLES r ON r.ROLE = u.GRANTED_ROLE
WHERE u.GRANTEE = 'JAMES';

이 쿼리는 “사용자 → Role → Table 권한”의 관계를 명확하게 시각화하여, 감사 로그나 권한 변경 시나리오 분석에 매우 유용합니다.


8. ROLE_TAB_PRIVS 관리 시 주의사항

  • Role 기반 권한은 사용자 직접 권한보다 우선순위가 낮습니다. 따라서 USER_TAB_PRIVS와 함께 비교하여 관리해야 합니다.
  • 불필요한 Role 중첩은 피해야 하며, Role 간 순환참조(Recursive Grant)가 발생하지 않도록 구조를 단순화해야 합니다.
  • 운영 DB에서는 “GRANTABLE = YES” 상태의 Role을 최소화해야 합니다. 이 값은 재부여 가능성을 의미하므로, 내부 보안 사고의 원인이 될 수 있습니다.

9. ROLE_TAB_PRIVS 성능 및 튜닝 팁

ROLE_TAB_PRIVS는 시스템 권한 관련 딕셔너리 뷰 중에서도 비교적 작은 데이터셋을 다루므로, 성능 부담은 적습니다. 그러나 대규모 Role 구조를 가진 기업 환경에서는 JOIN이 많은 쿼리에서 병목이 발생할 수 있습니다.

  • 필요 시 ROLE, OWNER, TABLE_NAME 컬럼에 인덱스를 적용한 뷰 기반 Materialized View를 생성.
  • Role별 권한 변경 이력을 DBA_AUDIT_TRAIL과 함께 주기적으로 백업.
  • 보안 감사 보고서는 정기적으로 ROLE_TAB_PRIVS에서 추출하도록 자동화 스크립트 구성.

10. 결론

ROLE_TAB_PRIVS 뷰는 Oracle 보안 구조에서 “Role이 부여받은 객체 권한”을 체계적으로 파악할 수 있는 핵심 구성요소입니다. DBA나 개발자는 이 뷰를 통해 데이터베이스 접근 제어의 투명성을 확보하고, 보안 감사 및 운영 정책을 수립할 때 명확한 근거 데이터를 얻을 수 있습니다.

특히 다른 권한 뷰(DBA_TAB_PRIVS, USER_TAB_PRIVS 등)와 함께 사용하면, “사용자 → Role → Table” 간의 권한 흐름을 한눈에 파악할 수 있어 보안 관리와 권한 최적화에 큰 도움이 됩니다.


출처

  • Oracle® Database Reference 19c – ROLE_TAB_PRIVS View
  • Oracle Database Security Guide
728x90