シノニム(Synonym)とは、データベースオブジェクト(テーブル、ビュー、マテリアライズドビュー、シーケンス、ストアドプロシージャ、関数、パッケージ、型、ユーザー定義型)にエイリアスを提供する仕組みであり、他のシノニムに対してもシノニムを作成することが可能です。シノニムは単なるエイリアスであるため、データディクショナリ内でのみ定義され、領域を占有しません。本記事では、主にシノニムの分類、基本的な特性、および権限要件について説明します。
分類
シノニムには2種類あり、PublicシノニムとPrivateシノニムがあります。
PublicシノニムはPUBLICグループに属し、すべてのユーザーがアクセスできます。Privateシノニムはオブジェクトの所有者に属し、明示的に権限を付与した場合にのみ他のユーザーがアクセスできます。
Publicシノニムは通常DBAによって作成され、一般ユーザーがPublicシノニムを作成するには、CREATE PUBLIC SYNONYMのシステム権限が必要です。
基本特性
シノニムはデータベースの利用範囲を拡張し、異なるデータベースユーザー間でシームレスなインタラクションを実現できます。オブジェクトへのアクセスを簡素化し、オブジェクトへのアクセスの安全性を向上させるためによく使用されます。
シノニムの作成
CREATE SYNONYM ステートメントはシノニムを作成するために使用され、構文は以下のとおりです:
CREATE [ OR REPLACE ] [ PUBLIC ]
SYNONYM [ schema. ]synonym
FOR [ schema. ]object;
パラメータの説明
| パラメータ | 説明 |
|---|---|
| OR REPLACE | 作成しようとするシノニム名が既に存在する場合、新しい定義でシノニムを置き換えることを示します。 |
| PUBLIC | PUBLIC を指定して作成されるシノニムは公開されており、すべてのユーザーが使用できます。ユーザーは基礎オブジェクトに対する適切な権限を持っていなければなりません。オブジェクトへの参照を解決する際、オブジェクトにスキーマが指定されていない場合にのみ、公開シノニムが使用されます。 PUBLIC を指定しない場合、シノニムはプライベートであり、現在のスキーマからのみアクセス可能であり、シノニム名は現在のスキーマ内で一意である必要があります。 |
| [schema. ]synonym | スキーマは、現在のシノニムがどのユーザーに属するかを指定します。PUBLIC が指定されている場合、シノニムにユーザーを指定することはできません。 synonym はシノニムの名前を表します。 |
| [schema. ]object | シノニムが対応するオブジェクトの名前を表します。 |
シノニムの作成が成功すると、USER_SYNONYMS、ALL_SYNONYMS、DBA_SYNONYMS ビューを使用して自分で作成したシノニムを確認できます。
例
プライベートシノニムを作成します。
obclient> CREATE TABLE t1(c1 INT); obclient> CREATE SYNONYM s1 FOR t1; obclient> INSERT INTO s1 VALUES(1); obclient> SELECT * FROM s1; +------+ | c1 | +------+ | 1 | +------+ 1 row in setパブリックシノニムを作成します。
obclient> CREATE PUBLIC SYNONYM syn_pub FOR t1; obclient> SELECT * FROM syn_pub; +------+ | c1 | +------+ | 1 | +------+ 1 row in set
シノニムの削除
DROP SYNONYM ステートメントはシノニムを削除するために使用され、構文は以下のとおりです:
DROP [PUBLIC] SYNONYM [ schema. ]synonym;
パラメータの説明
| パラメータ | 説明 |
|---|---|
| PUBLIC | PUBLIC を指定して、パブリックシノニムを削除します。PUBLIC を指定しない場合は、プライベートシノニムが削除されます。 |
| [ schema. ]synonym | Schema は、現在のシノニムがどのユーザーに属するかを指定します。PUBLIC を指定した場合、シノニムにユーザーを指定することはできません。 synonym はシノニム名を表します。 |
例
プライベートシノニムを削除します。
obclient> DROP SYNONYM test.s1; Query OK, 0 rows affectedパブリックシノニムを削除します。
obclient> DROP PUBLIC SYNONYM syn_pub; Query OK, 0 rows affected
注意事項
シノニムを作成する際には、以下の権限要件を満たす必要があります:
現在のユーザーでプライベートシノニムを作成するには、
CREATE SYNONYM権限が必要です。現在のユーザー以外でプライベートシノニムを作成するには、
CREATE ANY SYNONYM権限が必要です。PUBLICのシノニムを作成するには、CREATE PUBLIC SYNONYM権限が必要です。シノニムを作成する対象オブジェクトへのアクセス権限は不要です。
/* `SYS` ユーザーに接続*/
obclient> CREATE USER syn_user IDENTIFIED BY syn_user;
obclient> GRANT CREATE ON syn_user.* TO syn_user;
obclient> GRANT SELECT ON syn_user.* TO syn_user;
/* syn_userに接続し、シノニムの作成に失敗します*/
obclient> CREATE SYNONYM syn_1 FOR t1;
ERROR-00600: internal error code, arguments: -5036, Access denied; you need (at least one of) the CREATE SYNONYM privilege(s) for this operation
/* `SYS` ユーザーに接続し、CREATE SYNONYM権限を付与します*/
obclient> GRANT CREATE SYNONYM ON *.* TO syn_user;
/* syn_userに接続*/
obclient> CREATE SYNONYM syn_1 FOR t1;