第11章 シノニム(補足)

1.シノニムとは?

■シノニムとは?

データベース・オブジェクトに対して作成する別名のこと。この別名は実行時、本当の名前が解釈される。

■シノニムの特徴・利用目的

  1. シノニムを使えば、オブジェクト名をより簡単な名前で指定できる。
  2. 別ユーザのオブジェクトを自分のもののように(所有者を気にすることなく)利用できる。
  3. シノニムを作成するにはCREATE SYNONYMシステム権限が必要。
    (CONNECTロールに含まれている)
  4. シノニムは表やビューの別名だけでなく、順序(SEQUENCE)やストアド・プログラムの別名としても利用できるため、応用範囲は広い。

■シノニムの種類

1.プライベート・シノニム
スキーマ内でのみ有効なシノニム。ユーザが作成し、そのユーザ自身が使う。
2.パブリック・シノニム
Oracleデータベース全体で有効なシノニム。DBAユーザまたは、CREATE PUBLIC SYNONYM権限を持つユーザが作成し、シノニムの元となるオブジェクトの利用権限を持つユーザが利用できる。
各ユーザが所有するオブジェクト名と、パブリック・シノニムの名前が同じでも作成できる。(プライベート優先)
パブリック・シノニムを作成すれば、各ユーザからのオブジェクトの所有者を隠すことができる。

2.シノニムの作成

■構文

CREATE [PUBLIC] SYNONYM シノニム名
 FOR オブジェクト名;

例1)scottのemp表に、「社員表」という名前のプライベート・シノニムを作成する

  1. scottでログイン
  2. シノニムを作成
    CREATE SYNONYM 社員表 TO emp;
  3. 「社員表」で検索できるかを確認
    SELECT * FROM 社員表;
  4. 社員表のSELECT権限をPUBLICに与える
    GRANT select ON 社員表 TO public;
  5. 別のユーザでログイン(例、sakura)
  6. scottスキーマ内の「社員表」を検索
    SELECT * FROM scott.社員表;

※シノニムのSELECT権限を与えた場合、シノニムの元になっているオブジェクトのSELECT権限を与えた場合と同じ意味になる

例2)scottのemp表に、「社員表」という名前のパブリック・シノニムを作成する

  1. DBAユーザでログイン
  2. シノニムを作成
    CREATE SYNONYM 社員表 TO scott.emp;
  3. 「社員表」で検索できるかを確認
    SELECT * FROM 社員表;
  4. 社員表のSELECT権限をPUBLICに与える
    GRANT select ON 社員表 TO public;
  5. 別のユーザでログイン(例、sakura)
  6. パブリック・シノニムの「社員表」を検索
    SELECT * FROM 社員表;

※パブリック・シノニムを使用するときはスキーマ名を指定する必要がないため、シノニムの元になっているオブジェクトのスキーマ名を隠すことができる。

3.シノニムの確認

■シノニムを確認するデータ・ディクショナリ

1.USER_SYNONYMS
プライベート・シノニムを確認
2.ALL_SYNOMYMS
パブリック・シノニムも確認
パブリック・シノニムの場合はOWNER列が「PUBLIC」になる

《USER_SYNONYMSの列》

列名内容
SYNONYM_NAMEシノニム名
TABLE_OWNERオブジェクトの持ち主
TABLE_NAMEオブジェクト名
DB_LINKデータベースリンク

《ALL_SYNOMYMSの列(抜粋)》

列名内容
OWNERシノニムの持ち主

4.シノニムの削除

■構文

DROP [PUBLIC] SYNONYM シノニム名;

■POINT

  1. シノニムを削除しても、元のオブジェクトは残る。
  2. パブリック・シノニムを削除するにはPUBLICを指定する。
    DROP PUBLIC SYNONYMシステム権限が必要)

まとめ・補足

■シノニムの利用方法

1.CREATE SYNONYM 従業員表 FOR emp;
自分が持つemp表に「従業員表」と別名をつける。分かりやすい名前にはなったが、他のユーザは利用できない。
2.CREATE SYNONYM 従業員表 FOR scott.emp;
scottユーザが持つemp表に「従業員表」と別名をつける。通常「SELECT * FROM scott.emp;」としていたのを「SELECT * FROM 従業員表;」と、自分のオブジェクトのように利用できる。
3.CREATE PUBLIC SYNONYM 従業員表 FOR emp;
自分が持つemp表に「従業員表」と別名をつけ、全ユーザに開放する。他のユーザが「SELECT * FROM 従業員表;」とした場合、自分のemp表が参照される。

練習問題

問題1

scottユーザのemp表に対するプライベート・シノニムs_empを作成している文を選べ。

  1. CREATE SYNONYM scott.emp TO s_emp;
  2. CREATE SYNONYM s_emp TO scott.emp;
  3. CREATE SYNONYM s_emp FOR scott.emp;
  4. CREATE SYNONYM s_emp FOR scott.emp PRIVATE;
  5. CREATE PUBLIC SYNONYM s_emp FOR scott.emp;

問題2

DEVユーザが持つemp表をDBユーザ全員に開放したいため、パブリック・シノニムを作成する。

SQL > CONNECT dev/dev
SQL > CREATE USER end1 IDENTIFIED BY end1;
SQL > GRANT create session TO end1;
SQL > CREATE PUBLIC SYNONYM emp FOR emp;
SQL > CONNECT end1/end1
SQL > SELECT * FROM emp;

最後の検索結果を正しく説明している文はどれか答えよ。

  1. end1ユーザのオブジェクト権限が不足しているため、エラーになる。
  2. PUBLIC SYNONYMの設定が間違っているため、エラーになる。
  3. end1ユーザのシステム権限が不足しているため、エラーになる。
  4. devユーザのemp表が検索される。
  5. end1ユーザのemp表が検索される。

[ TOP ]