Уровни мандатного доступа к записям по умолчанию

Функция

Задает RAL/WAL-уровни мандатного доступа по умолчанию для всех операций INSERT/UPDATE в текущем соединении с ядром СУБД ЛИНТЕР.

Примечание

Поддерживается только в СУБД ЛИНТЕР БАСТИОН.

Спецификация
   
< уровни по умолчанию мандатного доступа >::=
SET SESSION DEFAULT SECURITY
#[группа]#[RAL]#[WAL]
Общие правила
  1. Указанные метки доступа применяются ко всем операциям INSERT/UPDATE на всех ранее открытых дочерних каналах и на всех дочерних каналах, которые будут открыты позднее (т.е. указывать метки доступа в операциях INSERT/UPDATE станет обязательным только в том случае, если они отличаются от заданных в данной команде).

  2. Устанавливаемый уровень чтения не может превышать уровень чтения, уже установленный в канале (изначально в канале он берётся из описателя пользователя).

  3. Устанавливаемый уровень записи не может быть меньше уровня записи уже установленного в канале (изначально он также берётся из описателя пользователя).

  4. Команда устанавливает также и значения меток доступа для INSERT- или UPDATE-запросов (метка генерируется по задаваемой метке доступа для работы с объектами БД; алгоритм генерации тот же, что и при открытии канала).

  5. При попытке сменить группу будет выдан код завершения 1070 «Нарушение мандатного доступа» (т.е. нельзя работать в чужой группе).

  6. В отличие от команды 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;
|нарушение доступа|