Создайте триггер ON Y.B
, но имейте триггер , которому принадлежит от X
. Таким образом, только триггер может выполнить INSERT
, а пользователь Y
не имеет другого доступа к другой таблице.
Этот код создает триггер:
create or replace trigger x.b_trg
after insert on y.b
for each row
begin
insert into x.a values(:new.some_column);
end;
/
Ниже приведен пример того, как пользователь Y
может вставить в Y.B
(который затем копируется в X.A
), но не может напрямую вставить в X.A
.
SQL> insert into y.b values(1);
1 row created.
SQL> insert into x.a values(2);
insert into x.a values(2)
*
ERROR at line 1:
ORA-00942: table or view does not exist
Приведенное выше решение предотвращает доступ, но не полностью его скрывает. Скрытие кода в Oracle затруднительно. Мы можем запутать код, но эту запутанность легко изменить с помощью онлайн-утилит. И есть другие способы выяснить зависимости, используя словарь данных.