在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
的同义词.抱歉英语不好:(