为啥我可以创建同义词但不能为同一个表授予授权选择?
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;
...所以您能够创建同义词这一事实并不意味着对象存在。
【讨论】:
以上是关于为啥我可以创建同义词但不能为同一个表授予授权选择?的主要内容,如果未能解决你的问题,请参考以下文章