【发布时间】:2015-08-08 06:51:46
【问题描述】:
执行 PL/SQL 块时,授予角色的任何权限都将被忽略。相反,您必须授予特定用户特定的授权才能运行它。如果我想授予 DBA 访问包、函数或过程的权限,我不能授予 DBA 角色授权。我必须为 DBA 角色中的每个用户授予授权,如果用户不再是 DBA,我必须删除他们的授权,并且我必须将授权添加到任何新的 DBA。
我发现这很难维护。
我的问题是为什么 PL/SQL 会这样工作? Oracle 做了哪些设计考虑来决定角色和 PL/SQL 应该如何协同工作?我一直找不到不是“就是这样”的答案。
【问题讨论】:
-
Tom kyte has a likely explanation:它可能会导致难以维护的依赖链(角色影响到角色影响到角色...)。
-
这就是为什么您可能要指定一个特殊的functional用户ID来编译函数、过程和包的原因之一。
-
您所描述的似乎没有意义。或者至少你遗漏了一些重要的要求。如果您拥有定义者权限存储过程,则可以通过角色向用户授予对该过程的访问权限,并且该用户拥有调用它所需的所有权限。用户将无法创建自己的存储过程来调用此过程,但通常有很多用户需要调用过程而很少需要定义自己的过程。让人类用户拥有生产对象通常会使事情变得一团糟。