我正在尝试授予从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
答案 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;
...所以你能够创建同义词的事实并不意味着对象存在。