これは InterSystems FAQ サイトの記事です。
InterSystems 製品インストール時に用意されている事前定義ロールを利用して、ログインユーザ毎に管理ポータルメニュー(システム管理/システムエクスプローラー/システムオペレーション など)のアクセスを制限することができます。
管理ポータルメニューに対するアクセス制限を行うためには、管理ポータルへの「認証なし(UnknownUser)」アクセス(※1)を使用しない環境が必要です。
管理ポータル上部の「ログアウト」をクリックしてログイン画面が表示されない場合は、関連記事「管理ポータル/スタジオ/ターミナルにパスワード認証を設定するにはどうしたらいいですか?」をご覧いただき必要な設定を行ってください。
以下、インストールデフォルトで管理ポータルへのフルアクセスが許可されている事前定義ユーザ(※2): SuperUser や _SYSTEM アカウントを使用して管理ポータルにログインした状態の設定例でご説明します。
これらユーザのパスワードはインストール時に設定しています(インストール時の「初期セキュリティ」を「最小」でインストールした環境では、パスワードは大文字の SYS が設定されています)。
InterSystems 製品はロールベースのセキュリティを使用しています。ログインユーザ毎にアクセスできるメニューを制限したい場合は、付与するロールを変えることで実現できます。
InterSystems 製品内でロールとは「特権の集まり」に名前を付けたもので、「特権」は「リソース(=保護対象全般)に対する許可(READ/WRITE/USE)」を組み合わせた定義です。
必要な特権を定義したロールを作成しユーザに付与することで細かなアクセス制御をユーザに対して定義できます。
言葉の定義や内容詳細については関連記事:「InterSystems 製品のセキュリティの基本:ユーザとロール」でご説明しています。ぜひご参照ください。
※1 InterSystems IRIS をインストールする際の指定で「初期セキュリティ」を「最小」とした場合に設定されるアクセスです。
InterSystems IRIS for Healthでは、「初期セキュリティ」オプションは「通常」以上の設定となるため、デフォルトで「認証なし」アクセスを使用しないように設定されます。
※2 %All ロールを持つユーザです。
ここでは、以下の事前定義ロールを付与したユーザを作成し、管理ポータルログイン後の表示の違いを確認してみます。
1) %Manager ロール
システム管理に関連付けられた特権を持つロールです。管理ポータルの「システム管理」「システムエクスプローラ」「システムオペレーション」にアクセスできます。
例では、TestA ユーザにこのロールを付与します。
2) %Developer ロール
アプリケーション開発に関連付けられる特権を持つロールです。このロールでは開発者に必要なターミナルアクセスと、管理ポータルの「システムエクスプローラ」にアクセスできます。
例では、TestB ユーザにこのロールを付与します。
3) %Operator ロール
システム運用メニューに関連付けられた特権を持つロールです。管理ポータルの「システムオペレーション」にアクセスできます。
例では、TestC ユーザにこのロールを付与します。
管理ポータルの「Interoperability」メニュー については、Interoperability メニュー以下を操作する方の役割に合わせた事前定義ロールが細かく分かれています。
詳細はドキュメント「プロダクション関連の事前定義ロール」をご参照ください。
また、Interoperabilityメニューを利用する場合は、管理ポータル用ロールの他に、アクセス対象のデータベース用ロール(%DB_XXXX)も必要となります。
IRIS for Health をインストールすると表示される「Health」メニューについては、%HS_Administrator ロール と 操作対象のデーベース用ロール(%DB_XXXX)が必要です。
それでは早速、異なるロールを付与されたユーザ別の管理ポータルログイン後の表示の違いを確認します。
1) %Manager ロールを付与した TestA での表示
2) %Developer ロールを付与した TestB での表示
3) %Operator ロールを付与した TestC での表示
1) %Managerロールを付与した TestA での表示
以下の手順でTestAユーザを作成し、確認します。
手順1:TestA ユーザを作成し、%Managerロールを付与
手順2:管理ポータルにログインしてテスト
手順1:TestA ユーザを作成し、%Managerロールを付与
TestA を作成します。パスワード(3文字以上の大小文字を区別する英数字)を設定し、保存します。保存後、ロールタブで%Manager ロールを付与します。
.png)
.png)
.png)
手順2:管理ポータルにログインしてテスト
では、テストしてみます。
管理ポータルをログアウトした後で、TestA でログインします。ログイン後の見栄えは以下の通りです。
.png)
2) %Developer ロールを付与した TestB での表示
以下の手順でTestBユーザを作成し、確認します。開発者用ロールであるため、テストでは管理ポータルの他にターミナルからのアクセスも試します。また、管理ポータルからの SQL の実行も試してみます。
手順0:現在の管理ポータルをログアウトとし管理者ユーザでログイン
手順1:TestB ユーザを作成し、%Developer ロールとデータベース用ロールを付与
手順2:管理ポータルにログインして表示を確認
手順3:ターミナル(またはIRIS)へのログインテスト
手順4:管理ポータルのSQLメニューでSQLの実行テスト
手順0:現在の管理ポータルをログアウトとし管理者ユーザでログイン
TestB を作成するため、管理者ユーザ(SuperUserや_SYSTEM) でログインし直します。
手順1:TestB ユーザを作成し、%Developer ロールとデータベース用ロールを付与
作成するTestB ユーザには %Developer ロールを付与するため、管理ポータルの「システムエクスプローラ」を利用できます。
「システムエクスプローラ」はグローバル変数の参照や、クラス定義・ルーチンのインポートエクスポート、さらに SQL の実行などが行える開発者向けメニューとなるため、%Developer ロールの他にデータベース用ロールが必要となります。
データベース作成時のセキュリティ設定次第となりますが、デフォルトを選択している場合は、%DB_%DEFAULT ロールを付与します。
データベースリソースを作成している場合は、データベース用ロールを付与します。例では、USER データベース用ロール:%DB_USER を付与しています。
.png)
手順2:管理ポータルにログインして表示を確認
TestB ユーザでログインを行うと、システムエクスプローラーが選択できるように見えます。
ですが、「システムエクスプローラー」を選択してもほとんどのメニューが利用できません。
これは、管理ポータルにログインしたときのネームスペースが %SYS になっているからです。
TestB ユーザの設定にある「開始ネームスペース」に USER を指定するか、管理ポータルを開いた後ネームスペースを USER に切り替えることでサブメニューを操作できるようになります。
まずは、ネームスペースを切り替えてみます。

.png)
以下の画面は、TestB の「開始ネームスペース」に USER を設定したときの図です。
.png)
手順3:ターミナル(またはIRIS)へのログインテスト
%Developer ロールは開発者用ロールでターミナルや IRIS にログインすることができます。
試しに、IRIS にログインしグローバル変数を作成してみます。
irisowner@1fed473da3f3:/opt/src$ iris session iris
ノード: 1fed473da3f3 インスタンス: IRIS
ユーザ名:TestB
パスワード:*****
USER>
USER>
USER>set ^ABC=1
USER>write ^ABC
1
ログインも、グローバルの更新も参照もできました。管理ポータルからも参照できるか確認します。

.png)
無事参照できています。
手順4:管理ポータルのSQLメニューでSQLの実行テスト
続いて、SQL画面にアクセスし、テーブルを作成してみます。

.png)
エラーが出てしまいました。
SQL 画面については、テーブルの操作に対する権限も含めてユーザに付与する必要があります。
TestB ユーザにテーブルに対する権限を追加します。これには、SuperUser でログインし直してから USER ネームスペースに対して CREATE TABLE が利用できる権限を追加します。
.png)
では、TestB ユーザにログインしなおして試してみます。
テーブルの作成とデータ登録を行ってみます。

.png)
無事、テーブル作成も INSERT 文も実行できました。
ここで、SuperUser でログインしなおし管理ポータルで TestB ユーザの情報を参照すると TestB はテーブル所有者であるため、作成したテーブルに対する SQL テーブル権限が付与されています。

.png)
所有者ではないテーブルに対しては、テーブル毎にテーブル権限を付与する必要がありますのでご注意ください。
また例では、SQL の特権を TestB ユーザに直接付与しましたが、専用ロールを作成しロールをユーザに付与する方法でも定義できます。
他のユーザに同じ SQL 特権を付与する場合は、ロールを作成したほうが便利です。
ご参考:ロールに SQL 特権を設定する例

.png)
2) %Operator ロールを付与した TestC での表示
最後に、%Operator ロールを持つ TestC を作成します。運用管理に使用するツールはターミナル(またはIRIS)へログインして実行するルーチンなどもあるため、ターミナル(またはIRIS)へのログインも試してみます。
手順0:現在の管理ポータルをログアウトとし管理者ユーザでログイン
手順1:TestC ユーザを作成し、%Operator ロールとデータベース用ロールを付与
手順2:管理ポータルにログインしてテスト
手順3:ターミナル(またはIRIS)へのログインテスト
手順4:ターミナルへのログイン失敗の原因を探る
手順0:現在の管理ポータルをログアウトとし管理者ユーザでログイン
TestC を作成するため、管理者ユーザ(SuperUserや_SYSTEM) でログインし直します。
手順1:TestC ユーザを作成し、%Operator ロールを付与
SuperUser でログインしなおして TestCを作成し、%Operatorロールを付与します。

.png)
手順2:管理ポータルにログインしてテスト
以下、TestC でログインした状態です。システムオペレーションメニューが操作できます。
.png)
手順3:ターミナル(またはIRIS)へのログインテスト
IRISに TestC ユーザでログインしてみます。
irisowner@1fed473da3f3:/opt/src$ iris session iris
ノード: 1fed473da3f3 インスタンス: IRIS
ユーザ名:TestC
パスワード:*****
アクセスが拒否されました。
TestC はアクセスが拒否されています。
これは、IRIS にログイン(Windows ならターミナルにアクセス)の許可が足りないためです。
手順4:ターミナルへのログイン失敗の原因を探る
手順3でログイン失敗の原因を探るため、一旦管理ポータルをログアウトしSuperUser でログインしなおした後、監査イベントを確認します。
システム管理 > セキュリティ > 監査 > 監査データベースの閲覧 >(検索ボタン押下後) 対象のイベントの「詳細」をクリック

.png)
エラーメッセージ: エラー #836: プログラマーアクセスの権限が不十分です
サービス名: %Service_Terminal
上記エラーが出ています。
IRIS にログイン(またはターミナルを起動)するためには、%Service_Terminal(Linux用) または %Service_Console(Windows用) サービスに対する USE 許可、アクセス対象データベースリソース(例では%DB_USER)の READ 許可、そしてプログラマーアクセスの権限として、%Development リソースのUSE許可が必要となります。
TestB ユーザに付与した %Deleveloper ロールはこれらの許可が含まれているため IRIS にログインできていました。
TestC ユーザがどの許可を持っているか?については、プロファイル画面を見ると分かりやすいです。
SuperUserでログインし、システム管理 > セキュリティ > TestCユーザの「プロファイル」をクリックします。

.png)
.png)
参照しているユーザが利用できるリソースとその許可が一覧されます。
それぞれの許可を確認します(以下の例は Linux 上 IRIS で確認しているため、%Service_Console は表示されていません)。

.png)
%DB_USER リソースと、%Development リソースに対する適切な許可が足りていません。
TestC ユーザに %DB_USER リソースの READ/WRITE 許可を持つ %DB_USER ロールと、%Development リソースの USE 許可が含まれる %Developer ロールを付与することで IRIS にログインできます。
irisowner@1fed473da3f3:/opt/src$ iris session iris
ノード: 1fed473da3f3 インスタンス: IRIS
ユーザ名:testC
パスワード:*****
USER>write $roles
%Developer,%DB_USER,%Operator
なお、例のようなロール付与以外にもリソースに対してパブリックに許可を設定することでユーザに許可を与えることもできます。プロファイル画面では「パブリックリソースにより付与」の列に情報が記載されています。
ここまでの流れで、事前定義ロールを利用した管理ポータルのアクセス制御が確認できました。
別の記事では、事前定義ロールだけでは対応できない、サブメニューに対するアクセス制御の例をご紹介しています。ぜひご参照ください。