D Oracle Database Real Application Securityのトラブルシューティング

Real Application Securityの診断について

Real Application Securityは、バックエンド・データベース、アプリケーション・サーバーおよびアプリケーション・インスタンスをまたがる統合インフラストラクチャを使用します。Real Application Securityコンポーネントには、Real Application Securityシステムの問題を特定、診断および解決できる診断機能が含まれます。

Real Application Security診断は、Oracle Database 12cリリース1 (12.1)以降で使用可能なデータベース診断フレームワーク(DFW)を利用します。機能の診断では、機能障害を追跡、調査および解決できます。例外状態ダンプ、イベントベースのトレースまたはデフォルト・トレースを使用して、機能の問題を調査および解決できます。パフォーマンス診断では、パフォーマンスの問題を識別および解決できます。

検証APIの使用について

オブジェクトは、作成後に必ず検証する必要があります。これには、プリンシパル、セキュリティ・クラス、ACL、データ・セキュリティ・ポリシー、ネームスペースなどのオブジェクトが含まれます。ワークスペースに存在するこれらすべてのオブジェクトを単一の操作で検証することもできます。XS_DIAGパッケージには、作成された任意のオブジェクトの潜在的な問題を診断するために使用できるサブプログラムが含まれます。詳細は、「XS_DIAGパッケージ」を参照してください。これらのパッケージについては、使用例を示す各検証サブプログラムへのリンクを記載した次の表で簡単に説明します。

表D-1 XS_DIAGサブプログラムの要約

サブプログラム 説明

VALIDATE_PRINCIPALファンクション

プリンシパルを検証します。

VALIDATE_SECURITY_CLASSファンクション

セキュリティ・クラスを検証します。

VALIDATE_ACLファンクション

ACLを検証します。

VALIDATE_DATA_SECURITYファンクション

データ・セキュリティ・ポリシーを検証するか、特定の表に対してデータ・セキュリティ・ポリシーを検証します。

VALIDATE_NAMESPACE_TEMPLATEファンクション

ネームスペース・テンプレートを検証します。

VALIDATE_WORKSPACEファンクション

ワークスペース全体を検証します。

現在のユーザーの行に関連付けられているACLを確認する方法

現在のユーザーの特定の行に関連付けられているACLを調べるには、ORA_GET_ACLIDSファンクションを使用します。ORA_GET_ACLIDSファンクションは、現在のアプリケーション・ユーザーのデータ・セキュリティ・ポリシー対応の表の行インスタンスに関連付けられているACL IDのリストを戻します。現在の行へのアクセス権が付与されている場合、このファンクションは、一致するデータ・レルム制約に関連付けられているすべてのACL識別子を取得します。参照情報については「ORA_GET_ACLIDSファンクション」を、チュートリアル情報については「ACLの権限の確認について」を参照してください。

ACLでユーザーに権限が付与されているかどうかを調べる方法

ACLで権限が付与されているかどうかを調べるには、ORA_CHECK_ACLファンクションを使用します。ORA_CHECKACLファンクションは、アプリケーション・ユーザーがACLのリストに従って問い合せられたアプリケーション権限を持つかどうかを確認します。指定されたアプリケーション権限がアプリケーション・ユーザーに付与されている場合、ORA_CHECKACL1を戻します。アプリケーション・ユーザーに付与されていない場合は、0を戻します。参照情報については「ORA_CHECK_ACLファンクション」を、チュートリアル情報については「ACLの権限の確認について」を参照してください。

EMPLOYEE表などの表の各行に関連付けられているACLIDをリストするために、ユーザーは次の問合せを使用できます。

select ORA_GET_ACLIDS(emp) from EMPLOYEE emp;

SELECTなどの権限がEMPLOYEE表の各行に付与されている場合に結果をリストするために、ユーザーは次の問合せを実行できます。

select ORA_CHECK_ACL(ORA_GET_ACLIDS(emp), 'SELECT') from EMPLOYEE emp;

例外状態ダンプについて

例外が発生すると、Real Application Securityコンポーネントの状態情報がトレース・ファイルにダンプされます。例外状態ダンプは、航空機墜落事故の墜落現場証明に似ています。

内部エラーやサーバー・クラッシュなどの障害により、各コンポーネントに対して診断データ抽出(DDE)ルーチンが起動されます。これは、現在のシステム、セッションおよびプロセス状態情報をトレース・ファイルにダンプします。トレース・ファイルにダンプされた状態情報を使用して、障害の原因を後で分析できます。

イベントベースのトレースについて

イベントベースのトレースを使用して、特定のReal Application Securityコンポーネントに関連するイベントを追跡できます。イベントベースのトレースは、障害につながるイベントのトレースに役立ちます。たとえば、イベント番号46148を使用して、createSessionattachSessionなどのアプリケーション・セッション・イベントをトレースします。

インメモリー・トレースについて

インメモリー・トレースは、間欠的で再現が難しいエラーの診断に使用される予防的トレース・メカニズムです。インメモリー・トレース・メカニズムは、コンポーネントの状態変化とイベントをメモリー・バッファに記録します。これは、障害発生時にトレース・ファイルにダンプされます。インメモリー・トレースは、航空機墜落事故調査で使用されるブラック・ボックス・データに似ています。

統計について

Real Application Securityコンポーネント統計は、Real Application Securityシステムのパフォーマンスの問題の識別に役立ちます。統計には、セッション作成操作、プリンシパルの無効化、ロール有効化操作などの回数のような主要データが含まれます。

Real Application Securityコンポーネントのイベントベースのトレースについて

イベントベースのトレースを使用して、特定のReal Application Securityコンポーネントに関連するイベントを追跡できます。表D-2に、Real Application Securityコンポーネントに割り当てられているイベントをリストします。

表D-2 Real Application Securityコンポーネントおよびイベント

Real Application Securityのコンポーネント イベント(Oracleエラー番号)

アプリケーション・セッション

(XSSESSION)

46148

アプリケーション・プリンシパル

(XSPRINCIPAL)

46150

セキュリティ・クラス

(XSSECCLASS)

46149

ACL

(XSACL)

46110

データ・セキュリティ

(XSXDS)

46049

中間層キャッシュ

(XS_MIDTIER)

46151

データ・セキュリティVPDリライト

(XSVPD)

10730

アプリケーション・セッション(XSSESSION)イベントベース・トレースについて

次のSQL文を使用して、XSSESSIONコンポーネントに対してイベントベース・トレースを有効にします。

ALTER SESSION SET EVENTS '46148 trace name context forever, level="1", level="2", level="3"';

ここで、46148XSSESSIONイベントに関連付けられているOracleデータベース・エラー番号です。1 (low)、2 (medium)または3 (high)のトレース・レベルを設定できます。表D-3で、トレース・レベルについて説明します。

または、次の文を使用できます。

ALTER SESSION SET EVENTS 'TRACE [XSSESSION] disk=[low, medium, high]'

次のSQL文を使用して、このトレースの場所を検索できます。

SHOW PARAMETER USER_DUMP_DEST;

表D-3に、各トレース・レベルのXSSESSIONトレースの内容を示します。

表D-3 XSSESSIONトレースの内容

イベント トレース・レベル1 (低) トレース・レベル2 (中) トレース・レベル3 (高)

createSession

次の情報が含まれます。

  • ユーザー名

  • セッションのセッションID

トレース・レベル1の項目に加えて次の情報が含まれます。

  • ユーザーGUID

  • 作成時刻、最終認証時刻、グローバル変数ネームスペース、Cookie情報などのセッション属性

レベル2と同じ

attachSession

次の情報が含まれます。

  • ユーザー名

  • セッションのセッションID

トレース・レベル1の項目に加えて次の情報が含まれます。

  • ロール

トレース・レベル1と2の項目に加えて次の情報が含まれます。

  • 属性値を持つアプリケーション・ネームスペース

detachSession

次の情報が含まれます。

  • ユーザー名

  • 連結解除前のセッションのセッションID

レベル1と同じ

レベル1および2と同じ

createNamespace

次の情報が含まれます。

  • ユーザー名

  • セッションID

  • 属性値を持つアプリケーション・ネームスペース

トレース・レベル1の項目に加えて次の情報が含まれます。

  • 作成時刻、最終認証時刻、グローバル変数ネームスペース、Cookie情報などのセッション属性

トレース・レベル1と2の項目に加えて次の情報が含まれます。

  • ネームスペース・ハンドラ

switchUser

次の情報が含まれます。

  • ユーザー名

  • セッションのセッションID

トレース・レベル1の項目に加えて次の情報が含まれます。

  • ロール

トレース・レベル1と2の項目に加えて次の情報が含まれます。

  • 属性値を持つアプリケーション・ネームスペース

assignUser

次の情報が含まれます。

  • ユーザー名

  • セッションのセッションID

トレース・レベル1の項目に加えて次の情報が含まれます。

  • ロール

トレース・レベル1と2の項目に加えて次の情報が含まれます。

  • 属性値を持つアプリケーション・ネームスペース

setAttribute

次の情報が含まれます。

  • ネームスペース名

  • setAttribute操作の前と後の特定の属性の名前および値

レベル1と同じ

レベル1および2と同じ

deleteAttribute

次の情報が含まれます。

  • ネームスペース名

  • deleteAttribute操作の前と後の特定の属性の名前および値

レベル1と同じ

レベル1および2と同じ

前のイベントに加えて、名前付きイベントxs_session_stateを使用して、アプリケーション・セッションの現在の状態をダンプできます。次のSQL文を使用して、xs_session_stateイベントのトレースを有効にします。

ALTER SESSION SET EVENTS 'immediate eventdump(xs_session_state)';

イベント・ダンプには、セッションID、ユーザー名、作成時刻、最終認証時刻、グローバル変数ネームスペースなど、ユーザー・グローバル領域(UGA)メモリー内のすべてのセッション属性に関する情報が含まれます。ダンプには、パスワードなどのセキュアな項目に関する情報は含まれません。

アプリケーション・プリンシパル(XSPRINCIPAL)イベントベース・トレースについて

次のSQL文を使用して、XSPRINCIPALコンポーネントに対してイベントベース・トレースを有効にします。

ALTER SESSION SET EVENTS '46150 trace name context forever, level="1", level="2", level="3"';

ここで、46150XSPRINCIPALイベントに関連付けられているOracleデータベース・エラー番号です。1 (low)、2 (medium)または3 (high)のトレース・レベルを設定できます。表D-4で、トレース・レベルについて説明します。

または、次の文を使用できます。

ALTER SESSION SET EVENTS 'TRACE [XSPRINCIPAL] disk=[low, medium, high]';

次のSQL文を使用して、このトレースの場所を検索できます。

SHOW PARAMETER USER_DUMP_DEST;

表D-4に、各トレース・レベルのXSPRINCIPALトレースの内容を示します。

表D-4 XSPRINCIPALトレースの内容

イベント トレース・レベル1 (低) トレース・レベル2 (中) トレース・レベル3 (高)

ロールの有効化

次の情報が含まれます。

  • ユーザー名

  • セッションのセッションID

トレース・レベル1の項目に加えて次の情報が含まれます。

  • ロールの有効化操作に失敗した場合は、原因がログに記録されます。たとえば、ロールが存在しない場合やユーザーにロールが付与されていない場合は、操作が失敗することがあります

レベル1および2と同じ

ロールの無効化

次の情報が含まれます。

  • ロールが無効化された後のセッションで有効になっているすべてのユーザー・ロール

トレース・レベル1の項目に加えて次の情報が含まれます。

  • ロールの無効化操作に失敗した場合は、原因がログに記録されます。

レベル1および2と同じ

ロール・グラフ横断

次の情報が含まれます。

  • ユーザー名

  • セッションのセッションID

レベル1と同じ

レベル1および2と同じ

セキュリティ・クラス(XSSECCLASS)イベントベース・トレースについて

次のSQL文を使用して、XSSECCLASSコンポーネントに対してイベントベース・トレースを有効にします。

ALTER SESSION SET EVENTS '46149 trace name context forever, level="1", level="2", level="3"';

ここで、46149XSSECCLASSイベントに関連付けられているOracleデータベース・エラー番号です。1 (low)、2 (medium)または3 (high)のトレース・レベルを設定できます。

または、次の文を使用できます。

ALTER SESSION SET EVENTS 'TRACE [XSSECCLASS] disk=[low, medium, high]';

次のSQL文を使用して、このトレースの場所を検索できます。

SHOW PARAMETER USER_DUMP_DEST;

次のトレース情報が含まれます。

  • 親クラス、子クラス、権限、集約権限など、セキュリティ・クラス・ドキュメントの内容

  • セキュリティ・クラスの削除の場合は、キャッシュからの無効化を必要とする親クラスに関する情報が含まれます

  • セキュリティ・クラス検証エラーなどの例外関連情報

ACL (XSACL)イベントベース・トレースについて

次のSQL文を使用して、XSACLコンポーネントに対してイベントベース・トレースを有効にします。

ALTER SESSION SET EVENTS '46110 trace name context forever, level="1", level="2", level="3"';

ここで、46110XSACLイベントに関連付けられているOracleデータベース・エラー番号です。1 (low)、2 (medium)または3 (high)のトレース・レベルを設定できます。

または、次の文を使用できます。

ALTER SESSION SET EVENTS 'TRACE [XSACL] disk=[low, medium, high]';

次のSQL文を使用して、このトレースの場所を検索できます。

SHOW PARAMETER USER_DUMP_DEST;

表D-5に、各トレース・レベルのXSACLトレースの内容を示します。

表D-5 XSACLトレースの内容

イベント トレース・レベル1 (低) トレース・レベル2 (中) トレース・レベル3 (高)

ACLに対する権限の確認

次の情報が含まれます。

  • カーソル共有中のACLの結果

トレース・レベル1の項目に加えて次の情報が含まれます。

  • ACLのロードを含むACL評価

レベル1および2と同じ

データ・セキュリティ(XSXDSおよびXSVPD)イベントベース・トレースについて

次のSQL文を使用して、XSXDSコンポーネントに対してイベントベース・トレースを有効にします。

ALTER SESSION SET EVENTS '46049 trace name context forever, level="1", level="2", level="3"';

ここで、46049XSXDSイベントに関連付けられているOracleデータベース・エラー番号です。1 (low)、2 (medium)または3 (high)のトレース・レベルを設定できます。表D-6で、トレース・レベルについて説明します。

または、次の文を使用できます。

ALTER SESSION SET EVENTS 'TRACE [XSXDS] disk=[low, medium, high]';

次のSQL文を使用して、このトレースの場所を検索できます。

SHOW PARAMETER USER_DUMP_DEST;

表D-6に、各トレース・レベルのXSXDSトレースの内容を示します。

表D-6 XSXDSトレースの内容

イベント トレース・レベル1 (低) トレース・レベル2 (中) トレース・レベル3 (高)

システム・グローバル領域(SGA)にロードされたデータ・セキュリティ・ドキュメント(DSD)

次の情報が含まれます。

  • 解決されたパラメータ値を持つセキュリティ・データ・レルム制約ルール

トレース・レベル1の項目に加えて次の情報が含まれます。

  • アクセス制御リスト(ACL)識別子

レベル1および2と同じ

次のSQL文を使用して、XSVPDコンポーネントに対してイベントベース・トレースを有効にします。

ALTER SESSION SET EVENTS '10730 trace name context forever level [1, 2, 3]';

ここで、10730はXSVPDイベントに関連付けられているOracleデータベース・エラー番号です。1 (low)、2 (medium)または3 (high)のトレース・レベルを設定できます。表D-6で、トレース・レベルについて説明します。

または、次の文を使用できます。

ALTER SESSION SET EVENTS 'TRACE [XSVPD] disk=[low, medium, high]';

表D-6に、各トレース・レベルのXSVPDトレースの内容を示します。

表D-7 XSVPDトレースの内容

イベント トレース・レベル1 (低) トレース・レベル2 (中) トレース・レベル3 (高)
  • システム・グローバル領域(SGA)にロードされたデータ・セキュリティ・ドキュメント(DSD)

  • 現在のデータベース・セッションで発行されたすべての後続SQL文

次の情報が含まれます。

  • ハード解析、ソフト解析またはSQL文解析中のXDS対応オブジェクトのVPDビュー

  • 解決されたパラメータ値を持つデータ・レルム制約ルール、それに対応するACLパスおよびACL識別子

トレース・レベル1の項目に加えて次の情報が含まれます。

  • SQL文が解析または実行されたときの現在のアプリケーション・セッション・ユーザー名および有効になっているロール

トレース・レベル1の項目に加えて次の情報が含まれます。

  • 問合せ内のXDS対応オブジェクトに関連付けられたデータ・レルム制約に関連付けられているすべてのACLの内容

例外状態ダンプ情報について

例外が発生すると、Real Application Securityコンポーネントの状態情報がトレース・ファイルにダンプされます。表D-8で、個々のReal Application Securityコンポーネントについてダンプされる情報について説明します。

表D-8 Real Application Securityのコンポーネントと初回障害ダンプ情報

Real Application Securityコンポーネント 例外関連情報

XSSESSION

  • アプリケーション・セッション状態情報

XSPRINCIPAL

  • アプリケーション・セッション・ロール・リスト(アプリケーション・セッションのすべてのロール、有効なロール、無効なロールおよびデータベース・ロール)

  • システムのロール・グラフ・ハッシュ表

  • ユーザー・ハッシュ表と、システム内のユーザーに付与された直接ロール

  • プリンシパル行キャッシュ状態

セッション統計について

Real Application Securityコンポーネント統計は、Real Application Securityシステムのパフォーマンスの問題の識別に役立ちます。表D-9で、個々のReal Application Securityのコンポーネントについて収集される統計について説明します。

表D-9 Real Application Securityのコンポーネントとパフォーマンス統計

Real Application Securityコンポーネント 収集されるパフォーマンス統計

XSSESSION

  • 作成されたアプリケーション・セッション数

  • 連結および連結解除されたアプリケーション・セッション数

  • 作成されたネームスペース数

  • 実行されたユーザー・コールバック数

XSPRINCIPAL

  • 有効化/無効化されたロール数

  • プリンシパル・キャッシュ・ミスの回数

  • プリンシパル無効化の回数

中間層キャッシュ

  • セッション・キャッシュ同期の回数

  • プリンシパル・キャッシュ同期の回数

  • セキュリティ・クラス・キャッシュ同期の回数

中間層トレースの使用

中間層トレースでは、パッケージoracle.security.xsを使用します。これは次のようにして行うことができます。

  1. プロパティ・ファイルにロギング・オプションを指定します。次に例を示します。
    handlers= java.util.logging.ConsoleHandler
    .level= SEVERE
    java.util.logging.ConsoleHandler.level = FINEST
    java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
    oracle.security.xs.level = FINEST
    
  2. JVM起動時に前の構成を適用します。
    java -Djava.util.logging.config.file=logging.properties
    

    構成で指定されたハンドラ(ファイル、コンソール)にログ出力が生成されます。

Real Application Securityユーザーは、認証、認可、セッション管理などに中間層Java APIを使用できます。ユーザーは、中間層APIとのインタフェースのデバッグが必要になった場合に、トレースをオンにすることができます。トレースは、基本的なコール・スタック、関連するファンクション、所要時間、渡されたパラメータ、戻り値などを示すことができます。