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