説明
このステートメントは、シノニムを作成するために使用します。
構文
CREATE [ OR REPLACE ] [ PUBLIC ] SYNONYM [ synonym_schema. ]synonym_name
FOR [ object_schema. ]object_name [ @dblink ]
パラメータ説明
パラメータ |
説明 |
|---|---|
| OR REPLACE | 既存のシノニム名が存在する場合、新しい定義でシノニムを再作成します。 |
| PUBLIC | PUBLIC を指定して公開シノニムを作成します。すべてのユーザーが使用できます。ユーザーは対象となるベースオブジェクトに対する適切な権限を持っている必要があります。オブジェクト参照の解析時に、オブジェクトにスキーマが指定されていない場合にのみ、この公開シノニムが使用されます。PUBLIC を指定しない場合、シノニムはプライベートであり、現在のスキーマからのみアクセス可能です。また、シノニム名は現在のスキーマ内で一意である必要があります。 |
| synonym_schema | シノニムが存在するスキーマを指定します。schema. を省略した場合、デフォルトでシノニムは作成者自身のスキーマに存在します。PUBLIC を指定した場合、シノニムに schema を指定する必要はありません。 |
| synonym_name | シノニム名を指定します。 |
| object_schema | シノニムを作成するオブジェクトが存在するスキーマを指定します。schema. を省略した場合、デフォルトでシノニムを作成するオブジェクトは作成者自身のスキーマに存在します。 |
| object_name | シノニムが対応するオブジェクト名を指定します。 |
| dblink | データベースリンク名を指定します。これは、リモートデータベース内のオブジェクトにアクセスするために使用されます。dblink を指定した場合、object_name はリモートデータベース内のオブジェクトである必要があります。 |
例
例1:スキーマ間のデータアクセス
ユーザー hr と finance の2人がいると仮定します。hr は finance 内の従業員給与テーブルにアクセスする必要がありますが、セキュリティ上の理由から直接テーブルへのアクセス権限を付与することはできません。
-- financeユーザーで給与テーブルを作成
obclient> CREATE TABLE salary (
emp_id NUMBER,
emp_name VARCHAR2(50),
base_salary NUMBER,
bonus NUMBER
);
-- hrユーザーでシノニムを作成
obclient> CREATE SYNONYM emp_salary FOR finance.salary;
-- これでhrユーザーはシノニムを通じて給与データをクエリできます
obclient> SELECT * FROM emp_salary;
例2:プライベートシノニムの作成
よく使うテーブルにプライベートシノニムを作成し、現在のスキーマ内のユーザーがアクセスしやすくします。
-- システム管理者が実行
obclient> CREATE PUBLIC SYNONYM departments FOR hr.departments;
obclient> CREATE PUBLIC SYNONYM employees FOR hr.employees;
-- どのユーザーも直接クエリできます
obclient> SELECT * FROM employees;
注意点
シノニムを作成する際には、以下の権限要件を満たす必要があります:
現在のスキーマ内でプライベートなシノニムを作成するには、
CREATE SYNONYM権限が必要です。現在のスキーマ外でプライベートなシノニムを作成するには、
CREATE ANY SYNONYM権限が必要です。PUBLICシノニムを作成するには、CREATE PUBLIC SYNONYM権限が必要です。シノニムを作成する対象は存在しなくてもかまいませんし、アクセス権限を持っていなくても構いません。
/* ユーザー synonym_user を作成 */
obclient> CREATE USER synonym_user IDENTIFIED BY synonym_user;
obclient> GRANT CREATE ON *.* TO synonym_user;
obclient> GRANT SELECT ON *.* TO synonym_user;
/* ユーザー synonym_user と接続 */
obclient> CREATE OR REPLACE SYNONYM syn1 FOR tbl1;
ERROR-00600: internal error code, arguments: -5036, Access denied; you need (at least one of) the CREATE SYNONYM privilege(s) for this operation
/* ユーザー synonym_user に CREATE SYNONYM 権限を付与 */
obclient> GRANT CREATE SYNONYM TO synonym_user;
obclient> CREATE OR REPLACE SYNONYM syn1 FOR tbl1;