【问题标题】:SELECT privilege granted through direct grant and through a role [duplicate]通过直接授予和通过角色授予的 SELECT 特权[重复]
【发布时间】:2018-06-07 21:20:13
【问题描述】:

我拥有通过 Oracle 角色授予的 SELECT 权限,并且可以查看特定表中的数据。 (我的 acc 拥有(或属于)为特定表授予 SELECT 权限的角色。

但是为了使 VIEW 或 PROCEDURE 可以从同一个表中选择数据,我必须直接授予我的 acc SELECT 权限!

这是为什么呢?为什么通过角色 SELECT 授权是不够的?

【问题讨论】:

标签: oracle plsql privileges


【解决方案1】:

角色在 PL/SQL 过程中被关闭。您可以模拟您在没有角色的情况下看到的内容

SET ROLE NONE;

您可以通过

查看您当前的角色
SELECT * FROM session_roles;

重新打开它们:

SET ROLE ALL;

我不知道 Oracle 是否曾给出关闭角色的原因。我一直认为这是为了提高性能。在每次执行之前,都会检查您是否有权访问查询中的所有表。如果您允许可以授予其他角色的角色,则需要相当复杂的树/图查询来确定访问是否正常。仅使用直接权限,这具有线性复杂性。

【讨论】:

  • 在这里解释:asktom.oracle.com/pls/apex/… 基本上角色是临时的,可以启用、禁用、密码保护等,但编译器需要在编译时确切知道它的位置。
  • @WilliamRobertson 感谢您的链接!我喜欢 Tom 的区别“角色适用于……最终用户”,而直接权限适用于应用程序对象。
猜你喜欢
  • 2021-04-07
  • 2017-02-03
  • 2018-03-21
  • 1970-01-01
  • 1970-01-01
  • 2020-11-30
  • 2018-07-24
  • 2019-05-16
  • 2016-11-19
相关资源
最近更新 更多