[现象]:
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存在的用途。
可以为一个基本建立多个不同的同义词。