我正在使用Oracle 11gR2,我有两个架构 - A
和B
,每个架构都有一个类似的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
?
答案 0 :(得分:0)
我能想到这样做的唯一自然方式是禁止B的“创建会话”,并对用户C进行B模式的所有更改,并授予所需权限。 C当然不会拥有A模式的特权。
我认为触发器是隐式authid definer,但如果不是,则触发器可以调用一个过程。