Ситуация напоминает выводимую таблицу, 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.