【问题标题】:Table insert not working in package B procedure when called from Package A procedure从包 A 过程调用时,表插入在包 B 过程中不起作用
【发布时间】:2019-06-04 15:13:58
【问题描述】:

当从另一个包 B(在用户 U2 中定义)调用时,我试图在过程(在用户 U1 的包 A 中定义)中插入编辑视图(view1 - 在表 table1 上定义)。权限不足导致此错误。

这是在 Oracle 12c 环境中。 table1 和 view1 由用户 U1 拥有。通过用户 U1 拥有的包 A 中的过程,有一个插入到 view1 中。包 B(在 U2 中)调用此过程来执行插入。 1) 在 U2 中为 U1.view1 创建了一个同义词(在 all_synonyms 中检查) 2) 有一个角色 (R1) 具有对 view1 的插入权限(在 ROLE_TAB_PRIVS 中检查) 3) 角色 R1 已分配给用户 U2(在 DBA_ROLE_PRIVS 中检查) 4) 角色 R1 是默认角色 5) 包 B 是定义者权限,包 A 是调用者权限 5) 一切都检查在同一个版本中

当角色分配给用户 U2 时,我希望插入发生在 view1 中。但它不会发生,它会因“权限不足”而出错。 但是当我明确地向用户 U2 授予在这个 view1 中的插入时,它就可以工作了。这是否意味着如果包 A 具有调用者权限,仅通过角色进行访问是不够的?

【问题讨论】:

    标签: oracle plsql user-roles sql-grant


    【解决方案1】:

    “这是否意味着如果包 A 具有调用者权限,仅通过角色访问是不够的”

    比这更简单。我们不能使用通过角色授予的权限来构建 PL/SQL 包、视图或触发器。这正是 Oracle 安全模型的工作方式。构建此类对象所需的所有权限都必须直接授予用户。

    另一个问题是,如果我们使用对另一个模式中的对象的权限来构建视图(或其他),并且我们希望将我们的视图的访问权限授予其他人,那么我们收到的权限必须通过 GRANT OPTION 授予。

    【讨论】:

      猜你喜欢
      • 2016-12-19
      • 2014-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多