为啥我可以创建同义词但不能为同一个表授予授权选择?

Posted

技术标签:

【中文标题】为啥我可以创建同义词但不能为同一个表授予授权选择?【英文标题】:Why I can create a synonym but no give grant select to the same table?为什么我可以创建同义词但不能为同一个表授予授权选择? 【发布时间】:2016-09-13 13:53:46 【问题描述】:

我正在尝试授予对从 schema1 到 schema2 (oracle10g) 的表的访问权限。

我在 schema2 上创建了一个同义词:

CREATE SYNONYM schema2.table FOR schema1.table;

已成功创建同义词。

然后我尝试在同一张表上授予选择:

grant select on schema1.table to schema2;

我明白了:

ORA-00942: table or view does not exist 

这对我来说没有意义。我能够创建同义词,但不能创建授权。我做错了什么?

我无法从 schema2 获取表:

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

【问题讨论】:

请记住,赠款是给予的,而不是接受的。 Schema2 不能授予自己对 Schema1 对象的权限(除非它是 DBA 帐户)。授权必须来自 Schema1,允许 Schema2 访问其对象。 【参考方案1】:

如果我有“CREATE ANY SYNONYM|”权限,我可以在模式 2 中为模式 1 中的表创建同义词,而无需授予基础对象。如果我没有 schema1 表的权限(GRANT WITH GRANT OPTION) 重新授权给另一个用户,那么我也不能从这个用户那里进行授权。

解决方案,以 schema1 登录并在那里进行授权,然后同义词将在 schema2 下工作,或者确保我登录下的用户有权授予 schema1 对象的授权。

根据您的评论:

以 schema1 登录并授予您希望 schema2 对您的表执行的任何操作。

例如)

SQL> 将 TABLE 上的 SELECT、INSERT、UPDATE、DELETE 授予 SCHEMA2;

然后,SCHEMA2 将能够通过其同义词查看该表,并允许对其进行这些操作。

如果 SCHEMA2 打算在视图中使用此表,然后它将授予对其他架构的选择访问权限以使用,那么您需要将“WITH GRANT OPTION”添加到来自 schema1 的初始授权,否则 schema2 将无法重新授予其他用户权限。

【讨论】:

我应该对 schema1 做什么授权?我应该检查 schema2 的哪些特定权限?【参考方案2】:

您可以为实际上不存在的对象创建同义词,例如

create synonym flub for blib;

...所以您能够创建同义词这一事实并不意味着对象存在。

【讨论】:

以上是关于为啥我可以创建同义词但不能为同一个表授予授权选择?的主要内容,如果未能解决你的问题,请参考以下文章

授予指定列的同义词的选择

Oracle怎样创建同义词

oracle 授权select 给别的用户后,为啥select的时候,还要加上表拥有者的用户名。

OCP 071中文考试题库(cuug整理)第45题

oracle 赋予权限后,查询却显示表或视图不存在

oracle同义词