在Oracle中,当我在user1下创建存储过程时,在过程上创建公共同义词和将过程的执行权限授予用户'PUBLIC'之间有什么区别?
我的目标是:用户2应登录TOAD,转到模式浏览器,然后从下拉列表中选择PUBLIC模式,并能够查看并执行该过程。
我尝试给user2和PUBLIC提供执行授权,并且还创建一个PUBLIC同义词....但仍然没有运气。 user2无法在PUBLIC架构下看到该过程。
但有趣的是,当我以user2身份登录时,在TOAD(而非模式浏览器)中打开一个编辑器,然后我可以使用以下命令执行该过程:
BEGIN
PROC(arg1,arg2,arg3);
end;
答案 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
架构
抱歉英语不好:(