1. 程式人生 > >Oracle 11g 資料庫物件-同義詞

Oracle 11g 資料庫物件-同義詞

SQL> remark 同義詞:Oracle為了方便對資料的 操作,允許使用者建立物件的別名,用於簡化查詢的語句,這個別名稱為同義詞;
SQL> remark 同義詞的分類:公有同義詞 私有同義詞
SQL> remark 公有同義詞:所有的物件都可以進行訪問
SQL> remark 私有同義詞:只有建立者能訪問;
SQL> remark 建立同義詞的許可權:create any synonym   drop any synonym;
SQL> remark 建立一個表空間
SQL> create tablespace HOPESPACE
  2  datafile 'd:\hopespace.dbf'

  3  size 30m
  4  autoextend on;

Tablespace created.

SQL> remark 建立一個使用者 hope
SQL> create user hope
  2  identified by hope123
  3  default tablespace hopespace
  4  temporary tablespace temp;

User created.

SQL> remark 給新建的使用者進行系統許可權授權
SQL> grant connect to hope;

Grant succeeded.

SQL> grant resource to hope;


Grant succeeded.

SQL> remark 現在:新建的使用者作業系統預設(預設)使用者scott;
SQL> remark 系統給使用者授予建立和刪除同義詞的許可權
SQL> grant create any synonym to hope;

Grant succeeded.

SQL> grant drop any synonym to hope;

Grant succeeded.

SQL> remark 連線scott 使用者 ,]
SQL> conn scott/tiger;
Connected.
SQL> remark scott 使用者給hope使用者授予emp表的使用許可權

SQL> grant all on emp to hope;

Grant succeeded.

SQL> remark 連線hope賬戶,並建立同義詞
SQL> conn hope/hope123;
Connected.
SQL> create synonym myemp for scott.emp;

Synonym created.

SQL> remark 通過同義詞查詢表的資訊
SQL> select empno,job,sal from myemp;

     EMPNO JOB              SAL                                                 
---------- --------- ----------                                                 
      7369 CLERK            800                                                 
      7499 SALESMAN        1600                                                 
      7521 SALESMAN        1250                                                 
      7566 MANAGER         2975                                                 
      7654 SALESMAN        1250                                                 
      7698 MANAGER         2850                                                 
      7782 MANAGER         2450                                                 
      7788 ANALYST         3000                                                 
      7839 PRESIDENT       5000                                                 
      7844 SALESMAN        1500                                                 
      7876 CLERK           1100                                                 

     EMPNO JOB              SAL                                                 
---------- --------- ----------                                                 
      7900 CLERK            950                                                 
      7902 ANALYST         3000                                                 
      7934 CLERK           1300                                                 

14 rows selected.

SQL> remark 注:使用者在使用同義詞物件的時候,對同義詞操作的許可權等同於所依賴的物件的許可權;即:使用同義詞是,依賴的物件必須是授權過的;
SQL> remark ..............公有同義詞.........................
SQL> remark 許可權:create public synonym  drop public synonym
SQL> remark 建立公有同義詞的使用者必須擁有上面的兩個許可權
SQL> remark 其他的使用者操作同義詞的時候要依賴同義詞所關聯的物件;
SQL> remark 給hope 使用者授予建立公有同義詞的許可權
SQL> conn system/manager;
Connected.
SQL> grant  create public synonym to hope;

Grant succeeded.

SQL> grant drop public synonym to hope;

Grant succeeded.

SQL> reamrk 登陸hope使用者,並建立公有同義詞
SP2-0734: unknown command beginning "reamrk 登..." - rest of line ignored.
SQL> edit
Wrote file afiedt.buf

  1* grant drop public synonym to hope
SQL> remark 登陸hope使用者,並建立公有同義詞
SQL> conn hope/hope123;
Connected.
SQL> create public synonym pubemp for scott.emp;

Synonym created.

SQL> remark 另外建立一個使用者,並使用這個公有同義詞
SQL> conn system/manager;
Connected.
SQL>
  1  create user hope1
  2* identified by hope1123
  3  /

User created.

SQL> remark 給新建的使用者授予系統許可權
SQL> grant connect to hope1;

Grant succeeded.

SQL> grant resource to hope1;

Grant succeeded.

SQL> remark 連線hope1使用者使用公有同義詞
SQL> conn hope1/hope1123;
Connected.
SQL> remark 由於scott並沒有授權給hope1這個使用者相關物件的許可權,所有hope1並不能使用該公有同義詞
SQL> remark 給hope1進行授權
SQL> conn scott/tiger;
Connected.
SQL> grant all on emp to hope1;

Grant succeeded.

SQL> conn hope1/hope1123;
Connected.
SQL> select empno,ename,sal from pubemp;

SQL> remark 連線hope使用者進行使用公有同義詞
SQL> conn hope/hope123;
Connected.
SQL> select empno,ename from pubemp;
SQL> remark ..................................................................
SQL> remark ..................................................................
SQL> remark 建立公有同義詞
SQL> create public synonym pubemp for scott.emp;
create public synonym pubemp for scott.emp
                      *
ERROR at line 1:
ORA-00955: name is already used by an existing object 


SQL> remark ..................................................................
SQL> remark 刪除同義詞
SQL> drop synonym myemp;

Synonym dropped.

SQL> drop synonym pubemp;
drop synonym pubemp
             *
ERROR at line 1:
ORA-01434: private synonym to be dropped does not exist 


SQL> spool off;