【问题标题】:Oracle SELECT granted but still can't access table across users已授予 Oracle SELECT 但仍无法跨用户访问表
【发布时间】:2013-11-11 07:15:19
【问题描述】:

谁能看出这是怎么回事:

用户 ABC:

create table def.something (
  id number,
  ref number references def.anotherTable(id)
);

create role ROUser;

grant select on def.something to ROUser;

grant ROUser to ghi;

用户 DEF:

select * from something;
...
X rows returned

用户 GHI:

select * from def.something;
ORA-00942: table or view does not exist

def.something 上有一个 GHI 无法访问的外键是否存在问题?


编辑我刚刚在另一台服务器上再次尝试过,它工作正常(即,如预期的那样)。不完全确定这里发生了什么,但我认为这可能与我的一些错误有关......因此,我投票结束这个问题。

【问题讨论】:

  • 如果你将grant select on def.something to ROUser; 作为 DEF 会发生什么?

标签: oracle permissions roles grant


【解决方案1】:

您很可能正在 PL/SQL 块中运行 SELECT 语句?在 PL/SQL 中,无法识别通过角色授予的权限。尝试在该表上添加直接SELECT 权限,看看它是否有效。

【讨论】:

  • 添加显式 grant select 确实可以解决问题,但上面的 GHI 示例并未在 PL/SQL 块中执行:它是直接 SQL。
  • @Xophmeister 很奇怪,我创建了所有对象和用户,它对我有用。您使用的是哪个数据库版本?您在哪里运行查询(SQLDeveloper?)?您可以尝试在def 架构中创建另一个表(最简单的一个数字列),将其上的选择授予ROUSer 角色并检查您是否可以以ghi 用户身份查询它?
  • 10gR2 通过 Oracle SQL Developer。尝试使用只有一个数字列的表,它可以按我的预期工作。此外,我无法在不同的服务器上复制问题......因此,我认为我做了一些愚蠢的事情,但还没有发现!投票结束(感谢您的帮助:)
  • 遇到同样的问题,尝试通过sqlplus运行select语句得到输出但在SQL developer中没有
猜你喜欢
  • 2016-12-02
  • 1970-01-01
  • 2021-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-27
  • 2021-01-01
相关资源
最近更新 更多