본문 바로가기
Database/Oracle

[ORACLE] USER_POLICIES : VPD 기반 데이터 보안 정책 조회와 운영 전략

by Papa Martino V 2025. 7. 19.
728x90

VPD 기반 데이터 보안 정책 조회와 운영 전략
[ORACLE] USER_POLICIES

 

Oracle 데이터베이스는 높은 수준의 데이터 보안 및 접근 제어 기능을 제공합니다. 그 중 대표적인 기능이 바로 VPD (Virtual Private Database) 또는 RLS (Row-Level Security)라고도 불리는 정책 기반 필터링 메커니즘입니다. 이러한 정책은 사용자의 쿼리에 자동으로 보안 조건을 부여하여 특정 행만 접근하도록 제한할 수 있으며, 이 정책들의 정의는 USER_POLICIES 뷰를 통해 확인할 수 있습니다. 본 글에서는 USER_POLICIES 뷰의 구조와 의미, VPD/RLS 정책이 실무에서 어떻게 작동하는지를 예제로 설명하고, 조직의 보안 아키텍처 설계에 어떻게 활용할 수 있는지 실질적인 전략을 제공합니다.

1. USER_POLICIES란?

USER_POLICIES 뷰는 현재 사용자 스키마에 적용된 VPD 보안 정책을 보여주는 Oracle 데이터 딕셔너리 뷰입니다. 주로 DBMS_RLS 패키지를 통해 테이블이나 뷰에 보안 정책을 추가하면 이 뷰에 해당 정책 정보가 자동으로 기록됩니다. 각 정책은 어떤 객체에 적용되어 있는지, 어떤 함수로 필터링되는지, 어떤 이벤트(SELECT, INSERT, UPDATE 등)에 적용되는지를 상세하게 확인할 수 있습니다.

2. 주요 컬럼 설명

컬럼명 설명
OBJECT_OWNER 보안 정책이 적용된 객체의 소유자
OBJECT_NAME 정책이 적용된 테이블 또는 뷰 이름
POLICY_NAME 정책 이름
FUNCTION_SCHEMA 정책 필터링 로직이 정의된 스키마
POLICY_FUNCTION 정책에 사용된 필터 함수 이름
SEL, INS, UPD, DEL 각 SQL 문에 대해 정책이 적용되는지 여부 (YES/NO)

3. VPD 정책의 작동 방식

VPD는 사용자의 쿼리에 보이지 않게 WHERE 절을 추가함으로써 데이터 접근을 제어합니다. 예를 들어, 다음과 같이 정책을 등록하면:

BEGIN
  DBMS_RLS.ADD_POLICY (
    object_schema    => 'HR',
    object_name      => 'EMPLOYEES',
    policy_name      => 'emp_dept_policy',
    function_schema  => 'HR',
    policy_function  => 'hr.dept_filter',
    statement_types  => 'SELECT'
  );
END;
  

이후 SELECT 쿼리를 실행하면 Oracle은 자동으로 다음과 같은 조건을 추가합니다:

SELECT * FROM HR.EMPLOYEES WHERE dept_id = SYS_CONTEXT('USERENV', 'CLIENT_IDENTIFIER');
  

이렇게 정책은 보이지 않게 작동하며, 데이터에 대한 세밀한 제어를 가능하게 합니다. 이러한 정책의 목록은 USER_POLICIES에서 확인할 수 있습니다.

4. 실무 활용 예시 쿼리

-- 현재 스키마에 설정된 모든 정책 확인
SELECT object_name, policy_name, policy_function, sel, ins, upd, del
FROM user_policies
ORDER BY object_name;

-- 특정 테이블의 정책만 조회
SELECT policy_name, policy_function
FROM user_policies
WHERE object_name = 'SALES_DATA';
  

5. USER_POLICIES vs DBA_POLICIES 비교

구분 USER_POLICIES DBA_POLICIES
조회 범위 자기 스키마 정책만 모든 스키마 정책
보안 담당자 사용 애플리케이션 개발자 DBA, 보안 관리자
권한 요구 일반 사용자 가능 DBA 권한 필요

6. VPD 정책 관리 전략

  • 정책 이름 일관성 유지: 정책 이름은 객체명 기반으로 명확하게 정의
  • 정책 함수 독립화: 조건 함수는 전용 패키지에 저장하여 관리
  • 테스트 환경 사전 적용: 정책은 SQL 수행 결과에 직접 영향을 미치므로 반드시 테스트 후 적용
  • 접근 로그 남기기: 정책 함수 내에서 사용자, 시간 등의 로그 기록
  • 정책 활성/비활성화 활용: DBMS_RLS.ENABLE_POLICY 활용 가능

7. 정책 감사 체크리스트

항목 점검 내용 권장 기준
정책 누락 여부 기밀 테이블에 정책 미적용 여부 확인 모든 민감 테이블은 VPD 적용
함수 스키마 점검 정책 함수가 권한 분리된 스키마에 위치하는지 APP 또는 SECURE 스키마 사용
이벤트 타입 검토 SELECT 외에도 INSERT, UPDATE 적용 여부 읽기/쓰기 모두 적용
정책 활성화 여부 정책이 활성화되어 있는지 확인 ENABLE 설정 필요

8. 결론

Oracle의 USER_POLICIES 뷰는 보안 정책(VPD/RLS)이 어떻게 구현되어 있는지를 사용자 수준에서 직관적으로 확인할 수 있는 강력한 도구입니다. 이 뷰를 통해 각 테이블이나 뷰에 적용된 정책의 범위, 로직, 활성화 여부 등을 한눈에 파악할 수 있으며, 데이터 접근 제어를 체계적으로 관리할 수 있습니다. 특히 금융, 의료, 공공기관처럼 보안이 중요한 분야에서는 USER_POLICIES 활용이 데이터 보호와 규제 준수를 위한 필수 절차입니다.


출처:

  • Oracle Database 21c Security Guide - Oracle Corporation
  • Oracle VPD Implementation Best Practices - Oracle Support Notes
  • 실무 데이터 보안 아키텍처 설계 경험 및 정책 관리 사례
728x90