ルーチン内の特定処理でデータベースの特権を変更する方法

「特権ルーチンアプリケーション」を使用し、ルーチンのコード中に $system.Security.AddRoles()メソッドを使用してロールを付与する仕組みを利用します。

※ロールベースで必要な特権を付与するため、予め特定の特権を持ったロールを作成する必要があります。

詳細は、以下ドキュメントをご参照ください。
特権ルーチン・アプリケーション【IRIS
特権ルーチン・アプリケーションについて

例えば、特定ルーチン実行時のみデータベースの更新を許可するための設定は、以下のとおりです。

(接続するデータベースに対してはREAD許可だけを持ち、あるルーチン実行時のみデータベースに対するREAD/WRITE許可を持つように設定します。)

1)  データベース:Aのリソース定義を確認する

 データベース:Aのリソースに %DB_%DEFAULT が設定されている場合は、独自リソースを作成します。

 (データベースに割り当てられたリソースの確認は、管理ポータル > [システム管理] > [構成] > [システム構成] > [ローカルデータベース] > リソース で確認できます)

 リソース作成は、管理ポータル > [システム管理] > [セキュリティ] > [リソース] > 新規リソース作成ボタン押下
 データベースリソースは命名規則があり、 %DB_データベース名 を指定します。

 例の場合は、 %DB_A を登録します。このとき、パブリック許可は全てチェックを外します。

 リソース作成が完了したら、管理ポータル > [システム管理] > [構成] > [システム構成] > [ローカルデータベース] から設定対象のデータベース設定を開き、リソース名を変更し、保存します。

2) READ許可のみを付与するロールを作成する

 管理ポータル > [システム管理] > [セキュリティ] > [ロール] > 新規ロール作成ボタン押下

 ロール名を記入し、保存します。(ロール名を R1 とします。)

 作成したロールに特権(リソースに対する許可の組み合わせ)を登録するため、追加ボタンを押下し、利用可能なリソース一覧から、1)で確認したリソース名を選択します。

 選択後、リソースの許可をRのみに変更し、ロールを保存します。

3) アクセスするユーザのログインロールを確認する。

 例では、ターミナルでのルーチン実行で確認を行うため、ターミナルログイン時にユーザ認証を行うよう、適切なサービス(Windowsなら%Service_Console)の認証方法に「パスワード」を追加します。

 任意ユーザに対して、%Developerロールと 2) で作成したロールを付与します。

4) 特権ルーチンアプリケーションの作成

 ルーチン実行時にREAD/WRITE許可を追加するための「特権ルーチンアプリケーション」を作成します。

 管理ポータル > [システム管理] > [セキュリティ] > [アプリケーション] > [特権ルーチンアプリケーション] > 作成用ボタン押下
 特権ルーチンアプリケーション名を指定し保存します。(特権ルーチンアプリケーション名を TR1 とします。)

 ルーチンタブを開き、ルーチンがあるデータベースの指定と、ルーチン名の指定を行います。

 続いて、アプリケーション・ロールタブを開き、データベース:A のDBロール(%DB_Aロール)を付与します。

 ※ DBロールはDBリソース作成時、自動的に作成されるロールで、DBリソースに対するREAD/WRITE許可を持つロールです。

5) ルーチン中コードでロールを付与する。

 4)で作成した特権ルーチン名を使用して、以下メソッドをルーチンに追記します。

 set st=$system.Security.AddRoles("TR1")


【実行例】

st() public {
try {
  new $roles
  write "現在の値:",^ABC,! 
  set st=$system.Security.AddRoles("TR1")  // ロールの追加
  write $roles,!
  set ^ABC="変更"
  write "現在の値(更新後):",^ABC,!
}
catch ex {
  zwrite ex
}
}

 
《ターミナル実行例》

A>set ^ABC="かきくけこ"  // ログイン時、READ許可のみのためエラー発生
SET ^ABC="かきくけこ"
^
^ABC,c:\intersystems\cache\mgr\a\
A>write ^ABC
テスト
A>do st^Test()   // ルーチン実行期間のみ更新可
現在の値:テスト
%Developer,%DB_A,R1
現在の値(更新後):変更

 


該当する製品: Caché, Ensemble, HealthShare/Caché Based, IRIS Data Platform, HealthShare/IRIS Based, IRIS for Health
関連トピック:
添付ファイル:

アンケートにご協力をお願いします
このトピックは参考になりましたか?
このトピックに関するお問い合わせ

FAQトップに戻る