DBMS_RLS

DBMS_RLS 패키지의 기본 개념과 패키지 내의 프러시저와 함수를 사용하는 방법을 설명합니다.

개요

DBMS_RLS 패키지는 Tibero의 가상 개인 데이터베이스 기능을 구성하고 관리하는 데 사용할 수 있는 프러시저와 함수를 제공합니다.

가상 개인 데이터베이스에서는 테이블, 뷰, 동의어에 대해 동적으로 조건문을 생성하여 해당 스키마 객체에서 반환하는 로우에 대한 접근을 선택적으로 제한합니다. 동적 조건문은 문자열을 반환하는 PSM 함수를 통해 만들 수 있으며, 이 함수를 추가되는 보안 정책과 연결시켜 줌으로써 정책이 구현됩니다.

아래 예시 입니다.

DBMS_RLS.ADD_POLICY ('scott', 'emp', 'pol1', 'secadm', 'emp_sec', 'select');

pol1이라는 정책을 통해서 scott 스키마의 emp 테이블을 select 할 때마다 Tibero 는 secadm의 emp_sec 함수를 호출하여 조건문을 동적으로 만들게 되고, 그 조건문을 where 절로 추가하여 실제 select를 수행합니다.

동적 조건문을 생성하기 위해 현재의 상황(혹은 조건)을 조사할 필요가 생기는데, 이때 보통 애플리케이션 문맥 기능을 이용합니다. 해당 내용은 DBMS_SESSION 패키지 및 SYS_CONTEXT 내장 함수를 참조합니다.

프러시저와 함수

본 절에서는 DBMS_RLS 패키지에서 제공하는 프러시저와 함수를 알파벳 순으로 설명합니다.

ADD_POLICY

해당 테이블, 뷰, 동의어에 대해 가상 개인 데이터베이스 보안 정책을 추가합니다. 이 프러시저는 호출됨과 동시에 현재 트랜잭션을 커밋합니다.

정책 함수는 다음의 함수 프로토타입에 맞추어 작성해야만 합니다.

FUNCTION policy_function (object_schema IN VARCHAR2, object_name VARCHAR2)
RETURN VARCHAR2;

object_schema, object_name 에는 해당 정책을 적용한 테이블, 뷰, 동의어의 스키마 이름과 객체의 이름이 전달됩니다.

ADD_POLICY 프러시저의 세부 내용은 다음과 같습니다.

  • 프로토타입

  • 파라미터

파라미터
설명

object_schema

  • 테이블, 뷰, 동의어를 가지고 있는 스키마

  • 명시하지 않으면 현재 사용자의 스키마

object_name

  • 테이블, 뷰, 동의어의 이름

policy_name

  • 새로 추가하고자 하는 정책의 이름

  • 해당 스키마 객체에 대해 유일해야 함

function_schema

  • 조건문 생성 함수의 스키마

  • 명시하지 않으면 현재 사용자의 스키마

policy_function

  • 조건문 생성 함수의 이름

  • 패키지 내에 존재하면 패키지 이름과 함께 명시

statement_types

  • 정책을 적용할 SQL 문의 유형

  • SELECT, INSERT, UPDATE, DELETE의 조합을 명시할 수 있음

  • 기본값은 이 4개를 모두 명시한 것

update_check

  • INSERT, UPDATE일 경우에 적용

  • TRUE일 경우 새로 insert되거나 update된 값이 정책의 조건문을 만족하는지 검사(기본값: FALSE)

enable

  • 정책을 추가함과 동시에 활성화시킬지 명시 (기본값: TRUE)

static_policy

  • 정책 유형을 설정

  • policy_type이 지정되지 않을 경우에만 유효

  • FALSE : DYNAMIC(기본값)

  • TRUE : STATIC

파라미터
설명

policy_type

정책 유형을 설정 (기본값: NULL)

가능한 정책 유형 다음과 같음

  • STATIC : 반환되는 조건문이 운영 중의 상황과는 무관할 때 사용. 정책 함수는 최초 한번만 수행되며 그 결과는 공유 메모리에 저장됨

  • SHARED_STATIC : STATIC과 동일하나 대상 스키마 객체와 무관하게 이 전에 해당 정책 함수를 수행한 적이 있으면 그 결과를 재사용

  • CONTEXT_SENSITIVE : SQL 문 수행할 때 애플리케이션 문맥이 바뀌었을 경우 정책 함수를 다시 수행. 저장된 조건문은 세션의 종료와 함께 삭제됨

  • SHARED_CONTEXT_SENSITIVE : CONTEXT_SENSITIVE와 동일하나 대상 스키마 객체와 무관하게 이전에 해당 정책 함수를 수행한 적이 있으면 그 결과를 재사용

  • DYNAMIC : 디폴트 정책 유형. 정책 함수를 항상 수행

sec_relevant_cols

  • 컬럼 레벨 VPD 기능을 활성화

  • 조건문 함수의 결과에 따라 값을 NULL로 가릴 컬럼들의 이름을 명시

  • 이름은 쉼표 혹은 공백 문자로 구분할 수 있음

  • 이 인자는 테이블 혹은 뷰에 대해 명시가 가능하며, 동의어에 대해서는 명시가 불가능 (기본값: NULL, 컬럼 레벨 VPD 기능을 사용하지 않음)

sec_relevant_cols_opt

  • 가능한 값은 NULL(디폴트) 혹은 dbms_rls.ALL_ROWS 둘 중 하나

  • set_relevant_cols 인자를 통해 컬럼 레벨 VPD 기능을 활성화시켰을 경우에 이 인자의 값은 dbms_rls.ALL_ROWS 이어야 하며, 그렇지 않을 경우에는 NULL이어야 함

  • 예제

DROP_POLICY

해당 테이블, 뷰, 동의어에 대해 걸려 있는 가상 개인 데이터베이스 보안 정책을 제거합니다. 이 프러시저는호출됨과 동시에 현재 트랜잭션을 커밋합니다.

DROP_POLICY 프러시저의 세부 내용은 다음과 같습니다.

  • 프로토타입

  • 파라미터

파라미터
설명

object_schema

  • 테이블, 뷰, 동의어를 가지고 있는 스키마

  • 명시하지 않으면 현재 사용자의 스키마

object_name

  • 테이블, 뷰, 동의어의 이름

policy_name

  • 제거하고자 하는 정책의 이름

  • 예제

ENABLE_POLICY

해당 테이블, 뷰, 동의어에 대해 걸려 있는 가상 개인 데이터베이스 보안 정책을 활성화 혹은 비활성화합니다. 이 프러시저는 호출됨과 동시에 현재 트랜잭션을 커밋합니다.

ENABLE_POLICY 프러시저의 세부 내용은 다음과 같습니다.

  • 프로토타입

  • 파라미터

파라미터
설명

object_schema

  • 테이블, 뷰, 동의어를 가지고 있는 스키마

  • 명시하지 않으면 현재 사용자의 스키마

object_name

  • 테이블, 뷰, 동의어의 이름

policy_name

  • 활성화 혹은 비활성화할 정책의 이름

enable

  • TRUE : 정책을 활성화

  • FALSE : 정책을 비활성화

  • 예제

REFRESH_POLICY

이 프러시저를 호출하면 해당 보안 정책으로 인해 영향을 받았던 실행 계획들과 메모리에 저장되어 있던 정책 함수의 결과들을 모두 무효화시킵니다. 결과적으로 SQL 문이 다시 수행될 때 문장은 다시 파싱되며, 정책 함수는 다시 수행됩니다. 비활성화된 정책에 대해 이 프러시저를 호출하면 에러가 반환됩니다.

REFRESH_POLICY 프러시저의 세부 내용은 다음과 같습니다.

  • 프로토타입

  • 파라미터

파라미터
설명

object_schema

  • 테이블, 뷰, 동의어를 가지고 있는 스키마

  • 명시하지 않으면 현재 사용자의 스키마

object_name

  • 테이블, 뷰, 동의어의 이름

policy_name

  • Refresh하고자 하는 정책의 이름

  • 예제

Last updated