Базы данных Oracle - статьи

         

Запрет делать то, результат чего не увидишь


Ситуация напоминает выводимую таблицу, view, где обладатель права изменять view может добавить через view в базовую таблицу строки, которые сам через view не увидит. Воспрепятствовать этому способно специальное ограничение целостности WITH CHECK OPTION. А можно ли здесь запретить выводить строки из зоны собственной видимости ? Да: для этого в параметре TABLE_OPTIONS достаточно указать специальный режим CHECK_CONTROL использования метки в таблице PHONE. Выдаем в SQL*Plus:

@phonepolicyoptions 'read_control, check_control'

Проверка:

SQL> CONNECT employee/employee Connected. SQL> @updateallen OPEN

1 row updated.

SQL> @updateallen LIMITED

UPDATE scott.phone * ERROR at line 1: ORA-28115: policy with check option violation

SQL> @updateallen OPEN

1 row updated.

В то же время пользователь HEAD, который «видит все», нового ограничения не заметит:

SQL> CONNECT head/head Connected. SQL> @updateallen OPEN

1 row updated.

SQL> @updateallen LIMITED

1 row updated.

SQL> @updateallen LIMITED

1 row updated.

SQL> @updateallen OPEN

1 row updated.



Содержание раздела