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-значений, то отката добавления записи не произойдёт.