Уровни мандатного доступа к записям по умолчанию
Функция
Задает 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 '12345678';
grant DBA to "TEST";
username TEST/12345678
create or replace table tst (i int, j int);
insert into tst values(1,1);
username SYSTEM/MANAGER8
alter user TEST level ("DSP","DSP");
username TEST/12345678
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/MANAGER8
alter user TEST level ("CC","CC");
username TEST/12345678
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;
|нарушение доступа|