Для других пользователей, Как скрыть владельца объекта Oracle таблицы - PullRequest
2 голосов
/ 27 июня 2019

Существует оригинальная таблица «A», принадлежащая учетной записи DBA «X», и предоставляет временную временную таблицу «B», которая вставляется в таблицу «A» для сторонней учетной записи «Y».Потому что вы не можете дать «Y» привилегию DML для таблицы «A», когда владелец таблицы «B» создан как «X». Как владелец «B» может скрыть «X» от «Y»?

Если я не могу спрятаться, владельцем таблицы «A» является «X», владельцем таблицы «B» является «Y», без предоставления DML-привилегии таблицы «A» для »Y ", дать" Y "только привилегию DML для таблицы" B ", я хочу создать триггер вставки для таблицы" B ".Вставьте «А» в таблицу.То есть в любом случае «Y» не должен знать имя «X».Возможно ли это?

1 Ответ

1 голос
/ 27 июня 2019

Создайте триггер 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 затруднительно. Мы можем запутать код, но эту запутанность легко изменить с помощью онлайн-утилит. И есть другие способы выяснить зависимости, используя словарь данных.

...