Oracleデータベースで新しいユーザーを作成し、他のユーザーが作成したビューを参照できるようにする方法について説明します。
-
実装背景 医療情報システム(HIS)と外部システムを連携させる際、特定の外部システムがデータベーステーブル全体ではなく、特定のビューのみにアクセスする必要がありました。 この場合、HISのデータベースはOracleを使用しており、既存のユーザーに加えて、限定的なビューのみにアクセス可能な新しいユーザーを作成する必要があります。これはシステム間のセキュリティを確保するためです。
-
実装手順 調査結果に基づき、以下の手順で実施しました。
(1)systemユーザーとしてOracleデータベースに接続します。 (2)ユーザーを作成し、ビュー参照権限を付与します。 ここではtesterというユーザーを作成し、パスワードを"123456"とします。 HIS側で公開するビューは、既存のoutpatientユーザー配下のv_daily_chargeとします。 この場合のSQL文は以下のようになります:
-- ユーザーtesterの作成と初期パスワード設定
create user tester identified by "123456";
-- データベースへのログイン権限の付与
grant create session to tester;
-- outpatientユーザー配下のv_daily_chargeビューへの参照権限の付与
grant select on outpatient.v_daily_charge to tester;
注意:上記の3番目のSQLを実行すると、Oracleデータベースでエラーが発生することがあります。 「ORA-01720: emergency.t_costテーブルに対する権限オプションが存在しません。」
エラーの原因は、testerユーザーがoutpatientユーザーのビューにアクセスする際に、outpatientユーザーのテーブル(t_user, t_deptなど)だけでなく、別のユーザーemergency配下のテーブル(t_costなど)にもアクセスしているためです。
このエラーを回避するには、outpatientユーザーがアクセスするビューで必要なemergencyユーザーのテーブルに対して、事前に権限を付与する必要があります。
そのため、3番目のSQLの前に以下の処理を追加する必要があります:
-- outpatientユーザーのビューがemergencyユーザーのテーブルにアクセスする場合、そのテーブルにアクセス権を付与します。
grant select on emergency.t_cost to outpatient with grant option;
さらに、testerユーザーにoutpatientユーザーのビューだけでなく、t_userおよびt_deptテーブルへのアクセス権も与えたい場合は、以下のSQLを追加します:
-- testerユーザーにoutpatientユーザーのテーブルへの参照権限を付与
grant select on outpatient.t_user to tester;
grant select on outpatient.t_dept to tester;
- 参考資料: Oracleビュー作成、ユーザー作成および権限付与 http://www.cnblogs.com/king1302217/p/4543543.html ORA-01720: 権限オプションがありません http://blog.csdn.net/xyy511/article/details/41546209