Oracle存储过程的同义词和授权不按预期工作

时间:2012-09-07 16:59:33

标签: stored-procedures oracle11g database-schema toad

在Oracle中,当我在user1下创建存储过程时,在过程上创建公共同义词和将过程的执行权限授予用户'PUBLIC'之间有什么区别?

我的目标是:用户2应登录TOAD,转到模式浏览器,然后从下拉列表中选择PUBLIC模式,并能够查看并执行该过程。

我尝试给user2和PUBLIC提供执行授权,并且还创建一个PUBLIC同义词....但仍然没有运气。 user2无法在PUBLIC架构下看到该过程。

但有趣的是,当我以user2身份登录时,在TOAD(而非模式浏览器)中打开一个编辑器,然后我可以使用以下命令执行该过程:

BEGIN
PROC(arg1,arg2,arg3);
end;

1 个答案:

答案 0 :(得分:2)

Oracle synonym基本上允许您存在于其他地方的create a pointer to an object。您需要Oracle同义词,因为当您登录Oracle时,它会查找您在架构(帐户)中查询的所有对象。如果它们不在那里,它会给你一个错误,告诉你它们不存在或没有声明。

在你的情况下user1创建一个proc并且它将存在于他的schema中。对于user2,它只是指向它的指针。因此你无法在你的模式中看到他的对象或{{ 1}}。

由于user2有执行授权,所以这意味着当user2尝试从他的模式执行public schema时,它将尝试在他的模式中查找proc,如果他找到了proc,那么它将查看指针,他从同义词中找到。最后他找到proc并尝试执行它,因为proc有proc,这意味着任何用户都可以执行它们< / em>)然后它将能够执行public execute grants

如果您转到proc中的schema browser,则会找到toad的标签,您会在其中找到synonym的同义词proc架构甚至user2架构 抱歉英语不好:(