記事
· 5 hr 前 11m read

管理ポータルメニューにアクセスできるユーザを制限する方法

これは 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 ロールを付与します。

 

 

手順2:管理ポータルにログインしてテスト

では、テストしてみます。

管理ポータルをログアウトした後で、TestA でログインします。ログイン後の見栄えは以下の通りです。

 

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 を付与しています。

 

 

手順2:管理ポータルにログインして表示を確認

TestB ユーザでログインを行うと、システムエクスプローラーが選択できるように見えます。

ですが、「システムエクスプローラー」を選択してもほとんどのメニューが利用できません。

これは、管理ポータルにログインしたときのネームスペースが %SYS になっているからです。

TestB ユーザの設定にある「開始ネームスペース」に USER を指定するか、管理ポータルを開いた後ネームスペースを USER に切り替えることでサブメニューを操作できるようになります。

まずは、ネームスペースを切り替えてみます。

以下の画面は、TestB の「開始ネームスペース」に USER を設定したときの図です。

 

 

手順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

 

ログインも、グローバルの更新も参照もできました。管理ポータルからも参照できるか確認します。

無事参照できています。

 

 

手順4:管理ポータルのSQLメニューでSQLの実行テスト

続いて、SQL画面にアクセスし、テーブルを作成してみます。

エラーが出てしまいました。

SQL 画面については、テーブルの操作に対する権限も含めてユーザに付与する必要があります。

TestB ユーザにテーブルに対する権限を追加します。これには、SuperUser でログインし直してから USER ネームスペースに対して CREATE TABLE が利用できる権限を追加します。

 

では、TestB ユーザにログインしなおして試してみます。

テーブルの作成とデータ登録を行ってみます。

無事、テーブル作成も INSERT 文も実行できました。

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

所有者ではないテーブルに対しては、テーブル毎にテーブル権限を付与する必要がありますのでご注意ください。

また例では、SQL の特権を TestB ユーザに直接付与しましたが、専用ロールを作成しロールをユーザに付与する方法でも定義できます。

他のユーザに同じ SQL 特権を付与する場合は、ロールを作成したほうが便利です。

ご参考:ロールに SQL 特権を設定する例

 

 

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ロールを付与します。

手順2:管理ポータルにログインしてテスト

以下、TestC でログインした状態です。システムオペレーションメニューが操作できます。

 

 

手順3:ターミナル(またはIRIS)へのログインテスト

IRISに TestC ユーザでログインしてみます。

irisowner@1fed473da3f3:/opt/src$ iris session iris

ノード: 1fed473da3f3 インスタンス: IRIS

ユーザ名:TestC
パスワード:*****
アクセスが拒否されました。

TestC はアクセスが拒否されています。

これは、IRIS にログイン(Windows ならターミナルにアクセス)の許可が足りないためです。

 

手順4:ターミナルへのログイン失敗の原因を探る

手順3でログイン失敗の原因を探るため、一旦管理ポータルをログアウトしSuperUser でログインしなおした後、監査イベントを確認します。

システム管理 > セキュリティ > 監査 > 監査データベースの閲覧 >(検索ボタン押下後) 対象のイベントの「詳細」をクリック

エラーメッセージ: エラー #836: プログラマーアクセスの権限が不十分です
サービス名: %Service_Terminal

上記エラーが出ています。

IRIS にログイン(またはターミナルを起動)するためには、%Service_Terminal(Linux用) または %Service_Console(Windows用) サービスに対する USE 許可、アクセス対象データベースリソース(例では%DB_USER)の READ 許可、そしてプログラマーアクセスの権限として、%Development リソースのUSE許可が必要となります。

TestB ユーザに付与した %Deleveloper ロールはこれらの許可が含まれているため IRIS にログインできていました。

TestC ユーザがどの許可を持っているか?については、プロファイル画面を見ると分かりやすいです。

SuperUserでログインし、システム管理 > セキュリティ > TestCユーザの「プロファイル」をクリックします。

参照しているユーザが利用できるリソースとその許可が一覧されます。

それぞれの許可を確認します(以下の例は Linux 上 IRIS で確認しているため、%Service_Console は表示されていません)。

%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

 

なお、例のようなロール付与以外にもリソースに対してパブリックに許可を設定することでユーザに許可を与えることもできます。プロファイル画面では「パブリックリソースにより付与」の列に情報が記載されています。

ここまでの流れで、事前定義ロールを利用した管理ポータルのアクセス制御が確認できました。

別の記事では、事前定義ロールだけでは対応できない、サブメニューに対するアクセス制御の例をご紹介しています。ぜひご参照ください。

ディスカッション (0)1
続けるにはログインするか新規登録を行ってください