一、同义词
-
同义词是现有对象的一个别名。
简化SQL语句
隐藏对象的名称和所有者
提供对对象的公共访问
-
同义词共有两种类型:
公有同义词——可被所有的数据库用户访问。
CREATE PUBLIC SYNONYM emp_syn FOR SCOTT.emp;
私有同义词——只能在其模式内访问,且不能与当前模式的对象同名。
CREATE SYNONYM emp FOR SCOTT.emp;
-
创建私有同义词需要的权限:
grant create synonym to user;
-
创建共有同义词需要的权限:
grant create public synonym to user;
-
创建或替换现有的同义词
CREATE OR REPLACE SYNONYM emp_syn FOR SCOTT.emp;
-
删除同义词——不管是否拥有create synonym权限,都可以drop自己的非public的synonym,不管是谁创建的public 同义词,只能用sys或system进行drop
DROP SYNONYM emp;
DROP PUBLIC SYNONYM emp_syn;
问题:如果用户scott创建了共有同义词create synonym empt for emp;用户test1 没有对emp的权限,需要scott或sys给test1赋予select on的权限,即可访问公共同义词empt了
二、tab是什么
1、select * from 通过all_objects查看当前用户所拥有的对象权限;
SQL>select * from all_objects a where a.object_name='TAB'
可以看到tab是public的同义词
2、通过user_synonyms查看tab具体的是什么
SQL>select * from user_synonyms u where u.synonym_name='TAB';——查询为空,user_synonyms是私有同义词用户表,此处应该使用public同义词
SQL>select * from all_synonyms u where u.synonym_name='TAB';——查询到,tab是sys用户的tab表。
3、从上看,tab是一个表,是sys的tab表的共有同义词tab,且是public。而且,每个用户通过同义词tab查看的,是自己用户下的表。
文章评论