SECURITY LABEL

SECURITY LABEL — определить или изменить метку безопасности, примененную к объекту

Синтаксис

SECURITY LABEL [ FOR провайдер ] ON
{
  TABLE имя_объекта |
  COLUMN имя_таблицы.имя_столбца |
  AGGREGATE имя_агрегатной_функции ( сигнатура_агрегатной_функции ) |
  DATABASE имя_объекта |
  DOMAIN имя_объекта |
  EVENT TRIGGER имя_объекта |
  FOREIGN TABLE имя_объекта
  FUNCTION имя_функции [ ( [ [ режим_аргумента ] [ имя_аргумента ] тип_аргумента [, ...] ] ) ] |
  LARGE OBJECT oid_большого_объекта |
  MATERIALIZED VIEW имя_объекта |
  [ PROCEDURAL ] LANGUAGE имя_объекта |
  PROCEDURE имя_процедуры [ ( [ [ режим_аргумента ] [ имя_аргумента ] тип_аргумента [, ...] ] ) ] |
  PUBLICATION имя_объекта |
  ROLE имя_объекта |
  ROUTINE имя_подпрограммы [ ( [ [ режим_аргумента ] [ имя_аргумента ] тип_аргумента [, ...] ] ) ] |
  SCHEMA имя_объекта |
  SEQUENCE имя_объекта |
  SUBSCRIPTION имя_объекта |
  TABLESPACE имя_объекта |
  TYPE имя_объекта |
  VIEW имя_объекта
} IS 'метка'

Где сигнатура_агрегатной_функции это:

* |
[ режим_аргумента ] [ имя_аргумента ] тип_аргумента [ , ... ] |
[ [ режим_аргумента ] [ имя_аргумента ] тип_аргумента [ , ... ] ] ORDER BY [ режим_аргумента ] [ имя_аргумента ] тип_аргумента [ , ... ]

Описание

Команда SECURITY LABEL применяет метку безопасности к объекту базы данных. С объектом базы данных можно связать произвольное количество меток безопасности, по одной на каждого провайдера. Провайдеры меток — это загружаемые модули, которые регистрируются с помощью функции register_label_provider.

Примечание
register_label_provider не является SQL-функцией; она может быть вызвана только из кода C, загруженного в серверную часть.

Провайдер меток определяет, является ли данная метка допустимой и разрешено ли присвоить эту метку данному объекту. Смысл заданной метки тоже определяет провайдер меток. QHB не накладывает никаких ограничений на то, как провайдер меток должен интерпретировать метки безопасности; он просто предоставляет механизм их хранения. На практике это средство предназначено для обеспечения интеграции с системами обязательного контроля доступа на основе меток (MAC), такими как SELinux. Такие системы принимают все решения по управлению доступом на основе меток объектов, а не на традиционных концепциях избирательного управления доступом (discretionary access control, DAC), таких как пользователи и группы.

Параметры

имя_объекта
имя_таблицы.имя_столбца
имя_агрегатной_функции
имя_функции
имя_процедуры
имя_подпрограммы

Имя маркируемого объекта. Имена таблиц, агрегатных и обычных функций, доменов, сторонних таблиц, процедур, подпрограмм, последовательностей, типов и представлений могут быть дополнены схемой.

провайдер

Имя провайдера, с которым должна быть связана эта метка. Указанный провайдер должен быть загружен и быть готов к предложенной операции маркировки. Если загружен только один провайдер, имя провайдера может быть опущено для краткости.

режим_аргумента

Режим аргумента функции, процедуры или агрегатной функции: IN, OUT, INOUT или VARIADIC. Если этот параметр опущен, значение по умолчанию равно IN. Обратите внимание, что SECURITY LABEL на самом деле не обращает никакого внимания на аргументы OUT, так как для определения идентичности функции необходимы только входные аргументы. Так что достаточно перечислить аргументы IN, INOUT и VARIADIC.

имя_аргумента

Имя аргумента функции, процедуры или агрегатной функции. Обратите внимание, что SECURITY LABEL на самом деле не обращает никакого внимания на имена аргументов, поскольку для определения идентификатора функции необходимы только типы данных аргументов.

тип_аргумента

Тип данных аргумента функции, процедуры или агрегата.

oid_большого_объекта

OID большого объекта.

PROCEDURAL

Это слово не несет смысловой нагрузки.

метка

Новая метка безопасности, записанная как строковая константа, либо NULL чтобы удалить метку безопасности.

Примеры

Следующий пример показывает, как можно изменить метку безопасности для таблицы.

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

Совместимость

В стандарте SQL нет команды SECURITY LABEL.