为什么我可以创建一个同义词,但没有给同一个表选择授予?

时间:2016-09-13 13:53:46

标签: oracle oracle10g database-schema grant synonym

我正在尝试授予从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

2 个答案:

答案 0 :(得分:2)

如果我有"创建任何SYNONYM |权限,我可以在模式2中的模式1中创建表的同义词,而无需对基础对象进行授权。如果我没有对schema1表(GRANT WITH GRANT OPTION)的权限重新授予其他用户,那么我也无法从该用户那里获得授权。

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

根据你的评论:

以schema1身份登录,并授予您希望schema2拥有的任何操作。

e.g)

SQL> GRANT SELECT,INSERT,UPDATE,DELETE on TABLE to SCHEMA2;

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

如果SCHEMA2将在视图中使用此表,然后它将授予对其他模式的选择访问权限,那么您需要添加" WITH GRANT OPTION"从schema1或schema2初始授予将无法重新授予其他用户权限。

答案 1 :(得分:2)

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

create synonym flub for blib;

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