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

Stored procedures Oracle存储过程同义词和授权未按预期工作,stored-procedures,oracle11g,database-schema,toad,Stored Procedures,Oracle11g,Database Schema,Toad,在Oracle中,当我在user1下创建存储过程时,在过程上创建公共同义词和将过程上的执行权限授予用户“public”有什么区别? 我的目标是:用户2应该登录TOAD,进入模式浏览器,从下拉列表中选择公共模式,并能够查看和执行该过程 我尝试将执行授权授予user2和PUBLIC,还创建了一个PUBLIC同义词……但仍然没有成功。user2无法查看公共架构下的过程 但有趣的是,当我以user2身份登录时,在TOAD中打开一个编辑器(不是模式浏览器),然后我可以使用以下命令执行该过程: BEGIN

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

我尝试将执行授权授予user2和PUBLIC,还创建了一个PUBLIC同义词……但仍然没有成功。user2无法查看公共架构下的过程

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

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

Oracle
同义词
基本上允许您创建指向其他地方存在的对象的指针。您需要Oracle同义词,因为当您登录到Oracle时,它会在您的模式(帐户)中查找您正在查询的所有对象。如果它们不存在,它将给您一个错误,告诉您它们不存在或未声明

在你的例子中,
user1
创建一个proc,它将存在于他的
schema
中。对于user2,它只是一个指向它的指针。因此你在你的schema或
公共schema
中看不到他的对象

因为user2有执行授权,所以这意味着当user2尝试从他的模式执行
proc
时,它将尝试在他的模式中查找
proc
,如果他无法找到proc,那么它将查找从同义词中找到的指针。最后他找到
proc
,并尝试执行它,由于proc具有
公共执行授权
(这意味着任何用户都可以执行这些授权),因此它将能够执行
proc

如果您在
toad
中进入
schema浏览器
,您会发现
synonym
的选项卡,您会发现
proc
的同义词出现在
user2
模式中,甚至出现在
public
模式中 .对不起,英语不好:(