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_name
table_name.column_name
aggregate_name
function_name
procedure_name
routine_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