シノニムの作成とViewでの利用

複数のスキーマがあるのだが、マスタについては一箇所で管理するためにシノニムを使う。


まずDBA権限で接続し、シノニム作成のための権限を追加する

SQL> connect system/manager
接続されました
SQL> grant create synonym to test_user;

権限付与が成功しました


シノニムが参照するオブジェクトのSELECT権限を追加する
※更新機能は不要なので、SELECTのみ

SQL> grant select on master_user.hogehoge_master to test_user;

権限付与が成功しました。


シノニムを作成する

SQL> connect test_user/test_user
接続されました
SQL> create synonym test_master for master_user.hogehoge_master;

シノニムが作成されました。


確認。

SQL> select hoge_code from test_master;

HOGE
1111


シノニムに対してViewを作成することもできる。

SQL> create view test_master_view as select hoge_code from test_master;

ビューが作成されました。

SQL> select * from test_master_view;

HOGE
1111


ロールの中にシノニムの参照先をSELECTする権限を入れておいただけだと、シノニムは作成できるのだが、Viewを作成する際には権限が不足する。

作ったものの削除

SQL> drop view test_master_view;

ビューが削除されました。

SQL> drop synonym test_master;

シノニムが削除されました。


権限の変更

SQL> connect system/manager
接続されました
SQL> revoke select on master_user.hogehoge_master from test_user;

取消しが成功しました。

SQL> grant select on master_user.hogehoge_master to test_role;

権限付与が成功しました。

SQL> connect test_user/test_user
接続されました
SQL> SELECT * FROM ROLE_TAB_PRIVS;

ROLE    OWNER    TABLE_NAME    COLUMN_NAME PRIVILEGE GRA
TEST_ROLE MASTER_USER HOGEHOGE_MASTER         SELECT   NO  


新しい権限で作成してみる

SQL> create synonym test_master for master_user;

シノニムが作成されました。

SQL> create view test_master_view as select * from test_master;
create view test_master_view as select * from test_master
*
行1でエラーが発生しました。:
ORA-01031: 権限が不足しています。