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

