プライマリ・コンテンツに移動
Oracle® Database Real Application Security管理者および開発者ガイド
12cリリース1 (12.1)
B71274-08
目次へ移動
目次
索引へ移動
索引

前
次

3 アプリケーション・セッションの構成

この章の内容は、次のとおりです。

アプリケーション・セッションについて

アプリケーション・セッションには、アプリケーションとそのユーザーに関連する情報が含まれます。アプリケーション・セッションは、アプリケーション・セッション状態を属性と値のペアのコレクションとして格納します。これらの属性値のペアは、ネームスペースに分割されます。従来の重量データベース・セッションとは異なり、アプリケーション・セッションは、トランザクションやカーソルなどの独自のデータベース・リソースを保持しません。アプリケーション・セッションが消費するサーバー・リソースは重量セッションよりはるかに少ないため、アプリケーション・セッションを各エンド・アプリケーション・ユーザー専用にできます。アプリケーション・セッションは、データベースに永続化でき、後で最小限のコストで再開できます。

アプリケーション・セッションを構成する場合、次の2つの作業フェーズがあります。

  1. アプリケーション・セッションを作成して管理します。

  2. セッションの継続期間中にセッション状態を操作できます。

PL/SQL APIまたはJava APIを使用してアプリケーション・セッションを構成できます。この章では、PL/SQLでのアプリケーション・セッションのプログラムによる作成、使用およびメンテナンスについて説明し、対応するJava情報への特定のリンクを含めます。

関連項目:

Real Application Securityでのアプリケーション・セッションについて

図3-1は、アプリケーション・セッションが適用される部分を示したReal Application Securityのアーキテクチャ図です。この図は、データベースでアプリケーション・セッションを作成するアプリケーションを示しています。これらのアプリケーション・セッションの一部は、従来のデータベース(DB)・セッションに関連付けられます。

図3-1は、ACL、アプリケーション権限、アプリケーション・ユーザー、アプリケーション・ロールなどのReal Application Securityの他のコンポーネントも示しています。

図3-1 Real Application Securityのアーキテクチャ

図3-1の説明が続きます
「図3-1 Real Application Securityのアーキテクチャ」の説明

アプリケーション・セッションのメリット

アプリケーション・セッションは、従来のデータベース・セッションよりも機能的に優れています。たとえば、従来のデータベース・セッションは、通常、エンド・ユーザー・アイデンティティや、それらのエンド・ユーザーのセキュリティ・ポリシーを認識しません。これに対して次のようになります。

  • アプリケーション・セッションは、エンド・ユーザーのセキュリティ・コンテキストをカプセル化します。これにより、アプリケーションは、エンド・ユーザー・アイデンティティに基づいて、アクセス制御でデータベースの認可メカニズムを使用できます。

  • アプリケーション・セッションは、同時に複数のデータベース・セッションに関連付けることができます。

  • Oracle Real Application Clusters (Oracle RAC)環境のすべてのノードからアクセスできます。

アプリケーション・セッションには、従来のデータベース・セッションに比べて次のパフォーマンス上のメリットがあります。

  • 従来のデータベース・セッションより少ないオーバーヘッドで作成できます。

  • データベースで維持し、後から最小限のコストで再開できます。

  • Real Application Securityで、キャッシュを使用してクライアント上のセッション属性の変更およびセッション状態を収集できます。その後、これらの変更は次回のデータベース・ラウンドトリップまでデータベースに追加されるため、データベース・ラウンドトリップの回数が減少します。

アプリケーション・セッションの作成とメンテナンスについて

アプリケーション・セッションの作成

アプリケーション・セッションは、PL/SQLでDBMS_XS_SESSIONS.CREATE_SESSIONプロシージャを使用するか、JavaでXSSessionManagerクラスのcreateSessionメソッドを使用して作成できます。アプリケーション・セッションを作成する場合、実行するユーザーには、CREATE_SESSIONアプリケーション権限が必要です。この権限は、XS_SESSION_ADMINデータベース・ロールを通じて取得するか、XS_ADMIN_UTIL.GRANT_SYSTEM_PRIVILEGE APIコールによって取得できます(詳細は、GRANT_SYSTEM_PRIVILEGEプロシージャを参照してください)。CREATE_SESSIONプロシージャによって、sessionid OUTパラメータの新規作成セッションの一意識別子にデータが移入されます。この一意識別子は、後続のコールでセッションを参照する場合に使用できます。DBA_XS_SESSIONSデータ・ディクショナリ・ビューに、データベースのすべてのアプリケーション・セッションが表示されます。

セッションの作成時に作成されるネームスペースのリストも指定できます。セッションの作成時にネームスペースを指定した場合、コール元はネームスペースに対するアプリケーション権限MODIFY_NAMESPACEまたはMODIFY_ATTRIBUTE、あるいはADMIN_NAMESPACEシステム権限を持ちます。

例3-1に、lwuser1でのアプリケーション・セッションの作成方法を示します。

例3-1 アプリケーション・セッションの作成

DECLARE
  sessionid RAW(16);
BEGIN
  SYS.DBMS_XS_SESSIONS.CREATE_SESSION('lwuser1', sessionid);
END;

関連項目:

  • このPL/SQLプロシージャの構文の詳細は、CREATE_SESSIONプロシージャを参照してください。

  • Java createSessionメソッドの構文(Javadoc書式)の詳細は、Oracle Database Real Application Security Java APIリファレンスを参照してください。

  • このタスクのJavaの例の詳細は、例6-2を参照してください。

匿名アプリケーション・セッションの作成

PL/SQLでDBMS_XS_SESSIONS.CREATE_SESSIONプロシージャを使用するか、JavaでXSSessionManagerクラスのcreateAnonymousSessionメソッドを使用して、匿名アプリケーション・セッションを作成することもできます。PL/SQL APIを通じて匿名セッションを作成するには、事前定義されたユーザー名のXSGUESTを指定する必要があります。

例3-2に、事前定義されたユーザーXSGUESTを使用して匿名セッションを作成する方法を示します。

匿名アプリケーション・セッションを作成したら、そのセッションに名前付きユーザーを割り当てることができます。

例3-2 匿名アプリケーション・セッションの作成

DECLARE
  sessionid RAW(16);
BEGIN
  SYS.DBMS_XS_SESSIONS.CREATE_SESSION('XSGUEST', sessionid);
END;

関連項目:

  • このPL/SQLプロシージャの構文の詳細は、CREATE_SESSIONプロシージャを参照してください。

  • Java createAnonymousSessionメソッドの構文(Javadoc書式)の詳細は、Oracle Database Real Application Security Java APIリファレンスを参照してください。

  • このタスクのJavaの例の詳細は、例6-2を参照してください。

従来のデータベース・セッションへのアプリケーション・セッションの連結

アプリケーション・セッションを使用するには、データベース・セッションに関連付ける必要があります。この操作は、連結と呼ばれます。PL/SQLでDBMS_XS_SESSIONS.ATTACH_SESSIONプロシージャを使用するか、JavaでXSSessionManagerクラスのattachSessionメソッドを使用して、アプリケーション・セッションを従来のデータベース・セッションに関連付けることができます。データベース・セッションが一度に連結できるアプリケーション・セッションは、1つのみです。DBA_XS_ACTIVE_SESSIONS動的データ・ディクショナリ・ビューに、データベースのすべての連結済アプリケーション・セッションが表示されます。

このプロシージャを実行するには、従来のセッション・ユーザーにATTACH_SESSIONアプリケーション権限が必要です。この権限は、XS_SESSION_ADMINデータベース・ロールを通じて取得するか、XS_ADMIN_UTIL.GRANT_SYSTEM_PRIVILEGE APIコールによって取得できます。ネームスペースを指定する場合、ユーザーにはネームスペースに対するアプリケーション権限MODIFY_NAMESPACEまたはMODIFY_ATTRIBUTE、あるいはADMIN_NAMESPACEシステム権限が必要です。

例3-3に、アプリケーション・セッションをデータベース・セッションに連結する方法を示します。

動的ロールでセッションを連結する場合、動的ロールのリストを連結で渡すことができます。

注意:

アプリケーションを開発する場合、すべてのアプリケーション・エンド・ユーザー・アクションがATTACH_SESSION ... DETACH_SESSIONプログラミング・ブロック内で取得されていることを確認してください。(詳細は、従来のデータベース・セッションからのアプリケーション・セッションの連結解除を参照してください。)

次の表に、このトピックに関する追加情報へのリンクを示します。

参照内容 関連項目

このPL/SQLプロシージャの構文

ATTACH_SESSIONプロシージャ

Java attachSessionメソッドの構文(Javadoc形式)

Oracle Database Real Application Security Java APIリファレンス

このタスクのJavaの例

例: 6-3

例3-3 アプリケーション・セッションの連結

DECLARE
  sessionid raw(16);
BEGIN
  SYS.DBMS_XS_SESSIONS.CREATE_SESSION('lwuser1', sessionid);
  SYS.DBMS_XS_SESSIONS.ATTACH_SESSION(sessionid);
END;

アプリケーション・セッションのCookieの設定

アプリケーション・セッションに特定のCookieを関連付けるには、PL/SQLのDBMS_XS_SESSIONS.SET_SESSION_COOKIEプロシージャを使用するか、JavaのXSSessionManagerクラスのsetCookieメソッドを使用します。Cookieは、セッションの作成時にCREATE_SESSION PL/SQL APIを通じて関連付けることもできます。Cookieは、アプリケーション・セッション中にWebサイトによりユーザーのセッションに埋め込まれたトークンです。したがって、次回同じユーザーがそのWebサイトになんらかの要求をすると、Cookieがアプリケーション・セッションに送信され、サーバーはセッションをそのユーザーと関連付けることができます。

このプロシージャを実行するには、ユーザーにMODIFY_SESSIONアプリケーション権限を付与する必要があります。この権限は、XS_SESSION_ADMINデータベース・ロールを通じて取得するか、XS_ADMIN_UTIL.GRANT_SYSTEM_PRIVILEGE APIコールによって取得できます。

例3-4に、アプリケーション・セッションのCookieを設定する方法を示します。

例3-4 アプリケーション・セッションのCookieの設定

DECLARE
  sessionid raw(16);
BEGIN
  SYS.DBMS_XS_SESSIONS.CREATE_SESSION('lwuser1', sessionid);
  SYS.DBMS_XS_SESSIONS.SET_SESSION_COOKIE('Cookie1', sessionid);
END;

関連項目:

  • このPL/SQLプロシージャの構文の詳細は、SET_SESSION_COOKIEプロシージャを参照してください。

  • Java setCookieメソッドの構文(Javadoc書式)の詳細は、Oracle Database Real Application Security Java APIリファレンスを参照してください。

  • このタスクのJavaの例の詳細は、例6-20を参照してください。

匿名アプリケーション・セッションへのアプリケーション・ユーザーの割当て

現在連結されている匿名アプリケーション・セッションに名前付きのアプリケーション・ユーザーを割り当てるには、PL/SQLのDBMS_XS_SESSIONS.ASSIGN_USERプロシージャを使用するか、JavaのXSSessionManagerクラスのassignUserメソッドを使用します。ユーザーを割り当てると、ユーザー・セッションが匿名から名前付きユーザーに変更されます。

このプロシージャを実行するには、ディスパッチャまたは接続ユーザーにASSIGN_USERアプリケーション権限が必要です。この権限は、XS_SESSION_ADMINデータベース・ロールを通じて取得するか、XS_ADMIN_UTIL.GRANT_SYSTEM_PRIVILEGE APIコールによって取得できます。ネームスペースを指定する場合、ユーザーにはネームスペースに対するアプリケーション権限MODIFY_NAMESPACEまたはMODIFY_ATTRIBUTE、あるいはADMIN_NAMESPACEシステム権限が付与されている必要があります。動的ロールのリストも、DBMS_XS_SESSIONS.ASSIGN_USERプロシージャを使用して有効にできます。

例3-5に、アプリケーション・ユーザーlwuser1をアプリケーション・セッションに割り当てる方法を示します。

次の表に、このトピックに関する追加情報へのリンクを示します。

参照内容 関連項目

このPL/SQLプロシージャの構文

ASSIGN_USERプロシージャ

Java assignUserメソッドの構文(Javadoc形式)

Oracle Database Real Application Security Java APIリファレンス

このタスクのJavaの例

例6-5

例3-5 アプリケーション・セッションへのアプリケーション・ユーザーの割当て

DECLARE
  sessionid raw(16);
BEGIN
  SYS.DBMS_XS_SESSIONS.CREATE_SESSION('XSGUEST', sessionid);
  SYS.DBMS_XS_SESSIONS.ATTACH_SESSION(sessionid);
  SYS.DBMS_XS_SESSIONS.ASSIGN_USER('lwuser1');
END;

現在のアプリケーション・セッションの別のアプリケーション・ユーザーへの現在のアプリケーション・ユーザーの切替え

PL/SQLでDBMS_XS_SESSIONS.SWITCH_USERプロシージャを使用するか、JavaでSessionインタフェースのswitchUserメソッドを使用して、現在のアプリケーション・セッションのセキュリティ・コンテキストを、指定したアプリケーション・ユーザーの新規に初期化したセキュリティ・コンテキストに切替えまたはプロキシ設定できます。別のアプリケーション・ユーザーを代理するには、切替え操作を実行する前に、現在のアプリケーション・セッション・ユーザーをターゲット・ユーザーのプロキシ・ユーザーとして設定する必要があります。これは、XS_PRINCIPAL.ADD_PROXY_USER PL/SQL APIを通じて実行します。

ユーザーを切り替えると、2つの名前付きユーザー間でユーザー・セッションが変更されます。

プロキシ操作のターゲット・アプリケーション・ユーザーが、プロキシ・ユーザー用に設定されたフィルタ・ロール(プロキシ・ロール)のリストを持っている場合、それらはセッションで有効化されます。

切替え操作の後、アプリケーションのネームスペースおよび属性を保持または消去できます。keep_stateパラメータがTRUEに設定されている場合、アプリケーションのネームスペースおよび属性はすべて保持されますが、それ以外の場合、セッションの以前の状態はすべて消去されます。

ネームスペースを指定する場合、ユーザーにはネームスペースに対するアプリケーション権限MODIFY_NAMESPACEまたはMODIFY_ATTRIBUTE、あるいはADMIN_NAMESPACEシステム権限が付与されている必要があります。

例3-6に、アプリケーション・ユーザーlwuser1を現在のアプリケーション・セッションのアプリケーション・ユーザーlwuser2に切り替える方法を示します。ネームスペース・テンプレートのns1およびns2SYSDBAによって作成されている必要があることに注意してください。

次の表に、このトピックに関する追加情報へのリンクを示します。

参照内容 関連項目

このPL/SQLプロシージャの構文

SWITCH_USERプロシージャ

Java assignUserメソッドの構文(Javadoc形式)

Oracle Database Real Application Security Java APIリファレンス

このタスクのJavaの例

例6-6

例3-6 現在のアプリケーション・セッションの別のアプリケーション・ユーザーへのアプリケーション・ユーザーの切替え

DECLARE
  sessionid RAW(16);
  nsList DBMS_XS_NSATTRLIST;
BEGIN 
  nsList := DBMS_XS_NSATTRLIST(DBMS_XS_NSATTR('ns1'),DBMS_XS_NSATTR('ns2'));
  SYS.DBMS_XS_SESSIONS.CREATE_SESSION('lwuser1', sessionid);
  SYS.DBMS_XS_SESSIONS.ATTACH_SESSION(sessionid);
  SYS.DBMS_XS_SESSIONS.SWITCH_USER(username => 'lwuser2',
                               keep_state => TRUE,
                               namespaces => nsList);
END;

グローバル・コールバック・イベント・ハンドラ・プロシージャの作成について

コールバック・イベント・ハンドラ・プロシージャは、指定の引数セットが含まれたプロトタイプに従う必要があります。

たとえば、次のcallback_procedureでは既存のPL/SQLプロシージャを指定しますが、これはイベント・ハンドラであり、2つの形式が可能です。

PROCEDURE callback_procedure (sessionid in raw, error out pls_integer)

最初の形式には、sessionid (RAW)、およびエラー設定の目的に使用するOUTパラメータerrorの2つのパラメータが含まれます。sessionidには、イベントがトリガーされたセッションのセッションIDが格納されます。OUTパラメータerrorを使用すると、イベント・ハンドラ・コードでエラーを表示できます。

PROCEDURE callback_procedure (sessionid in raw, user in varchar2, error out pls_integer)

2番目の形式には、このイベントをトリガーしたユーザーを指定するための追加パラメータuser (VARCHAR2)が含まれます。

注意:

エラー値は、PL/SQL本体または例外ブロックで、error:= 0;のような値に明示的に設定する必要があります。

そうしないと、エラー「ORA-46071: イベント・ハンドラ<name-of-event-handler>でエラーが発生しました」に続いて、別のエラー「ORA-1405: フェッチした列の値がNULLです」が発生し、エラー値がNULLであることが示されます。

次の例は、2番目の形式のコールバック・プロシージャを使用したエラー値の明示的な設定を示しています。

CREATE OR REPLACE PACKAGE CALLBACK_PACKAGE AS
PROCEDURE CALLBACK_PROCEDURE (sessionid in RAW, user in VARCHAR2, error out PLS_INTEGER);
END CALLBACK_PACKAGE;
/

CREATE OR REPLACE PACKAGE BODY CALLBACK_PACKAGE AS
PROCEDURE CALLBACK_PROCEDURE (sessionid in RAW, user in VARCHAR2, error out PLS_INTEGER) IS
BEGIN
  error := 0;
  dbms_output.put_line('Inside callback procedure');
EXCEPTION
WHEN OTHERS THEN
        error:=0;
        dbms_output.put_line('Error');
END CALLBACK_PROCEDURE;
END CALLBACK_PACKAGE;

アプリケーション・セッションのグローバル・コールバック・イベント・ハンドラの構成

グローバル・コールバック・イベント・ハンドラは、目的とする特定のセッション・イベントが発生したときに起動してセッション状態を検査、記録および変更できる、事前定義されたPL/SQLプロシージャです。セッション・イベントには複数のグローバル・コールバック・イベント・ハンドラを追加できます。PL/SQLプロシージャを作成したら、それぞれ次のプロシージャを使用して、それを登録または登録解除するか、有効化または無効化することができます。

  • DBMS_XS_SESSIONS.ADD_GLOBAL_CALLBACK

    このプロシージャを使用して、コールバック・イベント・ハンドラを登録します。

  • DBMS_XS_SESSIONS.DELETE_GLOBAL_CALLBACK

    このプロシージャを使用して、グローバル・コールバックを登録解除します。

  • DBMS_XS_SESSIONS.ENABLE_GLOBAL_CALLBACK

    このプロシージャを使用して、有効にするにはTRUEを、無効にするにはFALSEの値を指定して、グローバル・コールバック・プロシージャを有効化または無効化します。

これらのAPIを実行するには、ユーザーは、CALLBACKアプリケーション権限を持っている必要があります。これは、XSPROVISIONERアプリケーション・ロールを通じて取得するか、XS_ADMIN_UTIL.GRANT_SYSTEM_PRIVILEGE APIをコールすることで取得できます。アプリケーション・セッションで使用する1つ以上のグローバル・コールバック・イベント・ハンドラを構成できます。複数のコールバック・イベント・ハンドラを構成すると、Oracle Databaseでは、ハンドラが作成された順序で実行されます。

オプションで、次の手順に従って実行順序を変更できます。

  1. DBMS_XS_SESSIONS.DELETE_GLOBAL_CALLBACKプロシージャを実行して既存のコールバックをすべて登録解除します。
  2. DBMS_XS_SESSIONS.ADD_GLOBAL_CALLBACKプロシージャを実行してコールバックを登録します。

例3-7 アプリケーション・セッションでのグローバル・コールバックの登録

BEGIN
  SYS.DBMS_XS_SESSIONS.ADD_GLOBAL_CALLBACK 
   (DBMS_XS_SESSIONS.CREATE_SESSION_EVENT, 
   'CALLBACK_SCHM','CALLBACK_PKG','CALLBACK_PROC');
END;
/

表3-1に、コールバック・イベント・ハンドラを使用できるセッション・イベントを示します。

表3-1 コールバック・イベント・ハンドラを使用できるセッション・イベント

セッション・イベント コールバックが実行される時期

新規アプリケーション・セッションの作成

セッションが作成された後。

既存のアプリケーション・セッションへの連結

セッションが連結された後。

動的アプリケーション・ロールの有効化

動的アプリケーション・ロールが有効化された後。

動的アプリケーション・ロールの無効化

動的アプリケーション・ロールが無効化された後。

アプリケーション・セッションの直接ログイン

セッションが添付された後(セッション連結がアプリケーション・セッションの直接ログオンの一部としてコールされる場合)。

指定されたアプリケーション・ユーザーの匿名アプリケーション・セッションへの割当て

指定されたユーザーが匿名アプリケーション・セッションに割り当てられた後。

ある名前付きアプリケーション・ユーザーから別の名前付きアプリケーション・ユーザーへの切替え

アプリケーション・ユーザーが切り替えられた後(アプリケーション・ユーザーが元のアプリケーション・ユーザーに戻されない場合)。

名前付きアプリケーション・ユーザーから元のアプリケーション・ユーザーへの復帰

アプリケーション・ユーザーが切り替えられた後(アプリケーション・ユーザーが元のアプリケーション・ユーザーに戻される場合)。

標準アプリケーション・ロールの有効化

アプリケーション・ロールが有効化された後。

標準アプリケーション・ロールの無効化

アプリケーション・ロールが無効化された後。

既存のアプリケーション・セッションまたはデータベース・セッションからの連結解除

セッションが連結解除される前。

既存のアプリケーション・セッションまたはデータベース・セッションの終了

セッションが破棄される前。

アプリケーション・セッションまたはデータベース・セッションの直接ログオフ

セッションが連結解除される前(セッションの連結解除がアプリケーション・セッションの直接ログオフの一部としてコールされる場合)。

セッションの作成後にアプリケーション固有の特定の状態を初期化するとします。例3-7に、CALLBACK_PROCという状態を設定するグローバル・コールバックを登録する方法を示します(これは、パッケージCALLBACK_PKGで定義され、スキーマCALLBACK_SCHMによって所有されます)。

状態のCALLBACK_PROCは、イベントCREATE_SESSION_EVENTのグローバル・コールバックとして登録されます。

その他の例および各プロシージャの構文の詳細は、次の項を参照してください。

アプリケーション・セッションの保存

現在のユーザー・アプリケーション・セッションを保存するには、PL/SQLのDBMS_XS_SESSIONS.SAVE_SESSIONプロシージャを使用するか、JavaのXSSessionManagerクラスのsaveSessionメソッドを使用します。保存操作を使用するのは、現在のセッションと同じセッションを使用して、セッションの変更を他のセッションに即座に伝播する必要がある場合です。保存操作を使用しない場合、セッションの変更は、現在のセッションが連結解除された後にのみ他のセッションに反映されます。

コール元ユーザーがこの操作を実行するために権限は必要ありません。

例3-8に、現在のユーザー・アプリケーション・セッションを保存する方法を示します。

例3-8 現在のユーザー・アプリケーション・セッションの保存

BEGIN
 SYS.DBMS_XS_SESSIONS.SAVE_SESSION;
END;

関連項目:

  • これらのPL/SQLプロシージャの構文の詳細は、SAVE_SESSIONプロシージャを参照してください。

  • Java detachSessionメソッドの構文(Javadoc書式)の詳細は、Oracle Database Real Application Security Java APIリファレンスを参照してください。

  • このタスクのJavaの例の詳細は、例7-4を参照してください。

従来のデータベース・セッションからのアプリケーション・セッションの連結解除

次のいずれかのプロシージャを使用して、従来のデータベース・セッションからアプリケーション・セッションを連結解除できます。

  • DBMS_XS_SESSIONS.DETACH_SESSION(abort => FALSE)

    このプロシージャを使用すると、セッションを連結解除して、最後にセッションの変更が保存されてから発生したすべての変更をコミットできます。abortパラメータをFALSE (デフォルト値)に指定すると、現在のセッションで実行されたすべての変更が保持されます。現在連結されているユーザーは、追加の権限なしでこの操作を実行できます。

    DETACH_SESSIONは、常に現在連結されているセッションに対して実行されます。

  • DBMS_XS_SESSIONS.DETACH_SESSION(abort => TRUE)

    このプロシージャを使用すると、変更を保存せずにセッションを連結解除できます。abortパラメータをTRUEに指定すると、現在のセッションで実行された変更がロールバックされます。連結以降にセッションに対して行われたロールとネームスペースの変更は破棄されます。

例3-9に、データベース・セッションからアプリケーション・セッションを連結解除して変更をコミットする方法を示します。DETACH_SESSIONを任意の場所でコールして、現在連結されているセッションを連結解除できます。

JavaのXSSessionManagerクラスのdetachSessionメソッドを使用できます。

例3-10に、変更を保存せずにアプリケーション・セッションからデータベース・セッションを連結解除する方法を示します。

注意:

アプリケーションを開発する場合、すべてのアプリケーション・エンド・ユーザー・アクションがATTACH_SESSION ... DETACH_SESSIONプログラミング・ブロック内で取得されていることを確認してください。(詳細は、従来のデータベース・セッションへのアプリケーション・セッションの連結を参照してください。)

例3-9 アプリケーション・セッションの連結解除とコミット

DECLARE
  sessionid RAW(16);
BEGIN
  SYS.DBMS_XS_SESSIONS.CREATE_SESSION('lwuser1', sessionid);
  SYS.DBMS_XS_SESSIONS.ATTACH_SESSION(sessionid);
...
  SYS.DBMS_XS_SESSIONS.DETACH_SESSION;
...
END;

例3-10 アプリケーション・セッションの連結解除と非コミット

DECLARE
  sessionid RAW(16);
BEGIN
  SYS.DBMS_XS_SESSIONS.CREATE_SESSION('lwuser1', sessionid);
  SYS.DBMS_XS_SESSIONS.ATTACH_SESSION(sessionid);
...
  SYS.DBMS_XS_SESSIONS.DETACH_SESSION(TRUE);
END;

関連項目:

  • これらのPL/SQLプロシージャの構文の詳細は、DETACH_SESSIONプロシージャを参照してください。

  • Java detachSessionメソッドの構文(Javadoc書式)の詳細は、Oracle Database Real Application Security Java APIリファレンスを参照してください。

  • このタスクのJavaの例の詳細は、例6-21を参照してください。

アプリケーション・セッションの破棄

PL/SQLでDBMS_XS_SESSIONS.DESTROY_SESSIONプロシージャを使用するか、JavaでXSSessionManagerクラスのdestroySessionメソッドを使用して、アプリケーション・セッションを終了できます。このプロシージャは、アプリケーション・セッションから従来のセッションをすべて連結解除します。

このプロシージャを実行する場合、実行するユーザーには、TERMINATE_SESSIONアプリケーション権限が必要です。この権限は、XS_SESSION_ADMINデータベース・ロールを通じて取得するか、XS_ADMIN_UTIL.GRANT_SYSTEM_PRIVILEGE APIコールによって取得できます。

例3-11に、アプリケーション・セッションを破棄する方法を示します。

例3-11 アプリケーション・セッションの破棄

DECLARE
  sessionid RAW(16);
BEGIN
  SYS.DBMS_XS_SESSIONS.CREATE_SESSION('lwuser1', sessionid);
  SYS.DBMS_XS_SESSIONS.ATTACH_SESSION(sessionid);
  SYS.DBMS_XS_SESSIONS.DETACH_SESSION;
  SYS.DBMS_XS_SESSIONS.DESTROY_SESSION(sessionid);
END;

関連項目:

  • このPL/SQLプロシージャの構文の詳細は、DESTROY_SESSIONプロシージャを参照してください。

  • Java destroySessionメソッドの構文(Javadoc書式)の詳細は、Oracle Database Real Application Security Java APIリファレンスを参照してください。

  • このタスクのJavaの例の詳細は、例6-22を参照してください。

アプリケーション・セッションの状態の操作について

ネームスペース・テンプレートを使用したネームスペースの作成について

アプリケーションでは、ネームスペースを使用してアプリケーション定義の属性/値ペアを格納します。アプリケーションは、通常、異なるアプリケーション・セッション全体で同じネームスペースを使用する必要があります。ネームスペース・テンプレートは、ネームスペースを定義および初期化するための方法です。

ネームスペース・テンプレートは、ネームスペースとそのプロパティを定義します。これを使用して、アプリケーション・セッションでネームスペースを初期化します。ネームスペースの名前は、それを定義するテンプレートと同じである必要があります。

ネームスペース・テンプレートの構成要素

ネームスペース・テンプレートには、次のものが含まれます。

  • ネームスペースの名前

    アプリケーション・ネームスペースの名前によって、ネームスペースが一意に識別されます。この名前は、アプリケーション・セッションでのネームスペースの作成時に使用されます。

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

    ネームスペース・ハンドラは、属性値が設定または取得されたときにコールされます。ハンドラの指定はオプションです。

    ネームスペースは、イベント処理ファンクションに関連付けることができます。イベント処理用に登録されている属性に対する操作が実行されるたびに、サーバーによってこのファンクションが起動されます。イベント処理ファンクションには、引数として属性名、属性値およびイベント・コードを指定します。たとえば、次のようになります。

    FUNCTION event_handling_function_name(
             session_id IN RAW,
             namespace  IN VARCHAR2,
             attribute  IN VARCHAR2,
             old_value  IN VARCHAR2,
             new_value  IN VARCHAR2,
             event_code IN PLS_INTEGER)
    RETURNS PLS_INTEGER;
    
  • 属性リスト

    属性リストには、ネームスペースに対して定義された属性が含まれます。これらの属性は、ネームスペースの作成時にセッションで作成されます。

    属性には、次のオプション・データを指定できます。

    • デフォルト値

      属性は、アプリケーション・セッションでのネームスペースの作成時にデフォルト値で初期化されます。デフォルト値と、イベント・タイプFIRSTREAD_EVENTおよびFIRSTREAD_PLUS_UPDATE_EVENTは、同時に存在できません。

    • イベント・タイプ

      属性には、次のイベント・タイプを指定できます。

      • FIRSTREAD_EVENT

        値の設定されていない属性が最初に読み取られたときにネームスペース・ハンドラをコールするには、このイベント・タイプを指定します。このイベント・タイプを指定できるのは、属性にデフォルト値が設定されていない場合のみです。

      • UPDATE_EVENT

        属性値が更新されたときにネームスペース・ハンドラをコールするには、このイベント・タイプを指定します。

      • FIRSTREAD_PLUS_UPDATE_EVENT

        値の設定されていない属性が最初に読み取られたとき、またはその値が更新されたときにネームスペース・ハンドラをコールするには、このイベント・タイプを指定します。このイベント・タイプを指定できるのは、属性にデフォルト値が設定されていない場合のみです。

  • ネームスペースACL

    ネームスペース操作のための権限モデル。ネームスペース操作は、テンプレートに設定されたACLによって保護されます。デフォルトでは、NS_UNRESTRICTED_ACLがテンプレートに設定されており、テンプレートから作成されたネームスペースに対する無制限の操作が許可されます。

ネームスペース・ビューについて

次のデータ・ディクショナリ・ビューを問い合せることで、現在およびすべてのアプリケーション・セッションのネームスペース・テンプレート、ネームスペース・テンプレート属性およびネームスペース属性に関する情報を検索できます。

アプリケーション・セッションのネームスペース・テンプレートの作成

ネームスペース・テンプレートを作成するには、PL/SQLのXS_NAMESPACE.CREATE_TEMPLATEプロシージャを使用するか、JavaのSessionインタフェースのcreateNamespaceメソッドを使用します。

例3-12に、アプリケーション・セッションのネームスペース・テンプレートns1を作成する方法を示します。このネームスペースの属性は、属性リストattrsを使用して定義されます。このネームスペース・テンプレートでは、NS_UNRESTRICTED_ACLがテンプレートに設定されているため、テンプレートから作成されたネームスペースに対する無制限の操作が許可されます。

コール側ユーザーは、ネームスペース・テンプレートおよび属性を管理できるADMIN_ANY_SEC_POLICYアプリケーション権限を持っている必要があります。

例3-12 ネームスペース・テンプレートの作成

DECLARE
  attrs XS$NS_ATTRIBUTE_LIST;
BEGIN
  attrs := XS$NS_ATTRIBUTE_LIST();
  attrs.extend(3);
 
  attrs(1) := XS$NS_ATTRIBUTE('attr1','value1',
    XS_NAMESPACE.UPDATE_EVENT);
  attrs(2) := XS$NS_ATTRIBUTE('attr2',null,
    XS_NAMESPACE.FIRSTREAD_PLUS_UPDATE_EVENT);
  attrs(3) := XS$NS_ATTRIBUTE('attr3','value3');
 
  SYS.XS_NAMESPACE.CREATE_TEMPLATE(name=>'ns1',
                               description=>'namespace template 1',
                               attr_list=>attrs,
                               schema=>'SCOTT',
                               package=>'PKG1',
                               function=>'FN1',
                               acl=>'SYS.NS_UNRESTRICTED_ACL');
END;
/

関連項目:

  • このPL/SQLプロシージャの構文の詳細は、CREATE_TEMPLATEプロシージャを参照してください。

  • Java createNamespaceメソッドの構文(Javadoc書式)の詳細は、Oracle Database Real Application Security Java APIリファレンスを参照してください。

  • このタスクのJavaの例の詳細は、例6-10を参照してください。

アプリケーション・セッションでのネームスペースの初期化

セッションが作成されたときにネームスペースを初期化する方法

PL/SQLのDBMS_XS_SESSIONS.CREATE_SESSIONプロシージャを使用するか、JavaのXSSessionManagerクラスのcreateSessionメソッドを使用してアプリケーション・セッションを作成する場合、初期化するネームスペースのリストを指定できます。

例3-13に、アプリケーション・セッションを作成するときに、2つのネームスペースns1およびns2を初期化する方法を示します。

セッションの作成時にネームスペースを指定した場合、コール元にはネームスペースに対するアプリケーション権限MODIFY_NAMESPACEまたはMODIFY_ATTRIBUTEが付与されているか、ADMIN_NAMESPACEシステム権限が付与されている必要があります。

注意:

例3-13で使用されるネームスペースは、対応するネームスペース・テンプレートが定義されている必要があります。

例3-13 アプリケーション・セッションを作成するときにネームスペースを初期化する方法

DECLARE
  nsList DBMS_XS_NSATTRLIST;
  sessionid RAW(16);
BEGIN
    nsList := DBMS_XS_NSATTRLIST(DBMS_XS_NSATTR('ns1'),DBMS_XS_NSATTR('ns2'));
    SYS.DBMS_XS_SESSIONS.CREATE_SESSION('lwuser1', sessionid, FALSE, FALSE, nsList);
END;
/

関連項目:

  • このPL/SQLプロシージャの構文の詳細は、CREATE_SESSIONプロシージャを参照してください。

  • Java createSessionメソッドの構文(Javadoc書式)の詳細は、Oracle Database Real Application Security Java APIリファレンスを参照してください。

  • このタスクのJavaの例の詳細は、例6-2を参照してください。

セッションが連結されたときにネームスペースを初期化する方法

PL/SQLのDBMS_XS_SESSIONS.ATTACH_SESSIONプロシージャを使用するか、JavaのXSSessionManagerクラスのattachSessionメソッドを使用してセッションを連結する場合、初期化するネームスペースのリストを指定できます。

例3-14に、アプリケーション・セッションを連結するときに、2つのネームスペースns1およびns2を初期化する方法を示します。

ネームスペースを指定する場合、ユーザーにはネームスペースに対するアプリケーション権限MODIFY_NAMESPACEまたはMODIFY_ATTRIBUTE、あるいはADMIN_NAMESPACEシステム権限が付与されている必要があります。

注意:

例3-14で使用されるネームスペースは、対応するネームスペース・テンプレートが定義されている必要があります。

例3-14 アプリケーション・セッションを連結するときにネームスペースを初期化する方法

DECLARE
  nsList DBMS_XS_NSATTRLIST;
  sessionid RAW(16);
BEGIN
    nsList := DBMS_XS_NSATTRLIST(DBMS_XS_NSATTR('ns1'),DBMS_XS_NSATTR('ns2'));
    SYS.DBMS_XS_SESSIONS.CREATE_SESSION('lwuser1', sessionid);
    SYS.DBMS_XS_SESSIONS.ATTACH_SESSION(sessionid, NULL, NULL, NULL, NULL, nsList);
END;
/

関連項目:

  • このPL/SQLプロシージャの構文の詳細は、ATTACH_SESSIONプロシージャを参照してください。

  • Java attachSessionメソッドの構文(Javadoc書式)の詳細は、Oracle Database Real Application Security Java APIリファレンスを参照してください。

  • このタスクのJavaの例の詳細は、例6-3を参照してください。

名前付きアプリケーション・ユーザーが匿名アプリケーション・セッションに割り当てられたときにネームスペースを初期化する方法

PL/SQLのDBMS_XS_SESSIONS.ASSIGN_USERプロシージャを使用するか、JavaのXSSessionManagerクラスのassignUserメソッドを使用してアプリケーション・セッションにアプリケーション・ユーザーを割り当てる場合、初期化するネームスペースのリストを指定できます。

ネームスペースを指定する場合、ユーザーにはネームスペースに対するアプリケーション権限MODIFY_NAMESPACEまたはMODIFY_ATTRIBUTE、あるいはADMIN_NAMESPACEシステム権限が付与されている必要があります。

例3-15に、アプリケーション・セッションにアプリケーション・ユーザーを割り当てるときに、2つのネームスペースns1およびns2を初期化する方法を示します。

注意:

例3-15で使用されるネームスペースは、対応するネームスペース・テンプレートが定義されている必要があります。

例3-15 アプリケーション・セッションにアプリケーション・ユーザーを割り当てるときにネームスペースを初期化する方法

DECLARE
  sessionid RAW(30);
  nsList DBMS_XS_NSATTRLIST;
BEGIN 
  nsList := DBMS_XS_NSATTRLIST(DBMS_XS_NSATTR('ns1'),DBMS_XS_NSATTR('ns2'));
  SYS.DBMS_XS_SESSIONS.CREATE_SESSION('XSGUEST', sessionid);
  SYS.DBMS_XS_SESSIONS.ASSIGN_USER(username => 'lwuser2',
                               sessionid => sessionid,
                               namespaces => nsList);
END;
/

関連項目:

  • このPL/SQLプロシージャの構文の詳細は、ASSIGN_USERプロシージャを参照してください。

  • Java assignUserメソッドの構文(Javadoc書式)の詳細は、Oracle Database Real Application Security Java APIリファレンスを参照してください。

  • このタスクのJavaの例の詳細は、例6-5を参照してください。

アプリケーション・セッションでアプリケーション・ユーザーが切り替えられたときにネームスペースを初期化する方法

PL/SQLのDBMS_XS_SESSIONS.SWITCH_USERプロシージャを使用するか、JavaのSessionインタフェースのswitchUserメソッドを使用してアプリケーション・セッションでアプリケーション・ユーザーを切り替える場合、初期化するネームスペースのリストを指定できます。

ネームスペースを指定する場合、ユーザーにはネームスペースに対するアプリケーション権限MODIFY_NAMESPACEまたはMODIFY_ATTRIBUTE、あるいはADMIN_NAMESPACEシステム権限が付与されている必要があります。

注意:

セッションの連結後にlwuser1からlwuser2への切替えを有効にするには、次のように最初にlwuser1のターゲット・ユーザーとしてlwuser2を定義する必要があります。

exec XS_PRINCIPAL.ADD_PROXY_USER('lwuser2', 'lwuser1');

例3-16に、アプリケーション・セッションでアプリケーション・ユーザーを切り替えるときに、2つのネームスペースns1およびns2を初期化する方法を示します。

注意:

例3-16で使用されるネームスペースは、対応するネームスペース・テンプレートが定義されている必要があります。

例3-16 アプリケーション・セッションでアプリケーション・ユーザーを切り替えるときにネームスペースを初期化する方法

DECLARE
  sessionid RAW(30);
  nsList DBMS_XS_NSATTRLIST;
BEGIN 
  nsList := DBMS_XS_NSATTRLIST(DBMS_XS_NSATTR('ns1'),DBMS_XS_NSATTR('ns2'));
 SYS.DBMS_XS_SESSIONS.CREATE_SESSION('lwuser1', sessionid);
 SYS. DBMS_XS_SESSIONS.ATTACH_SESSION(sessionid);
  SYS.DBMS_XS_SESSIONS.SWITCH_USER(username => 'lwuser2',
                               namespaces => nsList);
END;
/

関連項目:

  • このPL/SQLプロシージャの構文の詳細は、SWITCH_USERプロシージャを参照してください。

  • Java switchUserメソッドの構文(Javadoc書式)の詳細は、Oracle Database Real Application Security Java APIリファレンスを参照してください。

  • このタスクのJavaの例の詳細は、例6-6を参照してください。

明示的にネームスペースを初期化する方法

アプリケーション・セッションで明示的にネームスペースを初期化するには、PL/SQLのDBMS_XS_SESSIONS.CREATE_NAMESPACEプロシージャを使用するか、JavaのSessionインタフェースのcreateNamespaceメソッドを使用します。

DBMS_XS_SESSIONS.CREATE_NAMESPACEプロシージャを実行する場合、コール側ユーザーは、ネームスペースに対するMODIFY_NAMESPACEアプリケーション権限を持っているか、ADMIN_NAMESPACEシステム権限を持っている必要があります。

例3-17に、アプリケーション・セッションで明示的にネームスペースns1を初期化する方法を示します。

注意:

例3-17で使用されるネームスペースは、対応するネームスペース・テンプレートが定義されている必要があります。

例3-17 アプリケーション・セッションで明示的にネームスペースを初期化する方法

DECLARE
  sessionid RAW(30);
BEGIN
  SYS.DBMS_XS_SESSIONS.CREATE_SESSION('lwuser1', sessionid);
  SYS.DBMS_XS_SESSIONS.ATTACH_SESSION(sessionid);
  SYS.DBMS_XS_SESSIONS.CREATE_NAMESPACE('ns1');
END;
/

関連項目:

  • このPL/SQLプロシージャの構文の詳細は、CREATE_NAMESPACEプロシージャを参照してください。

  • Java createNamespaceメソッドの構文(Javadoc書式)の詳細は、Oracle Database Real Application Security Java APIリファレンスを参照してください。

  • このタスクのJavaの例の詳細は、例6-10を参照してください。

アプリケーション・セッションでのセッション属性の設定

特定のセッション属性の値を設定するには、PL/SQLのDBMS_XS_SESSIONS.SET_ATTRIBUTEプロシージャを使用するか、JavaのSessionNamespaceインタフェース・メソッドのsetAttributeメソッドを使用します。

コール側ユーザーに、ネームスペースに対するMODIFY_ATTRIBUTEアプリケーション権限を付与するか、ADMIN_NAMESPACEシステム権限を付与する必要があります。

注意:

属性には、最大4000文字の長さの文字列値を格納できます。

例3-18に、アプリケーション・セッションの属性attr1に値val1を設定する方法を示します。

例3-18 アプリケーション・セッションのネームスペース属性の設定

DECLARE
  sessionid RAW(16);
BEGIN
  SYS.DBMS_XS_SESSIONS.CREATE_SESSION('lwuser1', sessionid);
  SYS.DBMS_XS_SESSIONS.ATTACH_SESSION(sessionid);
  SYS.DBS_XS_SESSIONS.CREATE_NAMESPACE('ns1');
  SYS.DBMS_XS_SESSIONS.SET_ATTRIBUTE('ns1', 'attr1', 'val1');
  SYS.DBMS_XS_SESSIONS.DETACH_SESSION;
  SYS.DBMS_XS_SESSIONS.DESTROY_SESSION(sessionid);
END;
/

関連項目:

アプリケーション・セッションでのセッション属性の取得

特定のセッション属性の値を取得するには、PL/SQLのDBMS_XS_SESSIONS.GET_ATTRIBUTEプロシージャを使用するか、JavaのSessionNamespaceインタフェース・メソッドのgetAttributeメソッドを使用します。

コール側ユーザーに、DBMS_XS_SESSIONS.GET_ATTRIBUTEプロシージャを使用して属性を取得するための権限を付与する必要はありません。

注意:

属性値が設定されておらず、属性にFIRSTREAD_EVENTが指定されている場合、属性値を読み取ろうとすると、ネームスペース・イベント・ハンドラがコールされます。通常、ネームスペース・イベント・ハンドラ・プロシージャによって、属性の値が設定され、他のアプリケーション固有の処理タスクが実行されます。

例3-19に、アプリケーション・セッションの属性attr1を取得する方法を示します。

例3-19 アプリケーション・セッションのネームスペース属性の取得

DECLARE
  sessionid RAW(16);
  attrib_out_val VARCHAR2(4000);
BEGIN
  SYS.DBMS_XS_SESSIONS.CREATE_SESSION('lwuser1', sessionid);
  SYS.DBMS_XS_SESSIONS.ATTACH_SESSION(sessionid);
  SYS.DBMS_XS_SESSIONS.CREATE_NAMESPACE('ns1');
  SYS.DBMS_XS_SESSIONS.SET_ATTRIBUTE('ns1', 'attr1', 'val1');
  SYS.DBMS_XS_SESSIONS.GET_ATTRIBUTE('ns1', 'attr1', attrib_out_val);
  SYS.DBMS_XS_SESSIONS.DETACH_SESSION;
  SYS.DBMS_XS_SESSIONS.DESTROY_SESSION(sessionid);
END;
/

関連項目:

アプリケーション・セッションでのカスタム属性の作成

ネームスペースでカスタム属性を作成するには、PL/SQLのDBMS_XS_SESSIONS.CREATE_ATTRIBUTEプロシージャを使用するか、JavaのSessionNamespaceインタフェース・メソッドのcreateAttributeメソッドを使用します。

カスタム属性は、テンプレート属性とは異なります。テンプレート属性は、ネームスペース・テンプレートの一部であり、ネームスペースの作成時にセッションで自動的に作成されます。カスタム属性は、CREATE_ATTRIBUTEプロシージャを使用してネームスペースでプログラム的に作成します。

コール側アプリケーションに、ネームスペースに対するMODIFY_ATTRIBUTEアプリケーション権限を付与するか、ADMIN_NAMESPACEシステム権限を付与する必要があります。

例3-20に、アプリケーション・セッションのネームスペースでカスタム属性customattrを作成する方法を示します。

例3-20 アプリケーション・セッションのカスタム・ネームスペース属性の作成

DECLARE
  sessionid RAW(16);
  attrib_out_val VARCHAR2(4000);
BEGIN
  SYS.DBMS_XS_SESSIONS.CREATE_SESSION('lwuser1', sessionid);
  SYS.DBMS_XS_SESSIONS.ATTACH_SESSION(sessionid);
  SYS.DBMS_XS_SESSIONS.CREATE_NAMESPACE('ns1');
  SYS.DBMS_XS_SESSIONS.CREATE_ATTRIBUTE('ns1','customattr','default_value_custom',NULL);
  SYS.DBMS_XS_SESSIONS.SET_ATTRIBUTE('ns1','customattr','newvalue');
  SYS.DBMS_XS_SESSIONS.GET_ATTRIBUTE('ns1', 'customattr', attrib_out_val);
  SYS.DBMS_XS_SESSIONS.DETACH_SESSION;
  SYS.DBMS_XS_SESSIONS.DESTROY_SESSION(sessionid);
END;
/

関連項目:

  • このPL/SQLプロシージャの構文の詳細は、CREATE_ATTRIBUTEプロシージャを参照してください。

  • Java createAttributeメソッドの構文(Javadoc書式)の詳細は、Oracle Database Real Application Security Java APIリファレンスを参照してください。

  • このタスクのJavaの例の詳細は、例6-13を参照してください。

アプリケーション・セッションでのネームスペースの削除

PL/SQLでDBMS_XS_SESSIONS.DELETE_NAMESPACEプロシージャを使用するか、JavaでSessionNamespaceインタフェースのdeleteAttributeメソッドを使用して、ネームスペースおよびそれによって識別されるすべての属性をアプリケーション・セッションから削除できます。

コール側ユーザーは、ネームスペースに対するMODIFY_NAMESPACEアプリケーション権限を持っているか、ADMIN_NAMESPACEシステム権限を持っている必要があります。

例3-21に、アプリケーション・セッションからネームスペースns1を削除する方法を示します。

例3-21 アプリケーション・セッションのネームスペースの削除

DECLARE
  sessionid RAW(16);
  out_value VARCHAR2(4000);
BEGIN
  SYS.DBMS_XS_SESSIONS.CREATE_SESSION('lwuser1', sessionid);
  SYS.DBS_XS_SESSIONS.ATTACH_SESSION(sessionid);
  SYS.DBMS_XS_SESSIONS.CREATE_NAMESPACE('ns1');
  SYS.DBMS_XS_SESSIONS.SET_ATTRIBUTE('ns1', 'attr1', 'val1');
  SYS.DBMS_XS_SESSIONS.GET_ATTRIBUTE('ns1', 'attr1', out_value);
  SYS.DBMS_XS_SESSIONS.DELETE_NAMESPACE('ns1');
  SYS.DBMS_XS_SESSIONS.DETACH_SESSION;
  SYS.DBMS_XS_SESSIONS.DESTROY_SESSION(sessionid);
END;
/

関連項目:

  • このPL/SQLプロシージャの構文の詳細は、DELETE_NAMESPACEプロシージャを参照してください。

  • Java deleteNamespaceメソッドの構文(Javadoc書式)の詳細は、Oracle Database Real Application Security Java APIリファレンスを参照してください。

  • このタスクのJavaの例の詳細は、例6-11を参照してください。

セッションでのアプリケーション・ロールの有効化

アプリケーション・セッション・ユーザーの直接付与された標準アプリケーション・ロールのみを有効化するには、PL/SQLのDBMS_XS_SESSIONS.ENABLE_ROLEプロシージャを使用するか、JavaのSessionインタフェースのenableRoleメソッドを使用します。

DBA_XS_SESSION_ROLES動的データ・ディクショナリ・ビューには、すべてのアプリケーション・セッションで有効化されているアプリケーション・ロールがリストされます。V$XS_SESSION_ROLES動的データ・ディクショナリ・ビューには、現在連結されているアプリケーション・セッションで有効になっているアプリケーション・ロールがリストされます。

例3-22に、アプリケーション・セッションでロールを有効にする方法を示します。

例3-22 アプリケーション・セッションでのロールの有効化

DECLARE
  sessionid RAW(16);
BEGIN
  SYS.DBMS_XS_SESSIONS.CREATE_SESSION('lwuser1', sessionid);
  SYS.DBMS_XS_SESSIONS.ATTACH_SESSION(sessionid);
  SYS.DBMS_XS_SESSIONS.ENABLE_ROLE('auth1_role');
  SYS.DBMS_XS_SESSIONS.DETACH_SESSION;
  SYS.DBMS_XS_SESSIONS.DESTROY_SESSION(sessionid);
END;
/

関連項目:

  • このPL/SQLプロシージャの構文の詳細は、ENABLE_ROLEプロシージャを参照してください。

  • Java enableRoleメソッドの構文(Javadoc書式)の詳細は、Oracle Database Real Application Security Java APIリファレンスを参照してください。

  • このタスクのJavaの例の詳細は、例6-7を参照してください。

セッションでのアプリケーション・ロールの無効化

特定のセッションでアプリケーション・ロールを無効化するには、PL/SQLのDBMS_XS_SESSIONS.DISABLE_ROLEプロシージャを使用するか、JavaのSessionインタフェースのdisableRoleメソッドを使用します。

例3-23に、アプリケーション・セッションでロールを無効にする方法を示します。

例3-23 アプリケーション・セッションでのロールの無効化

DECLARE
  sessionid RAW(16);
BEGIN
  SYS.DBMS_XS_SESSIONS.CREATE_SESSION('lwuser1', sessionid);
  SYS.DBMS_XS_SESSIONS.ATTACH_SESSION(sessionid);
  SYS.DBMS_XS_SESSIONS.ENABLE_ROLE('auth1_role');
  SYS.DBMS_XS_SESSIONS.DISABLE_ROLE('auth1_role');
  SYS.DBMS_XS_SESSIONS.DETACH_SESSION;
  SYS.DBMS_XS_SESSIONS.DESTROY_SESSION(sessionid);
END;
/

関連項目:

  • このPL/SQLプロシージャの構文の詳細は、DISABLE_ROLEプロシージャを参照してください。

  • Java disableRoleメソッドの構文(Javadoc書式)の詳細は、Oracle Database Real Application Security Java APIリファレンスを参照してください。

  • このタスクのJavaの例の詳細は、例6-8を参照してください。

外部ユーザーおよびロール用の管理APIについて

この項では、外部ユーザーおよびロールのために必要な次の管理APIについて説明します。