今回は、Oracleの別ユーザーのテーブルに、スキーマ名無しでアクセスする方法を習得したので、その手順について共有する。テーブル所有者とテーブルアクセス者を別にしたい場合に、今回の記事の内容が利用できる。
前提条件
下記記事の手順に従って、USER01,USER02のユーザーが作成されていること。
Oracleにユーザーを追加しテーブルを作成してみたOracleデータベース上に、ユーザーを作成しテーブル作成等が行えるようにするには、ユーザーの作成・権限の付与等一定の手順をふむ必要があ...
さらに、USER01ユーザー上に、下記「USER_DATA」というテーブルが作成されていること。
やってみたこと
テーブルへのアクセス権限付与
テーブルへのアクセス権限付与の手順は、以下の通り。
1) アクセス権限を付与する前は、以下のように、スキーマ名を付与しても付与しなくても、USER02ユーザーからUSER01ユーザーのテーブルにアクセスすることができない。
1 | select * from USER01.USER_DATA |
1 | select * from USER_DATA |
3) 下記GRANT文を発行し、USER02ユーザーに、USER_DATAテーブルへの参照・更新権限を付与
1 | GRANT SELECT, INSERT, UPDATE, DELETE ON USER01.USER_DATA TO USER02; |
5) アクセス権限を付与した後は、以下のように、スキーマ名を付与した場合は、USER02ユーザーからUSER01ユーザーのテーブルにアクセスできる
1 | select * from USER01.USER_DATA |
1 | select * from USER_DATA |
シノニムの作成
シノニムは、USER02ユーザー上で付与する。その手順は以下の通り。
2) 下記GRANT文を発行し、USER02ユーザーに、シノニムの作成権限を付与
1 | GRANT CREATE SYNONYM TO USER02; |
4) 下記CREATE SYNONYM文を発行し、シノニムを作成
1 | CREATE SYNONYM USER_DATA FOR USER01.USER_DATA; |
5) シノニムを作成した後は、以下のように、スキーマ名を付与しなくても、USER02ユーザーからUSER01ユーザーのテーブルにアクセスできる
1 | select * from USER_DATA |
要点まとめ
- Oracleの別ユーザーのテーブルに、スキーマ名無しでアクセスできるようにするには、テーブルアクセス権限付与とシノニムの作成を行えばよい。