제10장 Tibero Label Security

내용 목차

10.1. 개요
10.2. Label Security의 구성 요소
10.3. 레이블에 대한 이해
10.3.1. 레이블 기반 보안 방식
10.3.2. 레이블 구성 요소
10.3.3. 레이블 구문 유형
10.4. 관리자 권한 작동 방식
10.4.1. 권한 부여 레벨
10.4.2. 권한 부여 구획
10.4.3. 권한 부여 그룹
10.5. Label Security 정책 생성
10.5.1. Label Security 정책 컨테이너 생성
10.5.2. Label Security 정책에 대한 데이터 레이블 생성
10.5.3. Label Security 정책에 대한 사용자 권한 부여
10.5.4. 데이터베이스 테이블에 정책 적용

본 장에서는 레이블을 통하여 사용자의 접근을 제어하는 기능인 Label Security에 대해서 설명한다.

Label Security는 특정 테이블의 열 및 사용자에게 할당 된 레이블을 이용하여 대상 테이블의 행에 대한 접근을 제어하는 기능이다.

기본적으로 Label Security는 행 레이블과 사용자 레이블을 비교하여 사용자의 접근을 제어하는 방식으로 동작하며, 민감한 정보를 승인된 사용에게만 접근 가능하도록 설정할 수 있다.

Label Security 기능을 사용하기 위해선 접근 제어 지표인 레이블과 접근 제어 관련 정보를 관리하는 정책이 필요하다.

  • 레이블

    레이블은 다음과 같은 조건을 만족해야 한다.

    구분설명
    Level데이터의 민감한 정도를 수직적으로 나타낸다. (예: 공개, 대외비, 기밀)
    Compartment데이터의 구성을 수평적으로 나타낸다. 개별 프로젝트에 대한 접근을 제어하는 데 도움이 된다. (예: 알파, 베타, 감마)
    Group데이터의 구성을 tree 형태로 나타낸다. 계층형 구조의 데이터에 대한 접근을 제어하는 데 도움이 된다. (예: 티맥스 – 티맥스데이터, 티맥스소프트)
  • 정책

    접근 제어 관련 정보를 관리하는 메인 컨테이너이다.

예를 들어 데이터의 민감도가 공개자료, 대외비, 기밀 3 단계의 level로 이루어져 있을 때 특정 사용자에게 대외비까지 접근할 수 있는 level이 부여되었다면 그 사용자가 기밀 데이터에 접근하는 것은 불가능하다.

Label Security 기능을 사용하기 위해서는 레이블 기반 보안 방식에 및 레이블 구성 요소에 대한 이해가 필요하다.

레이블 구성 요소를 정의한 후 특정 레벨, 구획, 그룹 집합을 결합하여 데이터 레이블을 생성할 수 있다.

다음과 같은 구문 형태로 레이블 문자열 표현이 가능하다.

LEVEL:COMPARTMENT1,…,COMPARTMENTn:GROUP1,…,GROUPn

SECRET:ALPHA,BETA:TMAX_DATA
CONFIDENTIAL:GAMMA:TMAX
PUBLIC
SECRET::TMAX_SOFT

레벨 구성 요소

레벨은 레이블 정보의 민감도를 등급화한 지표이다. 큰 레벨 값은 정보의 민감도가 높다는 것을 의미한다.

다음과 같이 레벨을 정의할 수 있다.

숫자 형식긴 형식짧은 형식
30기밀 (SECRET)S
20대외비 (CONFIDENTIAL)C
10공개 (PUBLIC)P

구획 구성 요소

구획은 레이블이 지정된 데이터 정보의 민감도를 더 세분화하는 영역이다. 특정 프로젝트와 관련 있는 모든 데이터는 동일한 구획으로 레이블을 지정할 수 있다.

다음과 같이 구획을 정의할 수 있다.

숫자 형식긴 형식짧은 형식
80알파 (ALPHA)A
50베타 (BETA)B
20감마 (GAMMA)G

그룹 구성 요소

그룹은 계층적 구조로 레이블이 지정된 데이터 정보의 민감도를 더 세분화하는 영역이다. 조직 구성을 기반으로 데이터에 레이블을 지정할 수 있으며, 특정 부서와 관련있는 모든 데이터는 레이블에 해당 부서의 그룹을 포함할 수 있다.

다음과 같이 그룹을 정의할 수 있다.

숫자 형식긴 형식짧은 형식부모 그룹
1000TMAXT 
1100TMAX_DATAT_DATAT
1200TMAX_SOFTT_SOFTT

Label Security 관리자가 설정 한 권한에 따라 사용자의 접근을 제어한다.

본 절에서는 Label Security의 정책을 생성하는 방법과 그 과정을 설명한다.

데이터 레이블은 테이블 행 의 민감도를 나타낸다. 데이터 레이블의 구성요소는 레벨, 구획, 그룹이 있다.

구성요소설명
레벨등급에 따른 구분 (예: 기밀(SECRET), 대외비(CONFIDENTIAL), 공개(PUBLIC))
구획영역에 따른 구분 (예: 알파(ALPHA), 베타(BETA), 감마(GAMMA))
그룹계층에 따른 구분 (예: TMAX, TMAX_DATA, TMAX_SOFT)

정책에 대한 레벨 생성

레벨은 등급에 따른 구분이다. 숫자가 클수록 높은 보안 등급을 의미한다.

숫자 형식긴 형식짧은 형식
30기밀 (SECRET)S
20대외비 (CONFIDENTIAL)C
10공개 (PUBLIC)P

다음은 정책에 대한 레벨을 생성하는 예이다.

BEGIN 
  SA_COMPONENTS.CREATE_LEVEL(
    policy_name => 'tls_pol',
    level_num   => 30,
    short_name => 'S',
    long_name   => 'SECRET'
  );
  SA_COMPONENTS.CREATE_LEVEL(
    policy_name => 'tls_pol',
    level_num   => 20,
    short_name => 'C',
    long_name   => 'CONFIDENTIAL'
  );
  SA_COMPONENTS.CREATE_LEVEL(
    policy_name => 'tls_pol',
    level_num   => 10,
    short_name => 'P',
    long_name   => 'PUBLIC'
  );
END;
/

정책에 대한 구획 생성

구획은 영역에 따른 구분이다. 사용자는 자신이 속한 영역의 데이터를 읽을 수 있다.

숫자 형식긴 형식짧은 형식
80알파 (ALPHA)A
50베타 (BETA)B
20감마 (GAMMA)G

다음은 정책에 대한 구획을 생성하는 예이다.

BEGIN
  SA_COMPONENTS.CREATE_COMPARTMENT (
    policy_name     => 'tls_pol',
    comp_num      => '80',
    short_name      => 'A',
    long_name       => 'ALPHA’
  );
  SA_COMPONENTS.CREATE_COMPARTMENT (
    policy_name     => 'tls_pol',
    comp_num      => '50',
    short_name      => 'B',
    long_name       => 'BETA')
  ;
  SA_COMPONENTS.CREATE_COMPARTMENT (
    policy_name     => 'tls_pol',
    comp_num       => '20',
    short_name      => 'G',
    long_name       => 'GAMMA')
  ;
END;
/

정책에 대한 그룹 생성

그룹은 계층에 따른 구분이다. 사용자는 자신이 속한 조직의 데이터를 읽을 수 있다.

숫자 형식긴 형식짧은 형식부모 그룹
1000TMAXT 
1100TMAX_DATAT_DATAT
1200TMAX_SOFTT_SOFTT

다음은 정책에 대한 그룹을 생성하는 예이다.

BEGIN
  SA_COMPONENTS.CREATE_GROUP (
    policy_name     => 'tls_pol',
    group_num       => 1000,
    short_name      => 'T’,
    long_name       => 'TMAX')
  ;
  SA_COMPONENTS.CREATE_GROUP (
    policy_name     => 'tls_pol',
    group_num       => 1100,
    short_name      => 'T_DATA',
    long_name       => 'TMAX_DATA’,
    parent_name     => 'T')
  ;
  SA_COMPONENTS.CREATE_GROUP (
    policy_name     => 'tls_pol',
    group_num       => 1200,
    short_name      => 'T_SOFT',
    long_name       => 'TMAX_SOFT',
    parent_name      => 'T')
  ;
END;
/

데이터 레이블 생성

SA_LABEL_ADMIN.CREATE_LABEL을 통해 데이터 레이블을 생성할 수 있다.

다음은 데이터 레이블을 생성하는 예이다.

BEGIN
  SA_LABEL_ADMIN.CREATE_LABEL(
    policy_name => 'tls_pol',
    label_tag   => 300000,
    label_value => 'S',
    data_label  => TRUE
);
  SA_LABEL_ADMIN.CREATE_LABEL(
    policy_name => 'tls_pol',
    label_tag   => 200000,
    label_value => 'C',
    data_label  => TRUE
);
  SA_LABEL_ADMIN.CREATE_LABEL(
    policy_name => 'tls_pol',
    label_tag   => 100000,
    label_value => 'P',
    data_label  => TRUE
);
END;
/

참고

모든 정책에 대해 레이블 테그(label_tag)는 유일해야 하며, 같은 정책 내에서 같은 레이블 값(label_value)에 서로 다른 레이블 테그를 설정하는 것은 불가능하다. 하지만 다른 정책에 대해서는 레이블 값이 동일 하더라도 서로 다른 레이블 테그를 설정할 수 있다.

사용자 레이블은 SA_USER_ADMIN.SET_LEVELS, SA_USER_ADMIN.SET_COMPARTMENTS, SA_USER_ADMIN.SET_GROUPS 프러시저를 통해 부여할 수 있다.

정책에 대한 사용자 레벨 부여

레벨은 SA_USER_ADMIN.SET_LEVELS 프러시저를 통해 부여할 수 있다.

다음은 정책에 대한 사용자 레벨을 부여하는 예이다.

BEGIN
  SA_USER_ADMIN.SET_LEVELS(
    policy_name => 'tls_pol',
    user_name   => 'tibero',
    max_level   => 'S',
    min_level   => 'C',
    def_level   => 'C',
    row_level   => 'C')
  ;
END;
/
매개 변수설명
policy_name정책 이름
user_name정책이 적용될 사용자 이름
max_level사용자가 읽기/쓰기 작업 중 접근 가능한 최대 레벨
min_level사용자가 쓰기 잡업 중 접근 가능한 최소 레벨(사용자 최대 레벨은 사용자 최소 레벨보다 크거나 같아야 한다.)
def_level기본적으로 설정되는 레벨
row_level데이터를 삽입할 때 기본적으로 사용되는 레벨

정책에 대한 사용자 구획 부여

레벨을 설정한 후 선택적으로 구획을 사용자에게 부여할 수 있다. SA_USER_ADMIN.SET_COMPARTMENTS 프러시저를 통해 부여할 수 있다.

다음은 정책에 대한 사용자 구획을 부여하는 예이다.

BEGIN
  SA_USER_ADMIN.SET_COMPARTMENTS (
    policy_name   => 'tls_pol',
    user_name     => 'tibero', 
    read_comps    => 'A, B, G',
    write_comps   => 'A, B',
    def_comps     => 'A, B',
    row_comps     => 'A, B')
  ;
END;
/
매개 변수설명
policy_name정책 이름
user_name정책이 적용될 사용자 이름
read_comps읽기 가능한 구획
write_comps쓰기 가능한 구획
def_comps기본적으로 설정되는 구획
row_comps데이터를 삽입할 때 기본적으로 사용되는 구획

정책에 대한 사용자 그룹 부여

레벨을 설정한 후 선택적으로 그룹을 사용자에게 부여할 수 있다. SA_USER_ADMIN.SET_GROUPS 프러시저를 통해 부여할 수 있다.

다음은 정책에 대한 사용자 그룹을 부여하는 예이다.

BEGIN 
  SA_USER_ADMIN.SET_GROUPS (
    policy_name    => 'tls_pol',
    user_name      => 'tibero', 
    read_groups    => 'T',
    write_groups   => 'T',
    def_groups     => 'T',
    row_groups     => 'T')
  ;
END;
/
매개 변수설명
policy_name정책 이름
user_name정책이 적용될 사용자 이름
read_groups읽기 가능한 그룹
write_groups쓰기 가능한 그룹
def_groups기본적으로 설정되는 그룹
row_groups데이터를 삽입할 때 기본적으로 사용되는 그룹