UPDATE, INSERT и MERGE операторы
<Метка доступа> в этих операторах может относиться как ко всей таблице (строке), например,
insert into auto<метка доступа> values (...);
так и отдельным полям, например,
insert into auto (PersonID<метка доступа>) values (10000);
В первом случае считается, что метка доступа относится ко всей строке, во втором – только к указанному полю.
Если пропущена <метка доступа> строки, то по умолчанию группа берется равной группе пользователя, а RAL-уровень и WAL-уровень устанавливаются как максимум RAL-уровня и WAL-уровня пользователя. То есть для пользователя U1 с <меткой доступа> #1#5#1 вносимые им данные будут иметь <метку доступа> #1#5#5.
Если в конструкции UPDATE для строки или для поля <метка доступа> не указана, она остается той же, что была до корректировки строки (поля), при условии, что определяемый ею уровень доступа разрешен пользователю для этой операции. В противном случае (когда, например, секретный пользователь меняет не секретные данные без указания уровней) выдается код завершения 1070 (Нарушение мандатного доступа).
Если задана <метка доступа> поля, то результирующий уровень доступа для поля и для записи устанавливается как максимум уровней записи и поля.
Пример.
create if not exists level "NS" = 1;
create if not exists level "DSP" = 2;
create if not exists level "S" = 3;
create if not exists level "C" = 4;
create if not exists level "CC" = 5;
drop user U1 cascade;
create or replace user U1 identified by '12345678';
grant dba to U1;
alter user U1 level("CC", "NS");
username U1/12345678
! <Метка доступа> таблицы ##5#1
create or replace table tab1 (id int LEVEL("CC","C"),
name char(10) LEVEL("CC","C"));
! <Метка доступа> записи/полей ##4#4
insert into TAB1##"C"#"C"(ID##"C"#"C",NAME##"C"#"C") values (101,'qwerty');
! <Метка доступа> записи/полей ##4#4
insert into TAB1##"S"#"S"(ID##"C"#"C",NAME##"C"#"C") values (102,'abcd');
! <Метка доступа> записи/полей ##4#4
insert into TAB1##"C"#"DSP"(ID##"C"#"C",NAME##"C"#"C") values (103,'zzzzzzzz');
insert into
! <Метка доступа> записи/полей ##5#5
TAB1(ID##"C"#"C",NAME##"C"#"C") values (104,'new');
! <Метка доступа> записи/полей ##5#5
insert into TAB1 values (105,'new2');
Примечания
-
Если для обновляемой таблицы задан псевдоним, то спецификация мандатной защиты должна стоять после этого псевдонима.
update
<имя таблицы>[AS<псевдоним>] [#[<группа>]#[<RAL>]#[<WAL>]] -
При добавлении новой записи с BLOB-значениями вставка BLOB-значений считается отдельной операцией и в случае, если в режиме AUTOCOMMIT ошибка произойдёт при вставке BLOB-значений, то отката добавления записи не произойдёт.