同义词
同义词是给对象起的别名。同义词作用是方便好记,不直接显示出对象的名字,起到保护对象的作用。下面记下同义词的用法:
-------私有同义词
Scott用户创建同义词,报权限问题,由于一般用户默认的resource里不含创同义词的权限,数据库会认为dba想刻意的隐藏一个对象,所以没权限。
赋予权限后,创建私有同义词sy1成功。
查看私有同义词sy1和查看表emp一样,描述也一样。同时注意select *语句后面可以是一张表,也可能是这个表的同义词。
字典dba_objects可以查询对象类型,由此可以查询对象是表还是同义词:sy1为同义词。
Select OWNER,OBJECT_NAME,OBJECT_TYPE from dba_objects where OBJECT_NAME=’SY1’;
同义词创建时参考了谁可以看字典dba_synonyms,如下scott的同义词sy1创建时参考了scott的emp表。
Select OWNER,SYNONYM_NAME,TABLE_OWNER,TABLE_NAME from dba_synonyms where synonym_name=’SY1’;
如果再创表sy1是无法创建的,因为同一用户下是不允许有同名的对象的。
注:SCOTT创建的私有同义词只能SCOTT来用,要想别的用户来用除非SCOTT授权。
------共有同义词
同义词分两类,私有和共有。但本质都是给对象起别名。
语法:
创建同样需要管理员授权,
Scott创建共有同义词zs
Scott同时创建一张表也叫zs,是可以的。
注:如果是共有同义词,是允许创建同名对象的。同一用户下,是不可能有同名的对象的,是因为同义词没有创在scott的用户下,否则这个表创不成功的。
用管理员查询owner,zs创建给了共有同义词用户
注:只要一个用户具备共有同义词权限,他创建的同义词都放到public用户下,这个public用户是默认创好的,但是放心这个用户不可以登录,不用怀疑同义词没有了,因为这个用户是不可以登陆的。这是zs表,虽然同名,但是一个是public,一个是scott。
如果select * from zs; 这句话到底读谁呢,查的是表,同义词参考emp表。但是如果把表zs删掉,再查只能查同义词了,也就是自己有先读自己的,没有再读共有同义词。
用u1用户查看scott的共有同义词zs,需要赋权再查看,不用加”scott.”,
用u1用户查看scott的私有同义词sy1,同样需要赋权底层表emp再查看,必须加”scott.”,
删共有同义词:后面+名字,删私不要public。
用户看自己的同义词也支持,这是u1用户的
两个字典对比:user_synonyms没有owner,所以user_synonyms只能查自己的,dba查谁都可以。
假如想让u1用户也能查dba_synonyms这个字典,可以授权给u1。