Oracle存储过程DB链接问题

时间:2010-06-30 20:02:27

标签: oracle stored-procedures plsql dblink

我有一个属于用户FOO的存储过程A。用户B拥有EXECUTE的{​​{1}}权限。

FOO中的一个过程使用数据库链接从FOO检索数据。 BARTABLE@REMOTEDBA的数据库链接以用户REMOTEDB连接,而AREMOTE有一个同名的DBLink连接到B,但是用户REMOTEDB }。

BREMOTE执行B时,它是否会使用FOO的数据库链接(连接为A)或AREMOTE的数据库链接(连接为B)?

我问,因为我假设属于特定用户的过程只能访问该用户的dblinks,即使其他用户在该过程中有BREMOTE。但是,即使用户EXECUTEAREMOTE上没有SELECT,这个程序也能正常运行,所以我很困惑。

1 个答案:

答案 0 :(得分:2)

该过程应使用为A链接定义的dblink。任何oracle过程都使用所有者的权限进行处理,除非该过程已使用“Invoker's Rights”定义。 Invoker's Rights

为过程定义的Invoker权限告诉代码使用调用用户本地的权限和对象,而不是代码所有者。默认情况下不执行此操作的原因通常是最终用户无权使用任何硬对象进行直接更新,但通过API进行适当访问,这将使用正确的业务逻辑进行更新,插入和删除,以及然后这些对象将被公开为最终用户可访问。