无法在 oracle 视图中执行具有 public 同义词的函数

Cant execute a function with public synonym in oracle view

我有一些关于 oracle 权限的问题我不明白。我需要它的环境很复杂,但我会用一个较小的例子来描述:


有一个架构 math,其中包含一个函数和一个 public 同义词

数学

-> 函数:math.add

-> public同义词:add


然后有一个角色mathematician,其中包括授予执行该功能的权限

数学家

--> grant execute on math.add to mathematician


此角色已授予另一个模式bob

鲍勃

--> grant math to bob


现在的问题

我可以像 select add (1,2) from dual 一样在 bob 中使用 add 但我无法在使用 add

的 bob 中创建视图

尝试让我:

ORA-24344: success with compilation error
ORA-01031: insufficient privileges error

如果我将 add 上的执行权限直接授予 bob grant execute on math.add to bob,它会起作用。

这不是缺少创建视图权限之类的,它也将 add 标记为问题。

如果有人能解释为什么会发生这种情况并引导我解决这个问题,那就太好了。

谢谢!

非常感谢帕特里克。我试图在 google 和 Whosebug 上找到它,但没有成功。


"The owner must be granted these privileges directly, rather than through a role ..." 根据文档创建视图时。其中 "these" 指的是视图的依赖对象。请阅读 Alex Poole 对此 post、whosebug.com/questions/56189418/… 的回答。这应该可以解决您的问题。