【问题标题】:Oracle stored procedure synonyms and grants not working as expectedOracle 存储过程同义词和授权未按预期工作
【发布时间】:2012-09-01 14:12:25
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: stored-procedures oracle11g database-schema toad


    【解决方案1】:

    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 架构甚至@987654336 中都有proc 的同义词@模式 .抱歉英语不好:(

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多