我有一个属于用户FOO
的存储过程A
。用户B
拥有EXECUTE
的{{1}}权限。
FOO
中的一个过程使用数据库链接从FOO
检索数据。 BARTABLE@REMOTEDB
有A
的数据库链接以用户REMOTEDB
连接,而AREMOTE
有一个同名的DBLink连接到B
,但是用户REMOTEDB
}。
当BREMOTE
执行B
时,它是否会使用FOO
的数据库链接(连接为A
)或AREMOTE
的数据库链接(连接为B
)?
我问,因为我假设属于特定用户的过程只能访问该用户的dblinks,即使其他用户在该过程中有BREMOTE
。但是,即使用户EXECUTE
在AREMOTE
上没有SELECT
,这个程序也能正常运行,所以我很困惑。
答案 0 :(得分:2)
该过程应使用为A链接定义的dblink。任何oracle过程都使用所有者的权限进行处理,除非该过程已使用“Invoker's Rights”定义。 Invoker's Rights
为过程定义的Invoker权限告诉代码使用调用用户本地的权限和对象,而不是代码所有者。默认情况下不执行此操作的原因通常是最终用户无权使用任何硬对象进行直接更新,但通过API进行适当访问,这将使用正确的业务逻辑进行更新,插入和删除,以及然后这些对象将被公开为最终用户可访问。