Уровни мандатного доступа к записям по умолчанию
Функция
Задает RAL/WAL-уровни мандатного доступа по умолчанию для всех операций INSERT/UPDATE в текущем соединении с ядром СУБД ЛИНТЕР.
Примечание
Поддерживается только в СУБД ЛИНТЕР БАСТИОН.
Спецификация
Общие правила
-
Указанные метки доступа применяются ко всем операциям INSERT/UPDATE на всех ранее открытых дочерних каналах и на всех дочерних каналах, которые будут открыты позднее (т.е. указывать метки доступа в операциях INSERT/UPDATE станет обязательным только в том случае, если они отличаются от заданных в данной команде).
-
Устанавливаемый уровень чтения не может превышать уровень чтения, уже установленный в канале (изначально в канале он берётся из описателя пользователя).
-
Устанавливаемый уровень записи не может быть меньше уровня записи уже установленного в канале (изначально он также берётся из описателя пользователя).
-
Команда устанавливает также и значения меток доступа для INSERT- или UPDATE-запросов (метка генерируется по задаваемой метке доступа для работы с объектами БД; алгоритм генерации тот же, что и при открытии канала).
-
При попытке сменить группу будет выдан код завершения 1070 «Нарушение мандатного доступа» (т.е. нельзя работать в чужой группе).
-
В отличие от команды set session security при попытке сменить группу код завершения 1070 «Нарушение мандатного доступа» (т.е. нельзя работать в чужой группе) выдаваться не будет (т.е. можно вносить в БД данные и для другой группы).
Пример
create level "NS" = 1; create level "DSP" = 2 ; create level "C" = 3; create level "CC" = 4; create user "TEST" identified by 'TEST'; grant DBA to "TEST"; username TEST/TEST create or replace table tst (i int, j int); insert into tst values(1,1); username SYSTEM/MANAGER alter user TEST level ("DSP","DSP"); username TEST/TEST insert into tst values(2,2); select security(*,'R'),security(*,'W') from tst; |нарушение доступа| |2 |2 | set session default security ##C#C; insert into tst values(3,3); set session default security ##CC#CC; insert into tst values(4,4); select security(*,'R'),security(*,'W') from tst; |нарушение доступа| |2 |2 | |нарушение доступа| |нарушение доступа| |нарушение доступа| username SYSTEM/MANAGER alter user TEST level ("CC","CC"); username TEST/TEST select security(*,'R'),security(*,'W') from tst; |4 |4 | |2 |2 | |3 |3 | |4 |4 | update tst set i=10,j=10 where i=1; select security(*,'R'),security(*,'W') from tst; |4 |4 | |2 |2 | |3 |3 | |4 |4 | set session default security ##NS#NS; |нарушение доступа|