[现象]:

Sys账户给bisal账户的t_emp表创建public同义词,bisal用户可以访问t_emp_syn,但scott账户无法查询,select ... t_emp_syn提示表或视图不存在。

SQL> select * from t_emp_syn;

select * from t_emp_syn

              *

ERROR at line 1:

ORA-00942: table or view does not exist

[原因]:

Scott没有bisal.t_emp表的访问权限,因此提示表或视图不存在。

[解决]:

使用bisal,执行grant select on t_emp to scott;

使用scott,可以执行t_emp_syn。

SQL> select * from t_emp_syn;

     EMPNO EN     DEPTNO

 ---------- --  ----------

         1  c       1

         2  d       2

         3  f       0

        10  1       1

        12  1a      1

[总结]:

Public同义词,一个用户A若需要访问另一个用户B建立的表的同义词,则需要有用户B该表(也就是基表)的访问权限。

若是普通同义词,DBA用户可以访问任何用户创建的非public同义词,但不同的普通用户之间,除非授予基表的访问权限,否则不能随意访问其它用户的非public同义词,这也是public存在的用途。

可以为一个基本建立多个不同的同义词。