1

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

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

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

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

1 回答 1

2

Oraclesynonym基本上允许您在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

如果你去schema browser你的toad,你会找到一个标签synonym,在那里你会发现你procuser2 模式甚至public模式中有同义词。抱歉英语不好:(

于 2012-09-07T22:51:32.513 回答