いつも使用しているユーザで IRIS や Caché にアクセスできなくなった時の原因の探り方(監査の使い方)
開発者の皆さん、こんにちは。
いつも使用しているユーザでアプリケーションや InterSystems 製品(IRIS/Caché/Ensemble/HealthShare) にアクセスしたとき、セキュリティ設定変更などの影響で急にアクセスできなくなった!という場合に、調査に便利な監査ログの参照方法をご紹介します。
ここでは、%Allロールを持つシステム管理ユーザ( _system や SuperUser )で管理ポータルにアクセスできる状態での確認方法をご紹介します。
監査ログですが、まずはシステムで監査が取られる設定になっているかご確認ください(通常無効化されている場合は、調査の時だけ有効に変更してください)。
管理ポータル > システム管理 > セキュリティ > 監査 > 監査を有効に
次に、アクセスできなくなった原因を探るため、以下のシステムイベントの監査を取得できるように変更します。
管理ポータル > システム管理 > セキュリティ > 監査 > システムイベントを構成
以下のイベントの「状態変更」をクリックし、 Enabled に はい と表示されるようにします。
- %System/%Login/LoginFailure
- %System/%Security/Protect
この状態で、アクセスできない操作をもう1度試し、試した後で「監査データベースの閲覧」ページでエラーの内容を確認します。
管理ポータル > システム管理 > セキュリティ > 監査データベースの閲覧
以下例では、ターミナルにログインした時の監査ログの記録をご紹介します。
ログインに使用するユーザ名は test、 パスワード test、ロールに %Operator が設定されていて、管理ポータルの [システムオペレーション] メニューが利用できるユーザとします。
1) パスワードが異なるとき
ターミナルにアクセスしたときの表示は以下の通りです。
ユーザ名:test
パスワード:****
アクセスが拒否されました。
監査データベースの閲覧画面を再表示した時の一覧には、「プログラマモード ログイン失敗」と表示されています。
詳細を確認するため、「詳細」のリンクをクリックします。
「イベントデータ」の行にエラーメッセージが記録されています。
エラーメッセージ: エラー #798: パスワード 認証が失敗しました
エラー #952: パスワードが不正です
2) ユーザが存在しない時
存在しないユーザ(abc)でログインした場合は、以下のエラーが記録されます(この時も「プログラマモード ログイン失敗」と一覧に表示されます)。
詳細のリンクから「イベントデータ」を確認すると、以下のエラーメッセージが記録されています。
エラーメッセージ: エラー #798: パスワード 認証が失敗しました
エラー #838: ユーザ abc が存在しません
3) ユーザ名とパスワードはあっているのにターミナルにアクセスできない時(アクセス拒否 と出るとき)
ユーザ名、パスワードの指定はあっていそうなのに、ターミナルにアクセスできないエラーが出ているときの状態です。
以下のエラーが記録されます(この時も「プログラマモード ログイン失敗」と一覧に表示されます)。
詳細を確認します。
今回は、「エラーメッセージ: エラー #836: プログラマーアクセスの権限が不十分です」を出ています。
テストに使用しているユーザは %Operatorロールを持ちますが、ターミナルのアクセスに必要な %Developerロールを持っていません。そのため、アクセス権限不十分とエラーが出ています。
この他、使用しているユーザが「無効」になっている場合もアクセス拒否となり「プログラマーモード ログイン失敗」と表示され、詳細には以下のエラーメッセージが表示されます。
4) ターミナルにアクセスできるけど、特定のネームスペースにアクセスできない状態
ユーザ test の役割が変わり、開発者としてターミナルにアクセスできるユーザに変更する必要があるとします。
ここで、管理者がユーザ test から %Operator ロールを削除し、%Developer ロールを付与したとします。
管理ポータル > システム管理 > セキュリティ > ユーザ > testを選択 > ロール > %Developer付与
ユーザ名:test
パスワード:****
USER>
やっとターミナルにアクセスできました!
管理ポータルの [システムオペレーション] メニューの操作をルーチンで試そうと %SYS ネームスペースに移動します。
USER>set $namespace="%SYS"
SET $NAMESPACE="%SYS"
^
<PROTECT> *c:\intersystems\irishealth3\mgr\
USER>
残念・・。エラーです。
エラーの原因を監査ログを参照して確認します。
Protect のイベントが記録され「Attempt to access a protected resource」と表示されています。
詳細を確認します。
この記録は、mgr以下にある IRIS.dat(= IRISSYSデータベース)に対する <PROTECT> エラーが発生したことを意味します。
これは、ユーザ test から %Operator ロールを削除することで、IRISSYS データベースに対する READ と WRITE の許可がなくなったことが原因です。
%Developer ロールだけでは、アクセスしたいデータベースに対する許可が不足するため、追加でユーザ test に適切なデータベースの許可を付与する必要があります。
例のように、%SYS ネームスペースにアクセスしたい場合は、IRISSYSのデータベースロール(%DB_IRISSYS)を付与することでデータベースに対してREAD/WRITE の許可が追加できます。
再度、ターミナルにユーザ test でログインし直してから %SYS ネームスペースに移動し、試しにユーティリティを実行してみます。
ユーザ名:test
パスワード:****
USER>set $namespace="%SYS"
%SYS>do ^TASKMGR
1) タスク作成
2) タスク編集
3) タスク一覧
4) タスク削除
5) タスク一時停止
6) タスク再開
7) タスク実行
8) タスクリポート
9) タスクマネージャオプション
10) 終了
オプション?
うまく行きました。
いかがでしたでしょうか。
今まで使用していたユーザで急にアクセスできない!という状況になった時、セキュリティ設定に変更がなかったかどうかご確認ください。
もし変更した後アクセスできなくなった場合は、この記事で試したように、監査を使用してどんなエラーが発生しているか確認することができます。
監査についてのドキュメントもあります。ぜひご参照ください。
最後に、普段監査を使用されていない環境は、調査が終わったら「無効化」することをお忘れなく!