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 '12345'; grant dba to U1; alter user U1 level("CC", "NS"); username U1/12345 ! <Метка доступа> таблицы ##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-значений, то отката добавления записи не произойдёт.