SECURITY LABEL
SECURITY LABEL — определить или изменить метку безопасности, применённую к объекту
Синтаксис
SECURITY LABEL [ FORпровайдер
] ON { TABLEимя_объекта
| COLUMNимя_таблицы
.имя_столбца
| AGGREGATEимя_агрегатной_функции
(сигнатура_агр_функции
) | DATABASEимя_объекта
| DOMAINимя_объекта
| EVENT TRIGGERимя_объекта
| FOREIGN TABLEимя_объекта
| FUNCTIONимя_функции
[ ( [ [режим_аргумента
] [имя_аргумента
]тип_аргумента
[, ...] ] ) ] | LARGE OBJECToid_большого_объекта
| MATERIALIZED VIEWимя_объекта
| [ PROCEDURAL ] LANGUAGEимя_объекта
| PROCEDUREимя_процедуры
[ ( [ [режим_аргумента
] [имя_аргумента
]тип_аргумента
[, ...] ] ) ] | PUBLICATIONимя_объекта
| PROFILEимя_объекта
| ROLEимя_объекта
| ROUTINEимя_подпрограммы
[ ( [ [режим_аргумента
] [имя_аргумента
]тип_аргумента
[, ...] ] ) ] | SCHEMAимя_объекта
| SEQUENCEимя_объекта
| SUBSCRIPTIONимя_объекта
| TABLESPACEимя_объекта
| TYPEимя_объекта
| VIEWимя_объекта
} IS {строковая_константа
| NULL } Здесьсигнатура_агр_функции
: * | [режим_аргумента
] [имя_аргумента
]тип_аргумента
[ , ... ] | [ [режим_аргумента
] [имя_аргумента
]тип_аргумента
[ , ... ] ] ORDER BY [режим_аргумента
] [имя_аргумента
]тип_аргумента
[ , ... ]
Описание
SECURITY LABEL
применяет метку безопасности к объекту базы данных. С определённым объектом может быть связано произвольное количество меток безопасности, по одной для каждого провайдера. Провайдеры меток представляют собой загружаемые модули, которые регистрируют себя, вызывая функцию register_label_provider
.
Примечание
register_label_provider
— это не SQL-функция; её можно вызывать только из скомпилированного кода C, загруженного сервером.
Провайдер меток определяет, допустима ли заданная метка и разрешено ли применять эту метку к указанному объекту. Какой смысл вкладывается в данную метку, тоже определяет провайдер меток. Postgres Pro не накладывает никаких ограничений на то, как провайдер должен интерпретировать метки безопасности; он просто обеспечивает механизм их хранения. На практике, этот механизм реализован для того, чтобы в базы данных можно было интегрировать системы мандатного управления доступом (MAC) на базе меток, такие как SELinux. Такие системы принимают все решения по ограничению доступа, учитывая метки объектов, а не традиционные сущности избирательного управления доступом (DAC), такие как пользователи и группы.
Параметры
имя_объекта
имя_таблицы.имя_столбца
имя_агрегатной_функции
имя_функции
имя_процедуры
имя_подпрограммы
Имя помечаемого объекта. Имена объектов, располагающихся в схемах, например, имена таблиц, функций и т. п., можно дополнить именем схемы.
провайдер
Имя провайдера, с которым будет связана эта метка. Указанный провайдер должен быть загружен и готов выполнять операцию размечивания. Если загружен всего один провайдер, его имя можно опустить для краткости.
режим_аргумента
Режим аргумента функции, процедуры или агрегата:
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;
Совместимость
Команда SECURITY LABEL
отсутствует в стандарте SQL.