■シノニムとは?
データベース・オブジェクトに対して作成する
別名のこと。この別名は実行時、本当の名前が解釈される。■シノニムの特徴・利用目的
- シノニムを使えば、オブジェクト名をより簡単な名前で指定できる。
- 別ユーザのオブジェクトを自分のもののように(所有者を気にすることなく)利用できる。
- シノニムを作成するには
CREATE SYNONYMシステム権限が必要。
(CONNECTロールに含まれている)- シノニムは表やビューの別名だけでなく、順序(SEQUENCE)やストアド・プログラムの別名としても利用できるため、応用範囲は広い。
■シノニムの種類
- 1.プライベート・シノニム
- スキーマ内でのみ有効なシノニム。ユーザが作成し、そのユーザ自身が使う。
- 2.パブリック・シノニム
- Oracleデータベース全体で有効なシノニム。DBAユーザまたは、
CREATE PUBLIC SYNONYM権限を持つユーザが作成し、シノニムの元となるオブジェクトの利用権限を持つユーザが利用できる。
各ユーザが所有するオブジェクト名と、パブリック・シノニムの名前が同じでも作成できる。(プライベート優先)
パブリック・シノニムを作成すれば、各ユーザからのオブジェクトの所有者を隠すことができる。
■構文
CREATE [PUBLIC] SYNONYM シノニム名
FOR オブジェクト名;
- CREATE SYNONYMシステム権限が必要。
- PUBLICを指定すると、パブリック・シノニムになる。その場合はCREATE PUBLIC SYNONYMシステム権限が必要。
- シノニムは、元のオブジェクトが存在しなくても作成できる。
(作成後、シノニムを利用できるかどうかテストするべきである)例1)scottのemp表に、「社員表」という名前のプライベート・シノニムを作成する
- scottでログイン
- シノニムを作成
CREATE SYNONYM 社員表 TO emp; - 「社員表」で検索できるかを確認
SELECT * FROM 社員表; - 社員表のSELECT権限をPUBLICに与える
GRANT select ON 社員表 TO public; - 別のユーザでログイン(例、sakura)
scottスキーマ内の「社員表」を検索
SELECT * FROM scott.社員表;※シノニムのSELECT権限を与えた場合、シノニムの元になっているオブジェクトのSELECT権限を与えた場合と同じ意味になる
例2)scottのemp表に、「社員表」という名前のパブリック・シノニムを作成する
- DBAユーザでログイン
- シノニムを作成
CREATE SYNONYM 社員表 TO scott.emp;- 「社員表」で検索できるかを確認
SELECT * FROM 社員表; - 社員表のSELECT権限をPUBLICに与える
GRANT select ON 社員表 TO public; - 別のユーザでログイン(例、sakura)
- パブリック・シノニムの「社員表」を検索
SELECT * FROM 社員表;※パブリック・シノニムを使用するときはスキーマ名を指定する必要がないため、シノニムの元になっているオブジェクトのスキーマ名を隠すことができる。
■シノニムを確認するデータ・ディクショナリ
- 1.USER_SYNONYMS
- プライベート・シノニムを確認
- 2.ALL_SYNOMYMS
- パブリック・シノニムも確認
パブリック・シノニムの場合はOWNER列が「PUBLIC」になる《USER_SYNONYMSの列》
列名 内容 SYNONYM_NAME シノニム名 TABLE_OWNER オブジェクトの持ち主 TABLE_NAME オブジェクト名 DB_LINK データベースリンク 《ALL_SYNOMYMSの列(抜粋)》
列名 内容 OWNER シノニムの持ち主
■構文
DROP [PUBLIC] SYNONYM シノニム名; ■POINT
- シノニムを削除しても、元のオブジェクトは残る。
- パブリック・シノニムを削除するには
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を作成している文を選べ。
- CREATE SYNONYM scott.emp TO s_emp;
- CREATE SYNONYM s_emp TO scott.emp;
- CREATE SYNONYM s_emp FOR scott.emp;
- CREATE SYNONYM s_emp FOR scott.emp PRIVATE;
- 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;最後の検索結果を正しく説明している文はどれか答えよ。
- end1ユーザのオブジェクト権限が不足しているため、エラーになる。
- PUBLIC SYNONYMの設定が間違っているため、エラーになる。
- end1ユーザのシステム権限が不足しているため、エラーになる。
- devユーザのemp表が検索される。
- end1ユーザのemp表が検索される。