Oracleデータベースにおける新しいユーザー作成とビュー参照権限の付与手順

Oracleデータベースで新しいユーザーを作成し、他のユーザーが作成したビューを参照できるようにする方法について説明します。

  1. 実装背景 医療情報システム(HIS)と外部システムを連携させる際、特定の外部システムがデータベーステーブル全体ではなく、特定のビューのみにアクセスする必要がありました。 この場合、HISのデータベースはOracleを使用しており、既存のユーザーに加えて、限定的なビューのみにアクセス可能な新しいユーザーを作成する必要があります。これはシステム間のセキュリティを確保するためです。

  2. 実装手順 調査結果に基づき、以下の手順で実施しました。

(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;
  1. 参考資料: Oracleビュー作成、ユーザー作成および権限付与 http://www.cnblogs.com/king1302217/p/4543543.html ORA-01720: 権限オプションがありません http://blog.csdn.net/xyy511/article/details/41546209

タグ: Oracle データベース管理 ユーザー権限 セキュリティ ビュー参照

6月12日 22:43 投稿