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



在Oracle中,当我在user1下创建存储过程时,在过程上创建公共同义词和将过程的执行权限授予用户'public'有什么区别
我的目标是:用户2应该登录到TOAD中,转到模式浏览器,从下拉列表中选择PUBLIC模式,并能够查看和执行该过程。

我尝试向user2和PUBLIC授予执行权限,并创建一个PUBLIC同义词。。。。但仍然没有运气。user2看不到PUBLIC模式下的过程。

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

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

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

在您的案例中,user1创建了一个proc,它将存在于他的schema中。对于user2来说,它只是一个指针。所以你在你的模式或public schema中看不到他的对象。

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

如果你在toad中转到schema browser,你会发现synonym的选项卡,在那里你会发现在user2模式甚至public模式中都有proc的同义词.抱歉英语不好:(

最新更新