仅允许更新触发器中的另一个模式

时间:2013-05-31 00:26:57

标签: oracle stored-procedures triggers database-permissions

我正在使用Oracle 11gR2,我有两个架构 - AB,每个架构都有一个类似的CUSTOMER表。

更新B.CUSTOMER后,我希望A.CUSTOMER发生相同的更新。模式A具有模式B的完全权限,但我希望模式B对模式A的权限尽可能少。

我在模式A A.UPDATE_CUSTOMER中编写了一个过程,该过程接受一个B.CUSTOMER%ROWTYPE变量并使用它来更新A.CUSTOMER,并将该过程的执行权授予模式B.

我在调用此更新过程的B.CUSTOMER上的更新触发器后为每一行创建了一个,并且它可以根据需要运行。但我认为用户B可以在触发器之外显式调用该过程,我不想允许这样做。

有没有办法阻止B在触发器外调用A.UPDATE_CUSTOMER?或者是否有其他方法可以阻止用户B在触发器之外更新A.CUSTOMER

1 个答案:

答案 0 :(得分:0)

我能想到这样做的唯一自然方式是禁止B的“创建会话”,并对用户C进行B模式的所有更改,并授予所需权限。 C当然不会拥有A模式的特权。

我认为触发器是隐式authid definer,但如果不是,则触发器可以调用一个过程。