シノニム

シノニムとは、ある スキーマオブジェクト、非スキーマオブジェクト へのエイリアス(別名)である。
主にセキュリティや別スキーマ(リモート含む)オブジェクトに対して透過的にアクセスするために使用される。

プライベート・シノニム

プライベート・シノニムとは、ある特定ユーザーだけに所有された別名である。

シノニムを使用する基本的かつ有効で代表的な利用方法のひとつに、表のオーナ(管理者)とユーザー(閲覧者)を切り分ける、または、複数ユーザーでスキーマを共有するという使用方法がある。

切り分ける場合の例として、表の管理者(ADMIN)、閲覧者=プログラム(WORKER) と二つのユーザー(スキーマ)を用意し、表の所有者は ADMIN とする。 所有者を ADMIN とすることで WORKER には特別な権限を付与しないかぎり ADMIN の表にはアクセスできない。
ここでのポイントは WORKER が ADMIN の表の定義を変更したり削除できないことにある。

WORKER には ロール を使用するか個別に SELECT や UPDATE などのオブジェクト権限を付与するが、 テーブルにアクセスするには ADMIN.table_name とスキーマの指定しなければならない。 そこで、WORKER に ADMIN のテーブルのシノニム(別名※)を定義する。

(※) スキーマが異なるので同じ名前でもよいし、一般的には同じ名前になっている事が非常に多い。

シノニムを定義するとスキーマ部の記述は省略可能となり、WORKER はテーブルの所有者を意識する必要がなくなる。 参照先が変更されても透過的に扱うことができる。*1

上記の内容の定義例

-- ADMIN に接続
CONNECT ADMIN/admin_password
 
CREATE TABLE TEST_TABLE
(
    TEST_COLUMN VARCHAR2(10)
);
GRANT SELECT ON ADMIN.TEST_TABLE TO WORKER ;
CREATE SYNONYM WORKER.TEST_TABLE_ALIAS FOR ADMIN.TEST_TABLE  ;
--                    ↑ 通常は同じ名前にする                
-- CREATE SYNONYM WORKER.TEST_TABLE FOR ADMIN.TEST_TABLE  ;
-- -- DROP SYNONYM WORKER.TEST_TABLE
-- WORKER に接続
CONNECT WORKER/yyyy
 
SELECT * FROM ADMIN.TEST_TABLE ;
SELECT * FROM TEST_TABLE_ALIAS  ;

パブリック・シノニム

パブリック・シノニムは PUBLIC という実体の無い特別なユーザーグループが所有するシノニム。
PUBLIC が所有するシノニムは、すべてのユーザーに対して開放されている状態をあらわす。

その代表的なものが、DUAL 表である。 DUAL 表は すべてのユーザーに最初から存在しているかのように見えているが SYS ユーザーの所有物である。DUAL 表は 以下のシノニムで定義されている。

CREATE PUBLIC SYNONYM DUAL FOR SYS.DUAL;

パブリック・シノニムは簡単に共有名を作成することができるが、 ユーザー・アプリケーションのスキーマ・オブジェクトに対して簡単にパブリック・シノニムを作成するのは望ましくない。
それは、アカウント管理においてアカウント名の一覧を公開しているようなものに例えるとわかりやすいかもしれない。

参考: PUBLIC に関するセキュリティ管理

シノニムを定義できるスキーマオブジェクト

以下の DDL は schema ユーザーが所有する orginal_name を RIVUS ユーザーに GIVE_ME_ANAME という別名で定義している。
シノニムのオーナは RIVUS に属するが、実体は schema に属する。

CREATE SYNONYM RIVUS.GIVE_ME_ANAME FOR schema.orginal_name ;

必要な権限はシノニムから付与するのではなく参照元からユーザー名に付与する。

GRANT SELECT, INSERT, UPDATE, DELETE ON schema.orginal_name TO RIVUS ;

以下のものがシノニムとして別名定義ができる。
シノニムのシノニムも可能であるが混乱を招く恐れがあるのでネストは 2つ程度までにする。

名称該当する DDL
表 および 索引構成表CREATE SYNONYM a FOR b
シノニムはすべて同じ形式で記述できる。
ビュー
ストアドプロシージャ関連
マテリアライズド・ビュー
オブジェクト型・表・ビュー
順序
シノニム
外部プロシージャ
Java クラス関連

シノニムが使用できる DML と DDL

マニュアルでシノニムの使用が認められているのは以下のとおり。(※ TRUNCATE TABLE は含まれない

DML

DDL

  • GRANT、REVOKE
  • COMMENT
  • AUDIT、NOAUDIT

シノニムの作成と削除の例

シノニムのシノニム(シノニムのネスト)例

SQL> CREATE SYNONYM MY_DUAL FOR DUAL;
シノニムが作成されました。
 
SQL> SELECT * FROM DUAL ;
SQL> SELECT * FROM MY_DUAL ;
DU
--
X
 
SQL> DROP SYNONYM MY_DUAL;
シノニムが削除されました。

シノニムの定義

自スキーマのシノニムに関する定義が格納されているディクショナリビュー

SELECT * FROM USER_SYNONYMS ;
 


関連事項

日本オラクル
■ 日本オラクル 株式会社
■ オラクルマスター資格 (オラクルマスターとは
■ Oracle Web セミナー

*1 参照先の定義が変更されるとシノニムも INVALID 状態になるので、同時に依存しているオブジェクトも INVALID になり、再定義(コンパイル)が必要となる。