SECURITY LABEL
SECURITY LABEL — определить или изменить метку безопасности, применённую к объекту
Синтаксис
SECURITY LABEL [ FORпровайдер
] ON { TABLEимя_объекта
| COLUMNимя_таблицы
.имя_столбца
| AGGREGATEимя_агрегатной_функции
(сигнатура_агр_функции
) | DATABASEимя_объекта
| DOMAINимя_объекта
| EVENT TRIGGERимя_объекта
| FOREIGN TABLEимя_объекта
FUNCTIONимя_функции
[ ( [ [режим_аргумента
] [имя_аргумента
]тип_аргумента
[, ...] ] ) ] | LARGE OBJECToid_большого_объекта
| MATERIALIZED VIEWимя_объекта
| [ PROCEDURAL ] LANGUAGEимя_объекта
| PUBLICATIONимя_объекта
| ROLEимя_объекта
| SCHEMAимя_объекта
| SEQUENCEимя_объекта
| SUBSCRIPTIONимя_объекта
| TABLESPACEимя_объекта
| TYPEимя_объекта
| VIEWимя_объекта
} IS 'метка
' Здесьсигнатура_агр_функции
: * | [режим_аргумента
] [имя_аргумента
]тип_аргумента
[ , ... ] | [ [режим_аргумента
] [имя_аргумента
]тип_аргумента
[ , ... ] ] 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
, если метку безопасности нужно удалить.
Примеры
Следующий пример показывает, как можно изменить метку безопасности для таблицы.
SECURITY LABEL FOR selinux ON TABLE mytable IS 'system_u:object_r:sepgsql_table_t:s0';
Совместимость
Команда SECURITY LABEL
отсутствует в стандарте SQL.
См. также
src/test/modules/dummy_seclabel