Stored procedures Oracle存储过程同义词和授权未按预期工作
在Oracle中,当我在user1下创建存储过程时,在过程上创建公共同义词和将过程上的执行权限授予用户“public”有什么区别?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
我的目标是:用户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
模式中
.对不起,英语不好:(