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 { строковый_литерал | NULL }
где сигнатурой_агрегата является:
* |
[ режим_аргумента ] [ имя_аргумента ] тип_аргумента [ , ... ] |
[ [ режим_аргумента ] [ имя_аргумента ] тип_аргумента [ , ... ] ] ORDER BY [ режим_аргумента ] [ имя_аргумента ] тип_аргумента [ , ... ]
Описание
Команда SECURITY LABEL применяет метку безопасности к объекту базы данных. С
указанным объектом базы данных можно связать произвольное количество
меток безопасности, по одной на каждого провайдера. Провайдеры меток — это
загружаемые модули, которые регистрируются с помощью функции register_label_provider.
Примечание
register_label_provider не является функцией SQL; ее можно вызвать только из кода C, загруженного на сервер.
Провайдер меток определяет, является ли данная метка допустимой и разрешается ли присваивать эту метку данному объекту. Смысл заданной метки тоже определяет провайдер меток. QHB не накладывает никаких ограничений на то, как провайдер меток должен интерпретировать метки безопасности и должен ли вообще; она просто предоставляет механизм их хранения. На практике это средство предназначено для обеспечения интеграции с системами обязательного контроля доступа на основе меток (mandatory access control, MAC), например SELinux. Такие системы принимают все решения по управлению доступом на основе меток объектов, а не на традиционных концепциях избирательного управления доступом (discretionary access control, DAC), таких как пользователи и группы.
Чтобы использовать команду SECURITY LABEL, нужно владеть объектом базы данных.
Параметры
имя_объекта
имя_таблицы.имя_столбца
имя_агрегата
имя_функции
имя_процедуры
имя_подпрограммы
Имя маркируемого объекта. Имена объектов, располагающихся в схемах (таблицы, функции и т. д.) могут быть дополнены схемой.
провайдер
Имя провайдера, с которым должна быть связана эта метка. Названный провайдер должен быть загружен и быть готов к предложенной операции маркировки. Если загружен только один провайдер, то для краткости имя провайдера можно опустить.
режим_аргумента
Режим аргумента функции, процедуры или агрегата: IN (входной), OUT
(выходной), INOUT (входной-выходной) или VARIADIC (переменный). Если этот
параметр опущен, значение по умолчанию равно IN. Обратите внимание, что
SECURITY LABEL на самом деле не обращает никакого внимания на аргументы OUT,
так как для идентификации функции необходимы только входные аргументы. Поэтому
достаточно перечислить аргументы IN, INOUT и VARIADIC.
имя_аргумента
Имя аргумента функции, процедуры или агрегата. Обратите внимание, что
SECURITY LABEL на самом деле не обращает никакого внимания на имена аргументов,
поскольку для идентификации функции необходимы только типы данных аргументов.
тип_аргумента
Тип данных аргумента функции, процедуры или агрегата.
oid_большого_объекта
OID большого объекта.
PROCEDURAL
Неучитываемое слово.
строковый_литерал
Новое значение метки безопасности, записанное в виде строкового литерала.
NULL
Напишите NULL, чтобы удалить метку безопасности.
Примеры
Следующий пример показывает, как можно установить или изменить метку безопасности для таблицы:
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;
Совместимость
В стандарте SQL нет команды SECURITY LABEL.