Virtual Private Database

Tibero의 보안상 혹은 특정 서비스를 목적으로 필요한 유저에 해당하는 데이터만 다룰 수 있 게 하는 기술인 Virtual Private Database에 대해서 설명합니다.

개요

Virtual Private Database는 행과 열 수준에서 데이터베이스 접근을 제어하는 보안 정책을 생성합니다. 기본적으로 Virtual Private Database는 보안 정책이 적용된 테이블, 뷰, 또는 동의어에 대해 실행되는 SQL

문에 동적 WHERE 절을 추가합니다. Virtual Private Database는 테이블, 뷰, 동의어에 대해 직접 세부 수준 까지 보안을 강화합니다. 보안 정책을 이러한 데이터베이스 객체에 직접 연결하고 사용자가 데이터에 접근 할 때 마다 정책이 자동으로 적용되기 때문에 보안을 우회할 방법이 없습니다.

사용자가 Virtual Private Database 정책을 보호되는 테이블, 뷰, 동의어를 직접 또는 간접적으로 접근할 때 데이터베이스는 사용자의 SQL 문을 동적으로 수정합니다. 이 수정은 보안 정책을 구현하는 함수가 반환 하는 WHERE 문을 생성합니다. 이러한 Virtual Private Database 정책은 SELECT, INSERT, UPDATE, DELETE 문에 적용할 수 있습니다.

Virtual Private Database의 이점

Virtual Private Database는 보안성, 단순성 및 유연성 면에서 이점을 제공합니다.

모든 애플리케이션에서 접근 제어를 구현하는 대신 Virtual Private Database 보안 정책을 활용하면 다음 과 같은 이점이 있습니다.

  • 보안성 Virtual Private Database는 심각한 애플리케이션 보안 문제를 해결할 수 있습니다. 세분화된 접근 제어는 어떻게 사용자가 데이터에 접근하든 똑같은 보안 정책을 적용시킬 수 있습니다. 데이터에 대한 원천적인 보안 설정이 가능합니다.

  • 단순성 특정 테이블, 뷰, 동의어를 위한 보안 설정을 할 필요 없이 보안 정책을 한번에 설정할 수 있습니다.

  • 유연성 SELECT, INSERT, UPDATE, DELETE에 따라 다른 보안 정책을 만들 수 있습니다. 또한 테이블, 뷰, 동의어 에 여러 정책을 생성할 수 있습니다.

Virtual Private Database의 구성 요소

Virtual Private Database를 만들려면 동적 WHERE 문을 생성하는 정책 함수와 함수를 객체로 연결하는 보안 정책이 필요합니다.

정책 함수

정책 함수는 다음과 같은 조건을 만족해야 합니다.

  • 스키마 이름과 객체 이름을 인수로 입력해야 합니다.

  • WHERE 문의 조건문을 항상 반환해야 합니다. 항상 반환 값은 VARCHAR 타입이여야 합니다.

  • 유효한 WHERE 문을 생성해야 합니다.

  • 연관된 정책 함수 내의 테이블을 선택하면 안됩니다.

  • 연관 되지 않는 함수이여야 합니다. 함수는 패키지 변수에 종속되지 않아야 합니다.

  • 예제

보안 정책

DBMS_RLS 패키지를 통해서 보안 정책을 만들 수 있습니다. 사용자는 SYS 계정이거나 DBMS_RLS 패키 지를 EXECUTE 할 수 있는 권한이 있어야 합니다. DBMS_RLS.ADD_POLICY로 정책을 만들 수 있습니다.

  • 예제

Virtual Private Database의 구성

Virtual Private Database를 제대로 구성하기 위해서는 Application Context와 Policy를 알아야 합니다.

Application Context

Application Context는 사용자 식별 정보를 저장해준다. 이 사용자 식별 정보를 이용해서 데이터 접근 권한 을 관리할 수 있습니다. Virtual Private Database는 정책 함수에 Application Context를 적용하여 사용자에 따 라서 다른 결과를 보여줄 수 있습니다.

Application Context 구성

  • namespace : Application Context의 이름 (예: orders_ctx)

  • name : 속성의 이름 (예: cust_no)

  • value : 속성의 값 (예: 1)

CREATE CONTEXT

문맥 네임스페이스를 생성(혹은 수정)하고 해당 네임스페이스의 문맥을 조작할 수 있는 패키지를 지정합니다.

지정된 패키지에서 DBMS_SESSION.SET_CONTEXT 프러시저를 사용해 해당 네임스페이스의 속성 값들을 설정할 수 있습니다.

  • 예제

orders_ctx란 Application Context를 생성합니다. orders_ctx_proc란 프러시저로 orders_ctx를 보안 정책 을 구현할 수 있습니다.

circle-info

참고

CREATE CONTEXT에 대한 자세한 내용은 "Tibero SQL 참조 안내서"의 "CREATE CONTEXT"를 참고합니다.

DBMS_SESSION.SET_CONTEXT

이 프러시저는 CREATE CONTEXT DDL을 통해 지정된 패키지 내에서만 호출할 수 있습니다. 설정된 속성 값 은 세션이 유지되는 동안 보존됩니다. 만일 해당 문맥의 속성이 이미 설정되어 있을 경우 SET_CONTEXT 호출은 해당 속성값을 덮어씁니다.

  • 예제

orders_ctx_proc 프러시저를 정의합니다. 패키지 프러시저 안에 DBMS_SESSION.SET_CONTEXT를 활 용해서 orders_ctx의 Application Context를 설정합니다.

circle-info

참고

DBMS_SESSION.SET_CONTEXT에 대한 자세한 내용은 "Tibero tbPSM 참조 안내서"의 "36.2.5 SET_CONTEXT"를 참고합니다.

SYS_CONTEXT

SYS_CONTEXT는 문맥 네임스페이스(CONTEXT NAMESPACE)와 관련된 파라미터의 값을 반환하는 함수입니다. 문맥 네임스페이스와 파라미터는 문자열이나 표현식으로 정의할 수 있으며, 함수의 반환값은 VARCHAR 타입입니다. Tibero에서 디폴트로 제공하고 있는 문맥 네임스페이스는 USERENV입니다.

  • 예제

orders_ctx의 cust_no 속성의 값을 반환합니다.

circle-info

참고

SYS_CONTEXT에 대한 자세한 내용은 "Tibero SQL 참조 안내서"의 "4.2.159 SYS_CONTEXT"를 참고합니다.

Policy

Virtual Private Database의 정책은 정책 함수에 따라 WHERE 문을 바꿔주며 이 정책을 구성하기 위해선 다음 DBMS_RLS 패키지를 활용합니다.

Procedure
설명

DBMS_RLS.ADD_POLICY

테이블, 뷰, 동의어에 정책을 추가

DBMS_RLS.DROP_POLICY

테이블, 뷰, 동의어에 걸려있는 보안 정책을 제거

DBMS_RLS.ENABLE_POLICY

테이블, 뷰, 동의어에 걸려있는 보안 정책을 활성화 또는 비활성화

DBMS_RLS.REFRESH_POLICY

해당 보안 정책으로 인해 영향을 받았던 실행 계획들과 메모리에 저장되어 있던 정책 함수의 결과들을 모두 무효화 시킴

circle-info

참고

DBMS_RLS에 대한 자세한 내용은 "Tibero tbPSM 참조 안내서"의 "제33장 DBMS_RLS"를 참고한 다.

Virtual Private Database 생성 예제

본 절에서는 Application Context 없는 간단한 VPD와 Application Context 있는 VPD를 생성하는 간단한 예제를 설명합니다.

Application Context 없는 VPD

다음은 Application Context 없는 VPD를 생성하는 과정에 대한 설명입니다.

  1. User 생성 및 권한 부여

  1. Table 생성

  1. 정책 함수 생성

  1. VPD 정책 생성

  1. 정책 확인

  1. 예제 객체 제거

Application Context 있는 VPD

다음은 Application Context 있는 VPD를 생성하는 과정에 대한 설명입니다.

  1. User 생성 및 권한 부여

  1. Table 생성

  1. Application Context 생성

  1. Application Context 생성을 위한 PL/SQL Package 생성

  1. Logon Trigger 생성

  1. Logon Trigger 테스트

  1. 정책 함수 생성

  1. VPD 정책 생성

  1. 정책 확인

  1. 예제 객체 제거

Last updated