SECURITY LABEL

SECURITY LABEL (SECURITY LABEL)

데이터베이스 객체에 적용된 보안 라벨(security label)을 정의하거나 변경하는 명령이에요. 라벨 기반 강제 접근 통제(MAC) 시스템, 예를 들어 SELinux 같은 것과의 통합을 위한 메커니즘을 제공해요.

출처: PostgreSQL 문서

본문

개요 (Synopsis)

SECURITY LABEL [ FOR provider ] ON
{
  TABLE object_name |
  COLUMN table_name.column_name |
  AGGREGATE aggregate_name ( aggregate_signature ) |
  DATABASE object_name |
  DOMAIN object_name |
  EVENT TRIGGER object_name |
  FOREIGN TABLE object_name |
  FUNCTION function_name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ] |
  LARGE OBJECT large_object_oid |
  MATERIALIZED VIEW object_name |
  [ PROCEDURAL ] LANGUAGE object_name |
  PROCEDURE procedure_name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ] |
  PUBLICATION object_name |
  ROLE object_name |
  ROUTINE routine_name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ] |
  SCHEMA object_name |
  SEQUENCE object_name |
  SUBSCRIPTION object_name |
  TABLESPACE object_name |
  TYPE object_name |
  VIEW object_name
} IS { string_literal | NULL }

여기서 aggregate_signature는:

* |
[ argmode ] [ argname ] argtype [ , ... ] |
[ [ argmode ] [ argname ] argtype [ , ... ] ] ORDER BY [ argmode ] [ argname ] argtype [ , ... ]

설명 (Description)

SECURITY LABEL은 데이터베이스 객체에 보안 라벨을 적용해요. 라벨 제공자(provider)당 하나씩, 임의의 개수만큼의 보안 라벨이 주어진 데이터베이스 객체에 연결될 수 있어요. 라벨 제공자는 register_label_provider 함수로 자신을 등록하는 로드 가능한 모듈이에요.

Note: register_label_provider는 SQL 함수가 아니며, 백엔드에 로드된 C 코드에서만 호출할 수 있어요.

라벨 제공자는 주어진 라벨이 유효한지, 그 라벨을 주어진 객체에 할당하는 것이 허용되는지를 결정해요. 주어진 라벨의 의미도 라벨 제공자의 재량에 달려 있어요. PostgreSQL은 라벨 제공자가 보안 라벨을 어떻게 해석해야 하는지에 대해 제한을 두지 않아요. 단지 라벨을 저장하는 메커니즘만 제공할 뿐이에요. 실제로 이 기능은 SELinux 같은 라벨 기반 강제 접근 통제(MAC) 시스템과의 통합을 허용하기 위한 것이에요. 그러한 시스템은 사용자·그룹 같은 전통적인 임의 접근 통제(DAC) 개념이 아니라 객체 라벨을 기반으로 모든 접근 제어 결정을 내려요.

SECURITY LABEL을 사용하려면 데이터베이스 객체의 소유자여야 해요.

파라미터 (Parameters)

  • object_name, table_name.column_name, aggregate_name, function_name, procedure_name, routine_name — 라벨을 붙일 객체의 이름이에요. 스키마 안에 있는 객체(테이블, 함수 등)의 이름은 스키마 한정으로 쓸 수 있어요.
  • provider — 이 라벨이 연결될 제공자의 이름이에요. 지정된 제공자는 로드되어야 하고 제안된 라벨링 작업에 동의해야 해요. 정확히 하나의 제공자만 로드되어 있다면, 간결함을 위해 제공자 이름을 생략할 수 있어요.
  • argmode — 함수, 프로시저, 또는 집계 인자의 모드로 IN, OUT, INOUT, VARIADIC 중 하나예요. 생략하면 기본은 IN이에요. SECURITY LABEL은 함수의 정체성을 결정하는 데 입력 인자만 필요하므로 OUT 인자를 실제로 신경 쓰지 않아요. 따라서 IN, INOUT, VARIADIC 인자만 나열하면 충분해요.
  • argname — 함수, 프로시저, 또는 집계 인자의 이름이에요. SECURITY LABEL은 함수의 정체성을 결정하는 데 인자 데이터 타입만 필요하므로 인자 이름을 실제로 신경 쓰지 않아요.
  • argtype — 함수, 프로시저, 또는 집계 인자의 데이터 타입이에요.
  • large_object_oid — 큰 객체(large object)의 OID예요.
  • PROCEDURAL — 잡음 단어(noise word)예요.
  • string_literal — 문자열 리터럴로 작성된 보안 라벨의 새 설정이에요.
  • NULLNULL을 쓰면 보안 라벨을 제거해요.

예시 (Examples)

다음 예시는 테이블의 보안 라벨을 설정하거나 변경하는 방법을 보여줘요:

SECURITY LABEL FOR selinux ON TABLE mytable IS 'system_u:object_r:sepgsql_table_t:s0';

라벨을 제거하려면:

SECURITY LABEL FOR selinux ON TABLE mytable IS NULL;

호환성 (Compatibility)

SQL 표준에는 SECURITY LABEL 명령이 없어요.

더 알아보기 (Learn more)