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/RUST, загруженного на сервер.
Провайдер меток определяет, является ли данная метка допустимой и разрешено ли присвоить эту метку данному объекту. Смысл заданной метки тоже определяет провайдер меток. QHB не накладывает никаких ограничений на то, как провайдер меток должен интерпретировать метки безопасности; она просто предоставляет механизм их хранения. На практике это средство предназначено для обеспечения интеграции с системами обязательного контроля доступа на основе меток (mandatory access control, 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
.