SECURITY LABEL
Эта страница переведена при помощи нейросети GigaChat.
SECURITY LABEL - определение или изменение метки безопасности, применяемой к объекту.
Синтаксис
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 }
where aggregate_signature is:
* |
[ argmode ] [ argname ] argtype [ , ... ] |
[ [ argmode ] [ argname ] argtype [ , ... ] ] ORDER BY [ argmode ] [ argname ] argtype [ , ... ]
Описание
SECURITY LABEL устанавливает метку безопасности на объект базы данных.
С каждым объектом может быть связано произвольное количество меток — по одной от каждого провайдера меток. Провайдеры меток — это загружаемые модули, которые регистрируются с помощью функции register_label_provider.
register_label_provider — не SQL-функция; ее можно вызвать только из C-кода, загружаемого в сервер PostgreSQL.
Провайдер меток определяет, допустима ли метка и разрешено ли присвоение этой метки указанному объекту. Смысл метки также определяется провайдером. PostgreSQL не накладывает ограничений на интерпретацию меток и лишь предоставляет механизм для их хранения.
На практике эта функциональность предназначена для интеграции с системами обязательного управления доступом (MAC), основанными на метках — например, SELinux. Такие системы принимают решения о доступе исключительно на основе меток объектов, в отличие от традиционных моделей дискреционного управления доступом (DAC), основанных на пользователях и группах.
Параметры
object_nametable_name.column_nameaggregate_namefunction_nameprocedure_nameroutine_name- Имя объекта, которому присваивается метка. Имена объектов, которые находятся в схемах (таблицы, функции и так далее), могут быть квалифицированы схемой.
provider- Имя провайдера, с которым должна быть связана эта метка. Названный провайдер должен быть загружен и должен согласиться с предлагаемой операцией маркировки. Если загружен только один провайдер, имя провайдера может быть опущено для краткости.
argmode- Режим аргумента функции, процедуры или агрегата:
IN,OUT,INOUTилиVARIADIC. Если не указан, по умолчанию считаетсяIN. Заметьте, чтоSECURITY LABELигнорирует аргументыOUT, так как для идентификации функции используются только входные параметры.
argname- Имя аргумента функции, процедуры или агрегата. Обратите внимание, что
SECURITY LABELфактически не обращает никакого внимания на имена аргументов, так как для определения идентичности функции требуются только типы данных аргументов.
argtype- Тип данных аргумента функции, процедуры или агрегата.
large_object_oid- OID большого объекта.
PROCEDURAL- Служебное (необязательное) слово, не влияющее на поведение команды.
string_literal- Новая настройка метки безопасности, записанная в виде строкового литерала.
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.
Смотрите также
sepgsql, src/test/modules/dummy_seclabel