同义词
为了查阅另一个用户所拥有的表,你需要将创建该表的用户名加句点作为前缀加在表名前面。创建一个同义词可以除去对象名必须带的方案限制,并提供给你一个可替换表名、视图名、序列名和过程名或其它对象名。该方法对具有特别长的对象的名字很有用。语法:
CREATE or replace PUBLIC SYNONYM dept FOR alice.departments; ---为 Alice 的 DEPARTMENTS 表创建一个公共同义词
DROP PUBLIC SYNONYM dept; ---只有管理员能删除公有同义词
注意事项:
1、公共同义词与私有同义词可以同名。如果存在公共同义词和私有同义词同名的情况,那么在访问同义词时,访问的是私有同义词所指向的对象。
2、不能创建和当前用户下的表名相同的私有同义词,但是可以创建和当前用户下的表名相同的公共同义词。
3、不能访问与当前用户下的表名相同的公共同义词。Oracle 选择访问对象的顺序原则是先 SCHEMA 后PUBLIC。通过访问同义词就相当于访问其他 SCHEMA 对象的表,但是,当创建的同义词和其他对象重名的时候,有可能在查询时却指向了另一个同名的对象,导致无法访问到正确的数据。
PLAN_TABLE 表真谛
为准确判断优先性,清空 plan_table 表数据 ---
SQL> truncate table plan_table;
如果 plan_table 不存在,则生成 PLAN_TABLE 表
SQL> @?/rdbms/admin/utlxplan.sql
SELECT D.OWNER, D.OBJECT_NAME, D.OBJECT_TYPE FROM DBA_OBJECTS D WHERE D.OBJECT_NAME = 'PLAN_TABLE';
SELECT * FROM DBA_SYNONYMS D WHERE D.SYNONYM_NAME = 'PLAN_TABLE';

SELECT D.OWNER,D.TABLE_NAME,D.TABLESPACE_NAME,DECODE(D.DURATION,'SYS$SESSION','会话级','SYS$TRANSACTION','事务级') 临时表类型,D.DURATION,D.TEMPORARY FROM DBA_TABLES D WHERE D.TABLE_NAME = 'PLAN_TABLE$';

测试系统的 PLAN_TABLE 同义词:
EXPLAIN PLAN FOR SELECT * FROM DUAL;
SELECT * FROM PLAN_TABLE;
查看当前用户是否含有 PLAN_TABLE 表:
SELECT * FROM TAB WHERE TNAME='PLAN_TABLE';
为何 SYSTEM 用户可以将 V$SESSION 的查询权限赋权给其他用户而 SYS 用户却不可以?
SELECT d.owner,d.object_name,d.object_type FROM Dba_Objects d WHERE d.object_name IN ( 'V$SESSION','V_$SESSION');
SELECT d.owner,d.synonym_name,d.table_owner,d.table_name FROM DBA_SYNONYMS D WHERE D.synonym_name IN ( 'V$SESSION','V_$SESSION');
SELECT D.OWNER,D.NAME,D.TYPE,D.REFERENCED_OWNER,D.REFERENCED_NAME,D.REFERENCED_TYPE FROM DBA_DEPENDENCIES D WHERE D.NAME IN ('V$SESSION', 'V_$SESSION');
SELECT * FROM V$FIXED_TABLE d WHERE d.NAME IN ('V$SESSION','V_$SESSION','GV$SESSION');
通过以上查询可以看到,V$SESSION 属于公共同义词,它来源于 SYS.V_$SESSION 私有视图,而该视图又来源于系统底层表 SYS.V$SESSION,而系统底层表 SYS.V$SESSION 又来源于系统底层表SYS.GV$SESSION。
Oracle 选择访问对象的顺序原则是先 SCHEMA 后 PUBLIC。所以,对于 SYS 用户而言,他查询 V$SESSION视图其实是查询的系统底层表 SYS.V$SESSION。对于系统底层表,是不能直接做赋权操作的。所以,SYS 用户在将该视图赋权给其他用户的时候就会报错。而对于 SYSTEM 用户而言,他查询 V$SESSION 视图其实是查询的PUBLIC 这个特殊用户下的公共同义词,而公共同义词是可以做赋权操作的。

浙公网安备 33010602011771号