2013-05-31 2 views
0

Я использую Oracle 11gR2, и у меня есть две схемы: A и B, каждая из которых имеет аналогичную таблицу CUSTOMER.Разрешить обновление только другой схемы в триггере

Когда обновляется B.CUSTOMER, я хочу, чтобы обновления были обновлены до A.CUSTOMER. Схема A имеет полные привилегии для схемы B, но я хочу, чтобы схема B имела как можно меньше привилегий на схеме A.

я написал процедуру, описанную в схеме А, A.UPDATE_CUSTOMER, которая принимает B.CUSTOMER%ROWTYPE переменную и использует его для обновления A.CUSTOMER и предоставивший выполнить по процедуре Schema B.

я создал для каждой строки после запуска обновления на B.CUSTOMER, который вызывает эту процедуру обновления и работает по желанию. Но я думаю, что пользователь B может явно вызвать процедуру за пределами триггера, и я не хочу этого допускать.

Есть ли способ предотвратить A.UPDATE_CUSTOMER от вызова B вне спускового крючка? Или существует какой-то другой способ предотвратить изменение пользователем B A.CUSTOMER за пределами триггера?

ответ

0

Единственный естественный способ, которым я могу думать, заключается в том, чтобы запретить «создавать сеанс» для B и иметь все изменения в схеме B, сделанные пользователем C, которому предоставлены необходимые привилегии для этого. C, конечно, не будет иметь привилегии по схеме A.

Я считаю, что триггеры неявно authid definer, но если бы триггер не мог вызвать процедуру, которая есть.

Смежные вопросы