シノニム(Synonym)とは、データベースオブジェクト(テーブル、ビュー、マテリアライズドビュー、シーケンス、ストアドプロシージャ、関数、パッケージ、型、ユーザー定義型)にエイリアスを提供する仕組みであり、他のシノニムに対してもシノニムを作成できます。シノニムは単なるエイリアスであるため、データディクショナリ内でのみ定義され、領域を消費しません。本記事では主に、シノニムの分類、基本的な特性、および権限要件について説明します。
分類
シノニムには、PublicシノニムとPrivateシノニムの2種類があります。
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 | Schema は、現在のシノニムがどのユーザーに属するかを指定します。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;