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

前
次

11 Oracle Database Real Application Security PL/SQLパッケージ

この章では、Oracle Database Real Application Securityで使用可能なPL/SQLパッケージについて説明します。

表11-1にこれらのパッケージを示します。各パッケージの詳細情報は、この表の後にあります。

表11-1 Oracle Database Real Application Security PL/SQLパッケージ

PL/SQLパッケージ 説明

DBMS_XS_SESSIONSパッケージ

アプリケーション・セッションを管理するサブプログラムを含みます。

XS_ACLパッケージ

アクセス制御リスト(ACL)の作成、管理、削除、およびパラメータ値の追加と削除を行うためのサブプログラムが含まれます。

XS_ADMIN_UTILパッケージ

ヘルパー・サブプログラムが含まれます。

XS_DATA_SECURITYパッケージ

データ・セキュリティ・ポリシー、関連データ・レルム制約、列制約およびACLパラメータを作成、管理、削除するためのサブプログラムが含まれます。

XS_DATA_SECURITY_UTILパッケージ

ユーザー表への静的ACLの自動リフレッシュをスケジュール、およびACLリフレッシュ・モードをコミット時またはオンデマンド・リフレッシュに変更するためのサブプログラムが含まれます。

XS_DIAGパッケージ

Real Application Securityオブジェクトの潜在的な問題を診断し、識別された矛盾をレポートするためのサブプログラムが含まれます。

XS_NAMESPACEパッケージ

ネームスペース・テンプレートおよび属性を作成、管理および削除するためのサブプログラムが含まれます。

XS_PRINCIPALパッケージ

アプリケーション・ユーザーおよびロールを作成、管理および削除するためのサブプログラムが含まれます。

XS_SECURITY_CLASSパッケージ

セキュリティ・クラスおよびその権限を作成、管理および削除するためのサブプログラムが含まれます。セキュリティ・クラスの継承を管理するためのサブプログラムも含まれます。

DBMS_XS_SESSIONSパッケージ

DBMS_XS_SESSIONSパッケージは、アプリケーション・セッションを管理します。

セキュリティ・モデル

DBMS_XS_SESSIONSパッケージは、SYSスキーマに作成されます。パッケージの実行権限はPUBLICに付与されます。実行するユーザーには、特定の操作に対する適切な権限が必要です。

定数

次の定数は、ネームスペース・イベント処理ファンクションに渡される操作コードを定義します。

attribute_first_read_operation CONSTANT PLS_INTEGER := 1;
modify_attribute_operation     CONSTANT PLS_INTEGER := 2;

次の定数は、イベント処理ファンクションを持つネームスペース内の特定の属性の対象イベントを識別するビット値を表します。

attribute_first_read_event     CONSTANT PLS_INTEGER := 1;
modify_attribute_event         CONSTANT PLS_INTEGER := 2;

次の定数は、ネームスペース・イベント処理ファンクションによって戻される可能性のある戻りコードを定義します。

event_handling_succeeded       CONSTANT PLS_INTEGER := 0;
event_handling_failed          CONSTANT PLS_INTEGER := 1;

次の定数は、ADD_GLOBAL_CALLBACKDELETE_GLOBAL_CALLBACKおよびENABLE_GLOBAL_CALLBACKプロシージャへの入力として使用されます。

create_session_event       CONSTANT PLS_INTEGER := 1;
attach_session_event       CONSTANT PLS_INTEGER := 2;
guest_to_user_event        CONSTANT PLS_INTEGER := 3;
proxy_to_user_event        CONSTANT PLS_INTEGER := 4;
revert_to_user_event       CONSTANT PLS_INTEGER := 5;
enable_role_event          CONSTANT PLS_INTEGER := 6;
disable_role_event         CONSTANT PLS_INTEGER := 7;
enable_dynamic_role_event  CONSTANT PLS_INTEGER := 8;
disable_dynamic_role_event CONSTANT PLS_INTEGER := 9;
detach_session_event       CONSTANT PLS_INTEGER := 10;
terminate_session_event    CONSTANT PLS_INTEGER := 11;
direct_login_event         CONSTANT PLS_INTEGER := 12;
direct_logoff_event        CONSTANT PLS_INTEGER := 13;

オブジェクト・タイプ、コンストラクタ・ファンクション、シノニムおよび付与

このパッケージには、次のオブジェクト・タイプ、コンストラクタ・ファンクション、シノニムおよびGRANT文が定義されています。

CREATE OR REPLACE TYPE DBMS_XS_NSATTR AS OBJECT ( 
  --- Member variables   
  namespace        varchar2(130),
  attribute        varchar2(4000),
  attribute_value  varchar2(4000),
 
  --- Constructor for DBMS_XS_NSATTR type
  --- Only namespace name is mandatory
  CONSTRUCTOR FUNCTION DBMS_XS_NSATTR(
     namespace         IN VARCHAR2,
     attribute         IN VARCHAR2 DEFAULT NULL,
     attribute_value   IN VARCHAR2 DEFAULT NULL)
  RETURN SELF AS RESULT);

CREATE OR REPLACE PUBLIC SYNONYM DBMS_XS_NSATTR FOR SYS.DBMS_XS_NSATTR;
CREATE OR REPLACE TYPE DBMS_XS_NSATTRLIST AS VARRAY(1000) OF DBMS_XS_NSATTR;
CREATE OR REPLACE PUBLIC SYNONYM DBMS_XS_NSATTRLIST FOR SYS.DBMS_XS_NSATTRLIST;
GRANT EXECUTE ON DBMS_XS_NSATTR TO PUBLIC;
GRANT EXECUTE ON DBMS_XS_NSATTRLIST TO PUBLIC;
CREATE OR REPLACE PUBLIC SYNONYM DBMS_XS_SESSIONS FOR SYS.DBMS_XS_SESSIONS;
GRANT EXECUTE ON DBMS_XS_SESSIONS TO PUBLIC;

DBMS_XS_SESSIONSサブプログラムの要約

表11-2 DBMS_XS_SESSIONSサブプログラムの要約

サブプログラム 説明

CREATE_SESSIONプロシージャ

指定されたアプリケーション・ユーザー名の新規アプリケーション・セッションを作成します。

ATTACH_SESSIONプロシージャ

現在の従来型データベース・セッションを、セッションIDで識別されるアプリケーション・セッションに連結します。

ASSIGN_USERプロシージャ

指定されたユーザーを現在連結されている匿名Real Application Securityセッションに割り当てます。

SWITCH_USERプロシージャ

現在連結されているセッションのアプリケーション・ユーザーを切り替えます。

CREATE_NAMESPACEプロシージャ

現在連結されているアプリケーション・セッションに新規アプリケーション・ネームスペースを作成します。

CREATE_ATTRIBUTEプロシージャ

現在連結されているアプリケーション・セッションの指定されたアプリケーション・ネームスペースに新規カスタム属性を作成します。

SET_ATTRIBUTEプロシージャ

現在連結されているアプリケーション・セッションのネームスペース内の指定された属性に新しい値を設定します。

GET_ATTRIBUTEプロシージャ

現在連結されているアプリケーション・セッションのネームスペース内の属性の値を取得します。

RESET_ATTRIBUTEプロシージャ

現在連結されているアプリケーション・セッションの指定したネームスペース内のアプリケーション・ネームスペース属性を元の値にリセットします。

DELETE_ATTRIBUTEプロシージャ

現在連結されているアプリケーションの指定したネームスペースから指定した属性を削除します。

DELETE_NAMESPACEプロシージャ

現在連結されているアプリケーション・セッションから指定されたネームスペースおよびその属性を削除します。

ENABLE_ROLEプロシージャ

現在連結されているアプリケーション・セッションで実際のアプリケーション・ロールを有効にします。

DISABLE_ROLEプロシージャ

現在連結されているアプリケーション・セッションから実際のアプリケーション・ロールを無効にします。

SET_SESSION_COOKIEプロシージャ

指定されたセッションIDで新しいCookie値を設定します。

REAUTH_SESSIONプロシージャ

指定されたセッションIDで識別されるセッションの最終認証時刻を更新します。

SET_INACTIVITY_TIMEOUTプロシージャ

指定されたセッションの非アクティブ・タイムアウト値を分単位で設定します。

SAVE_SESSIONプロシージャ

現在連結されているセッションで実行された変更を保存または永続化します。

DETACH_SESSIONプロシージャ

現在の従来型データベース・セッションを、連結先のアプリケーション・セッションから連結解除します。

DESTROY_SESSIONプロシージャ

セッションIDで指定されたセッションを破棄または終了します。

ADD_GLOBAL_CALLBACKプロシージャ

既存のイベント・ハンドラをデータベースに登録します。

ENABLE_GLOBAL_CALLBACKプロシージャ

event_typeパラメータで指定されたセッション・イベントのグローバル・コールバックを有効または無効にします。

DELETE_GLOBAL_CALLBACKプロシージャ

既存のグローバル・コールバック・アソシエーションを削除します。

CREATE_SESSIONプロシージャ

CREATE_SESSIONプロシージャは、指定されたユーザー名の新規アプリケーション・セッションを作成します。将来のコールでセッションを参照するために使用できるセッション識別子を戻します。

セッションは、標準アプリケーション・ユーザーまたは外部アプリケーション・ユーザーで作成できます。セッションは信頼モードまたはセキュア・モードで作成できます。信頼モードでは、データ・セキュリティ・チェックがバイパスされます。セキュア・モードでは、データセキュリティ・チェックが施行されます。

信頼モードでの標準セッションの組合せはサポートされません。その他の組合せ、つまりセキュア・モードでの標準セッション、信頼モードでの外部セッション、またはセキュア・モードでの外部セッションはサポートされます。

namespacesパラメータは、作成するネームスペース、作成する属性および設定する属性値の3つのリストです。これは、オプションのパラメータです。デフォルト値はNULLです。XS$GLOBAL_VARおよびXS$SESSIONネームスペースとその属性は常にセッションで使用可能です。

このファンクションは、現在の従来型セッションを新規に作成されたアプリケーション・セッションに連結しません。このタスクを実行するにはATTACH_SESSIONプロシージャを使用します。

プロシージャを実行するユーザーには、usernameパラメータで指定されたアプリケーション・ユーザーに対するCREATE_SESSIONアプリケーション権限が必要です。セッションの作成時に作成されるネームスペースのリストも指定できます。セッションの作成時にネームスペースを指定した場合、コール元にはネームスペースに対するアプリケーション権限MODIFY_NAMESPACEまたはMODIFY_ATTRIBUTEが付与されているか、ADMIN_NAMESPACEシステム権限が付与されている必要があります。

構文

CREATE_SESSION (
 username      IN  VARCHAR2,
 sessionid     OUT NOCOPY RAW,
 is_external   IN  BOOLEAN DEFAULT FALSE,
 is_trusted    IN  BOOLEAN DEFAULT FALSE,
 namespaces    IN  DBMS_XS_NSATTRLIST DEFAULT NULL,
 cookie        IN  VARCHAR2 DEFAULT NULL); 

パラメータ

パラメータ 説明

username

アプリケーション・セッションを作成する標準アプリケーション・ユーザーまたは外部アプリケーション・ユーザーの名前。

現在のセッションのユーザー名およびアプリケーション・ロールのリストを検索するには、DBA_XS_USERSデータ・ディクショナリ・ビューを問い合せます。すべてのアプリケーション・ユーザーおよびロールを検索するには、DBA_XS_PRINCIPALSデータ・ディクショナリ・ビューを次のように問い合せます。

ユーザー:

SELECT NAME FROM DBA_XS_USERS;

ロール:

SELECT NAME FROM DBA_XS_ROLES;

SELECT NAME FROM DBA_XS_DYNAMIC_ROLES;

sessionid

新規に作成したアプリケーション・セッションのセッションID。次のいずれかの方法を使用して、セッションIDを取得できます。

  • SELECT XS_SYS_CONTEXT('XS$SESSION', 'SESSION_ID') FROM DUAL;

  • DBMS_XS_SESSIONS.GET_ATTRIBUTEプロシージャの使用。

is_external

セッションを外部プリンシパル・セッションとして作成するかどうか指定します。これは、オプションのパラメータです。デフォルト値はFALSEで、標準セッションを作成することを示します。NULL値はFALSEを意味します。

is_trusted

セッションを信頼モードとセキュア・モードのどちらで作成するかを指定します。信頼モードでは、データ・セキュリティ・チェックがバイパスされます。セキュア・モードでは、データセキュリティ・チェックが施行されます。これは、オプションのパラメータです。デフォルト値はFALSEで、セキュア・モードを示します。NULL値はFALSEを意味します。

namespaces

名前、属性および属性値の3つのリスト。ネームスペースがセッションからアクセスできないか、このようなネームスペース・テンプレートが存在しない場合は、エラーがスローされます。

cookie

セッションに対して設定するサーバーCookieを指定します。これは、オプションのパラメータです。デフォルト値はNULLです。Cookieに対して許可される最大長は1024バイトです。

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;

ATTACH_SESSIONプロシージャ

ATTACH_SESSIONプロシージャは、現在の従来型データベース・セッションをセッションID (session_id)で識別されるアプリケーション・セッションに連結します。連結されたセッションにより、セッションを作成したアプリケーション・ユーザーに(直接または間接的に)付与されているロールおよびこのセッションの最後の連結解除まで有効だったセッション・スコープの動的アプリケーション・ロールが有効になります。オプションのパラメータenable_dynamic_rolesを使用して動的アプリケーション・ロールのリストでATTACH_SESSIONを実行した場合、提供されている動的アプリケーション・ロールがセッションに対して有効になります。動的ロールのリストを無効にするには、オプションのパラメータdisable_dynamic_rolesを使用してリストを指定します。

連結操作中に3つの値(ネームスペース、属性、属性値)のリストを指定できます。ネームスペースおよび属性が作成され、属性値が設定されます。これは、セッションに存在するネームスペースおよび属性に加えて作成されます。

このプロシージャを実行するには、従来のセッション・ユーザーにATTACH_SESSIONアプリケーション権限が必要です。ネームスペースを指定する場合、ユーザーにはネームスペースに対するアプリケーション権限MODIFY_NAMESPACEまたはMODIFY_ATTRIBUTE、あるいはADMIN_NAMESPACEシステム権限が付与されている必要があります。

明示的に連結されているセッション(JavaのATTACH_SESSIONプロシージャまたはattachSession()メソッドを使用して連結されているセッション)から呼び出された場合、セッションにALTER_USER権限が必要であり、PASSWORDコマンドにユーザー名が指定されていれば、SQL*Plus PASSWORDコマンドを使用してセルフ・パスワード変更を行うことができます。

構文

ATTACH_SESSION (
 sessionid              IN RAW,
 enable_dynamic_roles   IN XS$NAME_LIST         DEFAULT NULL,
 disable_dynamic_roles  IN XS$NAME_LIST         DEFAULT NULL,
 external_roles         IN XS$NAME_LIST         DEFAULT NULL,
 authentication_time    IN TIMESTAMP WITH TIME ZONE DEFAULT NULL,
 namespaces             IN DBMS_XS_NSATTRLIST   DEFAULT NULL);

パラメータ

パラメータ 説明

sessionid

アプリケーション・セッションのセッションID。次のいずれかの方法を使用して、セッションIDを取得できます。

  • SELECT XS_SYS_CONTEXT('XS$SESSION', 'SESSION_ID') FROM DUAL;

  • DBMS_XS_SESSIONS.GET_ATTRIBUTEプロシージャの使用。

enable_dynamic_roles

アプリケーション・セッションで有効にする、付与する動的ロールのリスト。これは、オプションのパラメータです。指定されたいずれかの動的ロールが存在しない場合は、セッションの連結が失敗します。セッションが外部プリンシパル・セッションの場合は、有効にする外部ロールのリストを指定できます。これらのロールは連結解除されるまで有効なままになり、次の連結でデフォルトでは有効になりません。

現在のセッションのアプリケーション・ロールのリストを検索するには、DBA_XS_SESSION_ROLESデータ・ディクショナリ・ビューを問い合せます。すべての動的アプリケーション・ロールのリストを検索するには、DBA_XS_PRINCIPALSデータ・ディクショナリ・ビューを次のように問い合せます。

SELECT NAME, TYPE FROM DBA_XS_PRINCIPALS; 

disable_dynamic_roles

セッションで無効にする動的ロールのリスト。これは、オプションのパラメータです。

external_roles

セッションが外部プリンシパル・セッションの場合に外部ロールのリスト。これは、オプションのパラメータです。これらの外部ロールは連結解除操作まで有効なままになり、次の連結でデフォルトでは再度有効になりません。

authentication_time

セッションに対して更新された認証時刻。これは、オプションのパラメータです。時刻は次の形式で指定する必要があります。

YYYY-MM-DD HH:MI:SS.FF TZR

namespaces

名前、属性および属性値の3つのリスト。ネームスペースがセッションからアクセスできないか、このようなネームスペース・テンプレートが存在しない場合は、エラーがスローされます。

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;

ASSIGN_USERプロシージャ

ASSIGN_USERプロシージャは、指定されたアプリケーション・ユーザーを現在連結されている匿名アプリケーション・セッションに割り当てます。

現在のセッションで有効になっているロールは、この操作後も保持されます。オプションのパラメータenable_dynamic_rolesおよびdisable_dynamic_rolesは、有効または無効にする動的ロールの追加リストを指定します。割り当てられたユーザーが外部の場合は、有効にする外部ロールのリストを指定できます。

割当て操作中に3つの値(ネームスペース、属性、属性値)のリストを指定できます。セッションにネームスペースおよび属性が作成され、属性値が設定されます。これは、セッションにすでに存在するネームスペースおよび属性に加えて作成されます。

このプロシージャを実行するには、ディスパッチャまたは接続ユーザーにASSIGN_USERアプリケーション権限が必要です。ネームスペースを指定する場合、ユーザーにはネームスペースに対するアプリケーション権限MODIFY_NAMESPACEまたはMODIFY_ATTRIBUTE、あるいはADMIN_NAMESPACEシステム権限が付与されている必要があります。

構文

DBMS_XS_SESSIONS.ASSIGN_USER (
 username              IN VARCHAR2, 
 is_external           IN BOOLEAN                  DEFAULT FALSE,
 enable_dynamic_roles  IN XS$NAME_LIST             DEFAULT NULL,
 disable_dynamic_roles IN XS$NAME_LIST             DEFAULT NULL,
 external_roles        IN XS$NAME_LIST             DEFAULT NULL,
 authentication_time   IN TIMESTAMP WITH TIME ZONE DEFAULT NULL,
 namespaces            IN DBMS_XS_NSATTRLIST       DEFAULT NULL);

パラメータ

パラメータ 説明

username

実際のアプリケーション・ユーザーの名前。

既存のアプリケーション・ユーザーのリストを検索するには、DBA_XS_PRINCIPALSデータ・ディクショナリ・ビューを次のように問い合せます。

SELECT NAME FROM DBA_XS_PRINCIPALS;

is_external

指定されたアプリケーション・ユーザーが外部ユーザーかどうかを指定します。これは、オプションのパラメータです。デフォルト値はFALSEで、標準アプリケーション・ユーザーが割り当てられていることを示します。NULL値はFALSEを意味します。

enable_dynamic_roles

アプリケーション・セッションで有効にする動的ロールのリスト。これは、オプションのパラメータです。

現在のセッションのアプリケーション・ロールのリストを検索するには、V$XS_SESSION_ROLESデータ・ディクショナリ・ビューを問い合せます。すべての動的アプリケーション・ロールのリストを検索するには、DBA_XS_DYNAMIC_ROLESデータ・ディクショナリ・ビューを次のように問い合せます。

SELECT NAME FROM DBA_XS_DYNAMIC_ROLES;

disable_dynamic_roles

セッションで無効にする動的ロールのリスト。これは、オプションのパラメータです。

external_roles

アプリケーション・ユーザーが外部アプリケーション・ユーザーの場合に外部ロールのリスト。これは、オプションのパラメータです。

authentication_time

セッションに対して更新された認証時刻。これは、オプションのパラメータです。時刻は次の形式で指定する必要があります。

YYYY-MM-DD HH:MI:SS.FF TZR

namespaces

名前、属性および属性値の3つのリスト。ネームスペースがセッションからアクセスできないか、このようなネームスペース・テンプレートが存在しない場合は、エラーがスローされます。

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

SWITCH_USERプロシージャ

SWITCH_USERプロシージャは、現在連結されているセッションのアプリケーション・ユーザーを切り替えます。XS_PRINCIPAL.ADD_PROXY_USER PL/SQL APIを使用して別のアプリケーション・ユーザー権限のプロキシを取得することで切替え操作を実行する前に、現在のアプリケーション・ユーザーがターゲット・アプリケーション・ユーザーのプロキシ・ユーザーになっている必要があります。ターゲット・ユーザーのフィルタリング・アプリケーション・ロールのリストがセッションで有効になります。

セッションの現在のアプリケーション・ネームスペースを保持または破棄できます。切替え後に作成するネームスペースおよび設定する属性値のリストも指定できます。ネームスペースを指定する場合、ユーザーにはネームスペースに対するアプリケーション権限MODIFY_NAMESPACEまたはMODIFY_ATTRIBUTE、あるいはADMIN_NAMESPACEシステム権限が付与されている必要があります。

構文

SWITCH_USER (
 username          IN VARCHAR2,
 keep_state        IN BOOLEAN              DEFAULT FALSE, 
 namespaces        IN DBMS_XS_NSATTRLIST   DEFAULT NULL);

パラメータ

パラメータ 説明

username

切替え先のセキュリティ・コンテキストを持つユーザーのユーザー名。

既存のアプリケーション・ユーザーのリストを検索するには、DBA_XS_USERSデータ・ディクショナリ・ビューを次のように問い合せます。

SELECT NAME FROM DBA_XS_USERS;

keep_state

アプリケーション・ネームスペースが保持されるかどうかを制御します。

可能な値は次のとおりです。

  • TRUE: 他のすべてのセッション状態を変更しないように設定します。

  • FALSE: セッションの前の状態をクリアします。デフォルト値です。

namespaces

名前、属性および属性値の3つのリスト。ネームスペースがセッションからアクセスできないか、このようなネームスペース・テンプレートが存在しない場合は、エラーがスローされます。

DECLARE
  nsList := DBMS_XS_NSATTRLIST(DBMS_XS_NSATTR('ns1'),DBMS_XS_NSATTR('ns2'));
  sessionid RAW(16);
BEGIN 
  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;

CREATE_NAMESPACEプロシージャ

CREATE_NAMESPACEプロシージャは、現在連結されているアプリケーション・セッションに新規ネームスペースを作成します。ネームスペースに対応するネームスペース・テンプレートがシステムに存在する必要があり、存在しないと、この操作はエラーをスローします。この操作の後、ネームスペースおよびテンプレートに作成されたその属性がセッションで使用可能になります。

コール元のユーザーには、MODIFY_NAMESPACEアプリケーション権限が必要です。

構文

CREATE_NAMESPACE( 
 namespace      IN VARCHAR2);

パラメータ

パラメータ 説明

namespace

作成するネームスペースの名前。この名前の既存のネームスペース・テンプレート・ドキュメントが必要です。大/小文字を区別する文字列の最大サイズは128文字です。

現在のセッションの既存のネームスペースのリストを検索するには、連結後にV$XS_SESSION_NS_ATTRIBUTESデータ・ディクショナリ・ビューを問い合せます。DBA_XS_SESSION_NS_ATTRIBUTESデータ・ディクショナリ・ビューを問い合せて、すべてのアプリケーション・セッションのすべてのネームスペースを確認できます。

DBA_XS_NS_TEMPLATESおよびDBA_XS_NS_TEMPLATE_ATTRIBUTESデータ・ディクショナリ・ビューでネームスペース・テンプレートおよび属性のリストを問い合せることができます。

BEGIN
 SYS.DBMS_XS_SESSIONS.CREATE_NAMESPACE('J_NS1');
END;

CREATE_ATTRIBUTEプロシージャ

CREATE_ATTRIBUTEプロシージャは、現在連結されているアプリケーション・セッションの指定されたネームスペースに新規カスタム属性を作成します。ネームスペースがセッションですでに使用可能でないかこのようなネームスペース・テンプレートが存在しない場合は、エラーがスローされます。

コール元ユーザーにはMODIFY_ATTRIBUTEアプリケーション権限が付与されている必要があります。

構文

PROCEDURE create_attribute(
namespace IN VARCHAR2,
attribute IN VARCHAR2,
value     IN VARCHAR2    DEFAULT NULL,
eventreg  IN PLS_INTEGER DEFAULT NULL);

パラメータ

パラメータ 説明

namespace

属性が作成されるネームスペース。セッションにネームスペースが存在しない場合は、エラーがスローされます。大/小文字を区別する文字列の最大サイズは128文字です。

attribute

作成する属性の名前。大/小文字を区別する文字列の最大サイズは4000文字です。

value

属性のデフォルト値。大/小文字を区別する文字列の最大サイズは4000文字です。

eventreg

属性に対してハンドラが実行されるイベント。これは、オプションのパラメータです。このパラメータの値は、次のいずれかです。

  • DBMS_XS_SESSIONS.attribute_first_read_event

    ハンドラ・ファンクションは、属性取得リクエストを受信し、属性の値が設定されていない場合にコールされます。このイベントは、デフォルト値がNULLに設定されている場合にのみ登録できます。この値は、XS_NAMESPACEパッケージまたはAdmin APIのFIRSTREAD_EVENT定数に対応します。

  • DBMS_XS_SESSIONS.modify_attribute_event:

    ハンドラ・ファンクションは、属性設定リクエストを受信するたびにコールされます。この値は、XS_NAMESPACEパッケージまたはAdmin APIのUPDATE_EVENT定数に対応します。

属性が最初の読取りイベントに対して登録されている場合、ハンドラは、値を戻す前に属性が初期化されていない場合に実行されます。更新イベントが登録されている場合は、属性が変更されるたびにハンドラがコールされます。イベントは、ネームスペースにイベント・ハンドラがある場合にのみ登録でき、それ以外の場合はエラーがスローされます。

BEGIN
 SYS.DBMS_XS_SESSIONS.CREATE_ATTRIBUTE('NS1','NS1CUSTOM','NS1CUSTOMDEFAULT');
END;

-- Example with firstRead event set
BEGIN
SYS.DBMS_XS_SESSIONS.create_Attribute('ns1','attr4',NULL,
                                       DBMS_XS_SESSIONS.attribute_first_read_event);
END;

SET_ATTRIBUTEプロシージャ

SET_ATTRIBUTEプロシージャは、現在連結されているセッションに関連付けられているネームスペースの指定された属性に新しい値を設定します。ハンドラ・ファンクションは、属性に対してupdateイベントが設定されている場合にコールされます。ネームスペースが存在しないか削除されている場合は、エラーがスローされます。存在するネームスペースに対応するテンプレートがない場合は、エラーがスローされます。

コール元ユーザーにはMODIFY_ATTRIBUTEアプリケーション権限が付与されている必要があります。

構文

SET_ATTRIBUTE (
 namespace    IN VARCHAR2,
 attribute    IN VARCHAR2,
 value        IN VARCHAR2);

パラメータ

パラメータ 説明

namespace

属性に関連付けられているネームスペースの名前。大/小文字を区別する文字列の最大サイズは128文字です。

現在のセッションの既存のネームスペースのリストを検索するには、連結後にV$XS_SESSION_NS_ATTRIBUTESデータ・ディクショナリ・ビューを問い合せます。DBA_XS_SESSION_NS_ATTRIBUTESデータ・ディクショナリ・ビューを問い合せて、すべてのアプリケーション・セッションのすべてのネームスペースを確認できます。

DBA_XS_NS_TEMPLATESおよびDBA_XS_NS_TEMPLATE_ATTRIBUTESデータ・ディクショナリ・ビューでネームスペース・テンプレートおよび属性のリストを問い合せることができます。

attribute

既存のネームスペース内の既存の属性の名前。

既存のネームスペース属性のリストを検索するには、V$XS_SESSION_NS_ATTRIBUTESデータ・ディクショナリ・ビューを問い合せます。

value

属性の新規の値。大/小文字を区別する文字列の最大サイズは4000文字です。

属性に関連付けられている既存の値のリストを検索するには、V$XS_SESSION_NS_ATTRIBUTESデータ・ディクショナリ・ビューを問い合せます。

BEGIN
 SYS.DBMS_XS_SESSIONS.SET_ATTRIBUTE('J_NS','JohnNSAttr1','John bio');
END;

GET_ATTRIBUTEプロシージャ

GET_ATTRIBUTEプロシージャは、現在連結されているセッションのネームスペースの指定された属性の値を取得します。ネームスペースに対応するテンプレートが存在しない場合は、エラーがスローされます。指定された属性が存在しない場合は、空の文字列が戻されます。

属性値がNULLで、firstReadイベントが設定され、このとき初めて属性値がフェッチされる場合は、属性のハンドラ・ファンクションがコールされます。

コール元ユーザーには、どの権限も付与されている必要はありません。

構文

GET_ATTRIBUTE (
 namespace   IN         VARCHAR2,
 attribute   IN         VARCHAR2,
 value       OUT NOCOPY VARCHAR2);

パラメータ

パラメータ 説明

namespace

取得する属性のネームスペース。大/小文字を区別する文字列の最大サイズは128文字です。

現在のセッションの既存のネームスペースのリストを検索するには、連結後にV$XS_SESSION_NS_ATTRIBUTESデータ・ディクショナリ・ビューを問い合せます。DBA_XS_SESSION_NS_ATTRIBUTESデータ・ディクショナリ・ビューを問い合せて、すべてのアプリケーション・セッションのすべてのネームスペースを確認できます。

attribute

取得する属性の名前。大/小文字を区別する文字列の最大サイズは4000文字です。使用可能な属性のリストを検索するには、V$XS_SESSION_NS_ATTRIBUTESデータ・ディクショナリ・ビューを問い合せます。

value

取得する属性の値。

使用可能な属性値のリストを検索するには、V$XS_SESSION_NS_ATTRIBUTESデータ・ディクショナリ・ビューを問い合せます。

DECLARE 
attrVal VARCHAR2(4000);
BEGIN
 SYS.DBMS_XS_SESSIONS.GET_ATTRIBUTE('J_NS1','JohnNS1Attr1',attrVal);
END;

RESET_ATTRIBUTEプロシージャ

RESET_ATTRIBUTEプロシージャは、現在連結されているセッションのネームスペース内で属性の値をデフォルト値(存在する場合)またはNULLにリセットします。属性にデフォルト値が指定されている場合、値はデフォルト値にリセットされます。属性がデフォルト値なしで作成され、attribute_first_read_eventでマークされている場合は、値がNULLに設定され、未初期化としてマークされます。属性がデフォルト値なしで作成され、attribute_first_read_eventでマークされていない場合は、値がNULLに設定されます。

コール元ユーザーにはMODIFY_ATTRIBUTEアプリケーション権限が付与されている必要があります。

構文

PROCEDURE reset_attribute(
namespace   IN VARCHAR2,
attribute   IN VARCHAR2);

パラメータ

パラメータ 説明

namespace

属性を含むネームスペースの名前。大/小文字を区別する文字列の最大サイズは128文字です。

attribute

リセットする属性の名前。大/小文字を区別する文字列の最大サイズは4000文字です。

BEGIN
 SYS.DBMS_XS_SESSIONS.RESET_ATTRIBUTE('ns2','attr1');
END;

DELETE_ATTRIBUTEプロシージャ

DELETE_ATTRIBUTEプロシージャは、現在連結されているセッションの指定されたネームスペースから指定された属性および関連付けられている値を削除します。カスタム属性のみ削除できます。テンプレート属性は削除できません。指定された属性が存在しない場合は、エラーがスローされます。

コール元アプリケーションにはMODIFY_ATTRIBUTEアプリケーション権限が付与されている必要があります。

構文

DELETE_ATTRIBUTE (
 namespace     IN VARCHAR2,
 attribute     IN VARCHAR2);

パラメータ

パラメータ 説明

namespace

削除する属性に関連付けられているネームスペース。大/小文字を区別する文字列の最大サイズは128文字です。

現在のセッションの既存のネームスペースのリストを検索するには、連結後にV$XS_SESSION_NS_ATTRIBUTESデータ・ディクショナリ・ビューを問い合せます。DBA_XS_SESSION_NS_ATTRIBUTESデータ・ディクショナリ・ビューを問い合せて、すべてのアプリケーション・セッションのすべてのネームスペースを確認できます。

DBA_XS_NS_TEMPLATESおよびDBA_XS_NS_TEMPLATE_ATTRIBUTESデータ・ディクショナリ・ビューでネームスペース・テンプレートおよび属性のリストを問い合せることができます。

attribute

削除する属性。

現在のセッションの既存のネームスペースのリストを検索するには、連結後にV$XS_SESSION_NS_ATTRIBUTESデータ・ディクショナリ・ビューを問い合せます。DBA_XS_SESSION_NS_ATTRIBUTESデータ・ディクショナリ・ビューを問い合せて、すべてのアプリケーション・セッションのすべてのネームスペースを確認できます。

BEGIN
 SYS.DBMS_XS_SESSIONS.DELETE_ATTRIBUTE('JohnNS1','JohnNS1Attr1');
END;

DELETE_NAMESPACEプロシージャ

DELETE_NAMESPACEプロシージャは、ネームスペースおよびその属性を現在連結されているアプリケーション・セッションから削除します。

コール元のユーザーには、MODIFY_NAMESPACEアプリケーション権限が必要です。

構文

DELETE_NAMESPACE (
 namespace   IN VARCHAR2);

パラメータ

パラメータ 説明

namespace

削除するネームスペースの名前。大/小文字を区別する文字列の最大サイズは128文字です。

現在のセッションの既存のネームスペースのリストを検索するには、連結後にV$XS_SESSION_NS_ATTRIBUTESデータ・ディクショナリ・ビューを問い合せます。DBA_XS_SESSION_NS_ATTRIBUTESデータ・ディクショナリ・ビューを問い合せて、すべてのアプリケーション・セッションのすべてのネームスペースを確認できます。

DBA_XS_NS_TEMPLATESおよびDBA_XS_NS_TEMPLATE_ATTRIBUTESデータ・ディクショナリ・ビューでネームスペース・テンプレートおよび属性のリストを問い合せることができます。

BEGIN
 SYS.DBMS_XS_SESSIONS.DELETE_NAMESPACE('JohnNS1');
END;

ENABLE_ROLEプロシージャ

ENABLE_ROLEプロシージャは、現在連結されているアプリケーション・セッションで実際のアプリケーション・ロールを有効にします。ロールがすでに有効になっている場合、ENABLE_ROLEプロシージャはアクションを実行しません。このプロシージャは、現在のアプリケーション・ユーザーに直接付与されている標準アプリケーション・ロールのみ有効にします。動的アプリケーション・ロールは有効にできません。

この操作では、コール元ユーザーにアプリケーション権限は不要です。

構文

ENABLE_ROLE (
 role   IN VARCHAR2);

パラメータ

パラメータ 説明

role

有効にするロールの名前。大/小文字を区別する文字列の最大サイズは128文字です。

現在のセッションのアプリケーション・ロールのリストを検索するには、V$XS_SESSION_ROLESデータ・ディクショナリ・ビューを問い合せます。すべてのアプリケーション・ロールを検索するには、DBA_XS_SESSION_ROLESデータ・ディクショナリ・ビューを次のように問い合せます。

SELECT ROLE_NAME FROM V$XS_SESSION_ROLES;

SELECT SESSIONID, ROLE FROM DBA_XS_SESSION_ROLES;

BEGIN
 SYS.DBMS_XS_SESSIONS.ENABLE_ROLE('auth2_role');
END;

DISABLE_ROLEプロシージャ

DISABLE_ROLEプロシージャは、指定されたアプリケーション・セッションから実際のアプリケーション・ロールを無効にします。現在連結されているアプリケーション・セッションでロールがすでに無効になっているか有効になっていない場合、DISABLE_ROLEはアクションを実行しません。動的アプリケーション・ロールは無効にできません。セッションを作成したアプリケーション・ユーザーに直接付与されている標準アプリケーション・ロールのみ無効にできます。

この操作では、コール元ユーザーにアプリケーション権限は不要です。

構文

DISABLE_ROLE (
 role   IN VARCHAR2);

パラメータ

パラメータ 説明

role

無効にするロールの名前。大/小文字を区別する文字列の最大サイズは128文字です。

現在のセッションのアプリケーション・ロールのリストを検索するには、V$XS_SESSION_ROLESデータ・ディクショナリ・ビューを問い合せます。すべてのアプリケーション・ロールを検索するには、DBA_XS_SESSION_ROLESデータ・ディクショナリ・ビューを次のように問い合せます。

SELECT ROLE_NAME FROM V$XS_SESSION_ROLES;

SELECT SESSIONID, ROLE FROM DBA_XS_SESSION_ROLES;

BEGIN
  SYS.DBMS_XS_SESSIONS.DISABLE_ROLE('auth1_role');
END;

SET_SESSION_COOKIEプロシージャ

SET_SESSION_COOKIEプロシージャは、指定されたセッションIDで新しいCookie値を設定します。指定されたセッションが存在しないかCookie名がすべてのユーザー・アプリケーション・セッション間で一意でない場合は、エラーがスローされます。

このプロシージャを実行するには、ユーザーにMODIFY_SESSIONアプリケーション権限が付与されている必要があります。

構文

SET_SESSION_COOKIE (
 cookie      IN VARCHAR2, 
 sessionid   IN RAW DEFAULT NULL);

パラメータ

パラメータ 説明

cookie

新規Cookieの名前。Cookieに対して許可される最大長は1024文字です。Cookie名は一意にする必要があります。

現在のセッションの既存のCookiesのリストを検索するには、XS_SYS_CONTEXT(XS$SESSION','COOKIE')を問い合せます。

sessionid

アプリケーション・セッションのセッションID。デフォルト値はNULLです。次のいずれかの方法を使用して、セッションIDを取得できます。

  • SELECT XS_SYS_CONTEXT('XS$SESSION', 'SESSION_ID') FROM DUAL;

  • DBMS_XS_SESSIONS.GET_ATTRIBUTEプロシージャの使用。

セッションIDを指定しないかNULLを入力した場合、SET_SESSION_COOKIEは現在のアプリケーション・セッションのセッションIDを使用します。

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

REAUTH_SESSIONプロシージャ

REAUTH_SESSIONプロシージャは、指定されたセッションIDの最終認証時刻を現在の時刻で更新します。アプリケーションは、アプリケーション・ユーザーを再認証したときにこのプロシージャをコールする必要があります。

REAUTH_SESSIONプロシージャを使用して、アプリケーションまたは中間層サーバーで最近認証されていないためタイムアウトになったロールを有効にします。reauthSession Javaメソッドをコールすることもできます。

このファンクションを実行するには、ユーザーにMODIFY_SESSIONアプリケーション権限が付与されている必要があります。

構文

REAUTH_SESSION (
 sessionid IN RAW DEFAULT NULL);

パラメータ

パラメータ 説明

sessionid

アプリケーション・セッションのセッションID。このパラメータはオプションです。デフォルト値はNULLです。次のいずれかの方法を使用して、セッションIDを取得できます。

  • SELECT XS_SYS_CONTEXT('XS$SESSION', 'SESSION_ID') FROM DUAL;

  • DBMS_XS_SESSIONS.GET_ATTRIBUTEプロシージャの使用。

セッションIDを指定しないかNULLを入力した場合、REAUTH_SESSIONは現在のアプリケーション・セッションのセッションIDを使用します。

DECLARE
  sessionid RAW(16);
BEGIN
 SYS.DBMS_XS_SESSIONS.REAUTH_SESSION(sessionid);
END;

SET_INACTIVITY_TIMEOUTプロシージャ

SET_INACTIVITY_TIMEOUTプロシージャは、現在連結されているセッションの非アクティブ・タイムアウト値を分単位で設定します。非アクティブ・タイムアウト値は、Oracleデータベースがアプリケーション・セッションを終了し、リソースが解放される前に許容される最大非アクティブ期間を表します。timeパラメータに負の値を設定しようとすると、エラーがスローされます。無効なセッションIDが指定されるかセッションが存在しない場合は、エラーがスローされます。

タイムアウト値を設定する別の方法は、setInactivityTimeout Javaメソッドを使用することです。xmlconfig.xml構成ファイルでデフォルトのグローバル・タイムアウト値を設定できます。240 (4時間)をお薦めします。

アプリケーション・セッションは、従来のセッションが連結されている間は非アクティブになるため、タイムアウトにできません。最終アクセス時刻は、従来のセッションがアプリケーション・セッションに連結するたびに更新されます。

このプロシージャを実行するには、コール元ユーザーにMODIFY_SESSIONアプリケーション権限が付与されている必要があります。

構文

SET_INACTIVITY_TIMEOUT (
 time        IN NUMBER, 
 sessionid   IN RAW DEFAULT NULL);

パラメータ

パラメータ 説明

time

分単位での非アクティブ・タイムアウト値。timeパラメータを240 (4時間)に設定することをお薦めします。ゼロ(0)値は、値が無限であり、セッションが非アクティブ状態によって失効しないことを意味します。

sessionid

アプリケーション・セッションのセッションID。デフォルト値はNULLです。次のいずれかの方法を使用して、セッションIDを取得できます。

  • SELECT XS_SYS_CONTEXT('XS$SESSION', 'SESSION_ID') FROM DUAL;

  • DBMS_XS_SESSIONS.GET_ATTRIBUTEプロシージャの使用。

セッションIDを指定しないかNULLを入力した場合、SET_INACTIVITY_TIMEOUTは現在のアプリケーション・セッションのセッションIDを使用します。

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

SAVE_SESSIONプロシージャ

SAVE_SESSIONプロシージャは、現在連結されているセッションで実行されたすべての変更を保存し、変更を保存する前のセッションに連結したままにします。

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

構文

SAVE_SESSION;

パラメータ

なし。

BEGIN
 SYS.DBMS_XS_SESSIONS.SAVE_SESSION;
END;

DETACH_SESSIONプロシージャ

DETACH_SESSIONプロシージャは、現在の従来型データベース・セッションを、連結先のアプリケーション・セッションから連結解除します。データベース・セッションは、アプリケーション・セッションに連結する前のコンテキストに戻ります。操作を実行するために権限は必要ないため、任意のユーザーがこのプロシージャを実行できます。

構文

DETACH_SESSION (abort IN BOOLEAN DEFAULT FALSE);

パラメータ

パラメータ 説明

abort

TRUEに指定した場合は、現在のセッションで実行された変更がロールバックされます。デフォルト値のFALSEに指定した場合は、セッションで実行されたすべての変更が永続化されます。このパラメータにNULL値が指定された場合は、FALSEとして扱われます。

BEGIN
 SYS.DBMS_XS_SESSIONS.DETACH_SESSION;
END;

DESTROY_SESSIONプロシージャ

DESTROY_SESSIONプロシージャは、指定されたセッションを破棄します。このプロシージャは、アプリケーション・セッションからすべての従来のセッションも暗黙的に連結解除します。セッションが破棄された後は、セッションに対してそれ以上連結を実行できません。この操作では、アプリケーション・ユーザーの直接ログオンを通じて作成されたセッションは破棄できません。

このプロシージャを実行するには、ユーザーにTERMINATE_SESSIONアプリケーション権限が必要です。

構文

DESTROY_SESSION (
 sessionid IN RAW,
 force     IN BOOLEAN DEFAULT FALSE);

パラメータ

パラメータ 説明

sessionid

アプリケーション・セッションのセッションID。次のいずれかの方法を使用して、セッションIDを取得できます。

  • SELECT XS_SYS_CONTEXT('XS$SESSION', 'SESSION_ID') FROM DUAL;

  • DBMS_XS_SESSIONS.GET_ATTRIBUTEプロシージャの使用。

セッションIDを指定しないかNULLを入力した場合、DESTROY_SESSIONは現在のアプリケーション・セッションのセッションIDを使用します。

force

FALSEに設定されている場合、指定されたセッションが現在連結されていると、この操作はエラーをスローします。TRUEに設定されている場合は、現在連結されているアプリケーション・セッションを破棄できます。これは、オプションのパラメータです。

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

ADD_GLOBAL_CALLBACKプロシージャ

ADD_GLOBAL_CALLBACKプロシージャは、既存のPL/SQLプロシージャをevent_typeパラメータで指定されたセッション操作にイベント・ハンドラとして登録します。関連付けられたイベントの発生時に実行するために同じセッション操作に対して複数のイベント・ハンドラを追加できます。グローバル・コールバック・プロシージャを追加すると、コールバック・プロシージャの実行が自動的に有効になります。同じセッション・イベントに対して複数のコールバックが追加されている場合、それらは登録順序に従って実行されます。つまり、最初に登録されたコールバック・プロシージャが最初に実行されます。このプロシージャは、無効なイベント・タイプが指定されている場合、またはコールバック・プロシージャが存在しない場合にエラーをスローします。

このプロシージャを正常に実行するには、CALLBACKアプリケーション権限が必要です。このロールは、PROVISIONERデータベース・ロールを通じて取得できます。

構文

ADD_GLOBAL_CALLBACK(
  event_type         IN PLS_INTEGER, 
  callback_schema    IN VARCHAR2, 
  callback_package   IN VARCHAR2,
  callback_procedure IN VARCHAR2);

パラメータ

パラメータ 説明

event_type

次のイベント・タイプから選択します。

  • CREATE_SESSION_EVENT

  • ATTACH_SESSION_EVENT

  • CREATE_NAMESPACE_EVENT

  • GUEST_TO_USER_EVENT

  • PROXY_TO_USER_EVENT

  • REVERT_TO_USER_EVENT

  • ENABLE_ROLE_EVENT

  • DISABLE_ROLE_EVENT

  • ENABLE_DYNAMIC_ROLE_EVENT

  • DISABLE_DYNAMIC_ROLE_EVENT

  • DETACH_SESSION_EVENT

  • TERMINATE_SESSION_EVENT

  • DIRECT_LOGIN_EVENT

callback_schema

コールバック・プロシージャが作成されたスキーマの名前を入力します。

callback_package

コールバック・プロシージャが作成されたパッケージの名前を入力します。コールバック・プロシージャがスタンドアロンの場合は、NULLcallback_packageパラメータとして渡す必要があります。このパラメータは、コールバック・プロシージャがパッケージ内にある場合にのみオプションです。

callback_procedure

グローバル・コールバックを定義するプロシージャの名前を入力します。

BEGIN
 SYS.DBMS_XS_SESSIONS.ADD_GLOBAL_CALLBACK (
  DBMS_XS_SESSIONS.CREATE_SESSION_EVENT, 
  'APPS1_SCHEMA','APPS2_PKG','CREATE_SESSION_CB');
END;

ENABLE_GLOBAL_CALLBACKプロシージャ

ENABLE_GLOBAL_CALLBACKプロシージャは、グローバル・コールバック・プロシージャの実行を有効または無効にします。このイベントに関連付けられているコールバック・プロシージャが指定されていない場合は、このグローバル・コールバックに関連付けられているすべてのコールバック・プロシージャが有効または無効になります。無効なイベント・タイプが指定されているか無効なコールバック・プロシージャが指定されている場合は、エラーがスローされます。

構文

ENABLE_GLOBAL_CALLBACK(
  event_type         IN PLS_INTEGER,
  enable             IN BOOLEAN  DEFAULT TRUE,
  callback_schema    IN VARCHAR2 DEFAULT NULL,
  callback_package   IN VARCHAR2 DEFAULT NULL,
  callback_procedure IN VARCHAR2 DEFAULT NULL);

パラメータ

パラメータ 説明

event_type

次のイベント・タイプから選択します。

  • CREATE_SESSION_EVENT

  • ATTACH_SESSION_EVENT

  • CREATE_NAMESPACE_EVENT

  • GUEST_TO_USER_EVENT

  • PROXY_TO_USER_EVENT

  • REVERT_TO_USER_EVENT

  • ENABLE_ROLE_EVENT

  • DISABLE_ROLE_EVENT

  • ENABLE_DYNAMIC_ROLE_EVENT

  • DISABLE_DYNAMIC_ROLE_EVENT

  • DETACH_SESSION_EVENT

  • TERMINATE_SESSION_EVENT

  • DIRECT_LOGIN_EVENT

enable

グローバル・コールバックを有効にするか無効にするかを指定します。デフォルト値はTRUEで、有効を意味します。

callback_schema

グローバル・コールバックが作成されたスキーマの名前を入力します。

callback_package

グローバル・コールバックが作成されたパッケージの名前を入力します。

callback_procedure

グローバル・コールバックを定義するプロシージャの名前を入力します。

BEGIN
 SYS.DBMS_XS_SESSIONS.ENABLE_GLOBAL_CALLBACK (
  DBMS_XS_SESSIONS.CREATE_SESSION_EVENT, 
  TRUE, 'APPS1_SCHEMA','APPS2_PKG','CREATE_SESSION_CB');
END;

DELETE_GLOBAL_CALLBACKプロシージャ

DELETE_GLOBAL_CALLBACKプロシージャは、グローバル・コールバックを登録から削除します。(グローバル・コールバック自体は削除しません。)コールバック・プロシージャが指定されていない場合は、このグローバル・コールバックに関連付けられているすべてのコールバック・プロシージャが削除されます。無効なイベント・タイプが指定されている場合は、エラーがスローされます。

構文

DELETE_GLOBAL_CALLBACK(
  event_type         IN PLS_INTEGER,
  callback_schema    IN VARCHAR2 DEFAULT NULL, 
  callback_package   IN VARCHAR2 DEFAULT NULL,
  callback_procedure IN VARCHAR2 DEFAULT NULL);

パラメータ

パラメータ 説明

event_type

次のイベント・タイプから選択します。

  • CREATE_SESSION_EVENT

  • ATTACH_SESSION_EVENT

  • CREATE_NAMESPACE_EVENT

  • GUEST_TO_USER_EVENT

  • PROXY_TO_USER_EVENT

  • REVERT_TO_USER_EVENT

  • ENABLE_ROLE_EVENT

  • DISABLE_ROLE_EVENT

  • ENABLE_DYNAMIC_ROLE_EVENT

  • DISABLE_DYNAMIC_ROLE_EVENT

  • DETACH_SESSION_EVENT

  • TERMINATE_SESSION_EVENT

  • DIRECT_LOGIN_EVENT

callback_schema

グローバル・コールバックが作成されたスキーマの名前を入力します。

callback_package

グローバル・コールバックが作成されたパッケージの名前を入力します。

callback_procedure

グローバル・コールバックを定義するプロシージャの名前を入力します。

BEGIN
 SYS.DBMS_XS_SESSIONS.DELETE_GLOBAL_CALLBACK (
  DBMS_XS_SESSIONS.CREATE_SESSION_EVENT, 
  'APPS1_SCHEMA','APPS2_PKG','CREATE_SESSION_CB');
END;

XS_ACLパッケージ

XS_ACLパッケージは、アクセス制御リスト(ACL)を作成および管理するプロシージャを作成します。

セキュリティ・モデル

XS_ACLパッケージは、SYSスキーマに作成されます。

すべてのスキーマのACL、セキュリティ・クラス、セキュリティ・ポリシーなどのスキーマ・オブジェクトを管理できるADMIN_ANY_SEC_POLICY権限がDBAロールに付与されます。

ユーザーは、スキーマに対するRESOURCEロールを付与されている場合に、自身のスキーマ内のスキーマ・オブジェクトを管理できます。RESOURCEロールおよびXS_RESOURCEアプリケーション・ロールには、スキーマ内のスキーマ・オブジェクトの管理に必要なADMIN_SEC_POLICY権限が含まれます。

オブジェクト・タイプ、コンストラクタ・ファンクション、シノニムおよび付与

このパッケージには、次のオブジェクト・タイプ、コンストラクタ・ファンクション、シノニムおよびGRANT文が定義されています。

-- Type definition for ACE
CREATE OR REPLACE TYPE XS$ACE_TYPE AS OBJECT (
 
-- Member Variables
  privilege_list      XS$NAME_LIST,
  is_grant_ace        NUMBER,
  is_invert_principal NUMBER,
  principal_name      VARCHAR2(130),
  principal_type      NUMBER,
  start_date          TIMESTAMP WITH TIME ZONE,
  end_date            TIMESTAMP WITH TIME ZONE,
 
  CONSTRUCTOR FUNCTION XS$ACE_TYPE (
    privilege_list   IN XS$NAME_LIST,
    granted          IN BOOLEAN := TRUE,
    inverted         IN BOOLEAN := FALSE,
    principal_name   IN VARCHAR2,
    principal_type   IN PLS_INTEGER := 1,
    start_date       IN TIMESTAMP WITH TIME ZONE := NULL,
    end_date         IN TIMESTAMP WITH TIME ZONE := NULL)
  RETURN SELF AS RESULT,

  MEMBER PROCEDURE set_privileges(privilege_list IN XS$NAME_LIST),
  MEMBER FUNCTION get_privileges RETURN XS$NAME_LIST,
  MEMBER PROCEDURE set_grant(granted IN BOOLEAN),
  MEMBER FUNCTION is_granted RETURN BOOLEAN,
  MEMBER PROCEDURE set_inverted_principal(inverted IN BOOLEAN),
  MEMBER FUNCTION is_inverted_principal RETURN BOOLEAN,
  MEMBER PROCEDURE set_principal(principal_name IN VARCHAR2),
  MEMBER FUNCTION get_principal RETURN VARCHAR2,
  MEMBER PROCEDURE set_principal_type (principal_type IN PLS_INTEGER),
  MEMBER FUNCTION get_principal_type RETURN PLS_INTEGER,
  MEMBER PROCEDURE set_start_date(start_date IN TIMESTAMP WITH TIME ZONE),
  MEMBER FUNCTION get_start_date RETURN TIMESTAMP WITH TIME ZONE,
  MEMBER PROCEDURE set_end_date(end_date IN TIMESTAMP WITH TIME ZONE),
  MEMBER FUNCTION get_end_date RETURN TIMESTAMP WITH TIME ZONE
);
CREATE OR REPLACE TYPE XS$ACE_LIST AS VARRAY(1000) OF XS$ACE_TYPE;

定数

次の定数は親ACLタイプを定義します。

EXTENDED              CONSTANT PLS_INTEGER := 1;
CONSTRAINED           CONSTANT PLS_INTEGER := 2;  

次の定数はプリンシパルのタイプを定義します。

PTYPE_XS              CONSTANT PLS_INTEGER := 1;
PTYPE_DB              CONSTANT PLS_INTEGER := 2;
PTYPE_DN              CONSTANT PLS_INTEGER := 3;
PTYPE_EXTERNAL        CONSTANT PLS_INTEGER := 4;

次の定数はパラメータの値タイプを定義します。

TYPE_NUMBER           CONSTANT PLS_INTEGER := 1;
TYPE_VARCHAR          CONSTANT PLS_INTEGER := 2;

XS_ACLサブプログラムの要約

表11-3 XS_ACLサブプログラムの要約

サブプログラム 説明

CREATE_ACLプロシージャ

アクセス制御リスト(ACL)を作成します。

APPEND_ACESプロシージャ

1つ以上のアクセス制御エントリ(ACE)を既存のACLに追加します。

REMOVE_ACESプロシージャ

ACLからすべてのACEを削除します。

SET_SECURITY_CLASSプロシージャ

ACLのセキュリティ・クラスを設定または変更します。

SET_PARENT_ACLプロシージャ

ACLの親ACLを設定または変更します。

ADD_ACL_PARAMETERプロシージャ

データ・セキュリティ・ポリシーのACLパラメータ値を追加します。

REMOVE_ACL_PARAMETERSプロシージャ

ACLのACLパラメータと値を削除します。

SET_DESCRIPTIONプロシージャ

ACLの説明文字列を設定します。

DELETE_ACLプロシージャ

指定されたACLを削除します。

CREATE_ACLプロシージャ

CREATE_ACLプロシージャは、新しいアクセス制御リスト(ACL)を作成します。

構文

XS_ACL.CREATE_ACL (  name            IN VARCHAR2,
  ace_list        IN XS$ACE_LIST,
  sec_class       IN VARCHAR2 := NULL,
  parent          IN VARCHAR2 := NULL,
  inherit_mode    IN PLS_INTEGER := NULL,
  description     IN VARCHAR2 := NULL); 

パラメータ

パラメータ 説明

name

作成するACLの名前。

名前は、SCOTT.ACL1のようにスキーマで修飾されます。名前のスキーマ部分がない場合は、現在のセッション・スキーマが想定されます。たとえば、この同じ例では、名前がACL1として指定され、現在のスキーマがSCOTTの場合に、SCOTT.ACL1に解決されます。

ace_list

ACL内のアクセス制御エントリ(ACE)のリスト。

sec_class

ACLのスコープまたはタイプを指定するセキュリティ・クラスの名前。セキュリティ・クラスが指定されていない場合は、DMLクラスがデフォルトのセキュリティ・クラスとして使用されます。

名前は、SCOTT.ACL1のようにスキーマで修飾されます。名前のスキーマ部分がない場合は、現在のセッション・スキーマが想定されます。たとえば、この同じ例では、名前がACL1として指定され、現在のスキーマがSCOTTの場合に、SCOTT.ACL1に解決されます。

parent

親ACL名(存在する場合)。

名前は、SCOTT.ACL1のようにスキーマで修飾されます。名前のスキーマ部分がない場合は、現在のセッション・スキーマが想定されます。たとえば、この同じ例では、名前がACL1として指定され、現在のスキーマがSCOTTの場合に、SCOTT.ACL1に解決されます。

inherit_mode

親ACLが指定されている場合に継承モード。使用できる値はEXTENDEDまたはCONSTRAINEDです。

description

ACLのオプションの説明。

次の例は、HRACLというACLを作成します。このACLには、ace_listに格納されたACEが含まれます。ace_listで使用される権限は、HRPRIVSセキュリティ・クラスの一部です。

DECLARE  
  ace_list XS$ACE_LIST;  
BEGIN 
  ace_list := XS$ACE_LIST(
      XS$ACE_TYPE(privilege_list=>XS$NAME_LIST('"SELECT"','VIEW_SENSITIVE_INFO'), 
                  granted=>true, 
                  principal_name=>'HRREP'),
      XS$ACE_TYPE(privilege_list=>XS$NAME_LIST('UPDATE_INFO'),
                  granted=>true,
                  principal_name=>'HRMGR'));
  SYS.XS_ACL.CREATE_ACL(name=>'HRACL',
                        ace_list=>ace_list,
                        sec_class=>'HRPRIVS',
                        description=>'HR Representative Access');
END;

APPEND_ACESプロシージャ

APPEND_ACESプロシージャは、1つ以上のACEを既存のACLに追加します。

構文

XS_ACL.APPEND_ACES (
  acl      IN VARCHAR2,
  ace      IN XS$ACE_TYPE); 

XS.ACL.APPEND_ACES (
  acl      IN VARCHAR2,
  ace_list IN XS$ACE_LIST); 

パラメータ

パラメータ 説明

acl

ACEを追加するACLの名前。

名前は、SCOTT.ACL1のようにスキーマで修飾されます。名前のスキーマ部分がない場合は、現在のセッション・スキーマが想定されます。たとえば、この同じ例では、名前がACL1として指定され、現在のスキーマがSCOTTの場合に、SCOTT.ACL1に解決されます。

ace

ACLに追加するACE。

ace_list

ACLに追加するACEのリスト。

次の例は、HRACL ACLにACEを追加します。ACEによって、SELECT権限がDB_HRデータベース・ユーザーに付与されます。

DECLARE  
  ace_entry XS$ACE_TYPE;  
BEGIN 
  ace_entry := XS$ACE_TYPE(privilege_list=>XS$NAME_LIST('"SELECT"'), 
                           granted=>true,
                           principal_name=>'DB_HR',
                           principal_type=>XS_ACL.PTYPE_DB);
  SYS.XS_ACL.APPEND_ACES('HRACL',ace_entry);
END;

REMOVE_ACESプロシージャ

REMOVE_ACESプロシージャは、ACLからすべてのACEを削除します。

構文

XS_ACL.REMOVE_ACES (
  acl IN VARCHAR2); 

パラメータ

パラメータ 説明

acl

ACEを削除するACLの名前。

名前は、SCOTT.ACL1のようにスキーマで修飾されます。名前のスキーマ部分がない場合は、現在のセッション・スキーマが想定されます。たとえば、この同じ例では、名前がACL1として指定され、現在のスキーマがSCOTTの場合に、SCOTT.ACL1に解決されます。

次の例は、HRACLというACLからすべてのACEを削除します。

BEGIN
  SYS.XS_ACL.REMOVE_ACES('HRACL');
END;

SET_SECURITY_CLASSプロシージャ

SET_SECURITY_CLASSプロシージャは、ACLのセキュリティ・クラスを設定または変更します。

構文

XS_ACL.SET_SECURITY_CLASS (
  acl       IN VARCHAR2,
  sec_class IN VARCHAR2);

パラメータ

パラメータ 説明

acl

セキュリティ・クラスを設定するACLの名前。

名前は、SCOTT.ACL1のようにスキーマで修飾されます。名前のスキーマ部分がない場合は、現在のセッション・スキーマが想定されます。たとえば、この同じ例では、名前がACL1として指定され、現在のスキーマがSCOTTの場合に、SCOTT.ACL1に解決されます。

sec_class

ACLのスコープまたはタイプを定義するセキュリティ・クラスの名前。

名前は、SCOTT.ACL1のようにスキーマで修飾されます。名前のスキーマ部分がない場合は、現在のセッション・スキーマが想定されます。たとえば、この同じ例では、名前がACL1として指定され、現在のスキーマがSCOTTの場合に、SCOTT.ACL1に解決されます。

次の例は、HRPRIVSセキュリティ・クラスをHRACL ACLに関連付けます。

BEGIN
  SYS.XS_ACL.SET_SECURITY_CLASS('HRACL','HRPRIVS');
END;

SET_PARENT_ACLプロシージャ

SET_PARENT_ACLは、ACLの親ACLを設定または変更します。

構文

XS_ACL.SET_PARENT_ACL(
  acl            IN VARCHAR2,
  parent         IN VARCHAR2,
  inherit_mode   IN PLS_INTEGER);

パラメータ

パラメータ 説明

acl

親を設定する必要があるACLの名前。

名前は、SCOTT.ACL1のようにスキーマで修飾されます。名前のスキーマ部分がない場合は、現在のセッション・スキーマが想定されます。たとえば、この同じ例では、名前がACL1として指定され、現在のスキーマがSCOTTの場合に、SCOTT.ACL1に解決されます。

parent

親ACLの名前。

名前は、SCOTT.ACL1のようにスキーマで修飾されます。名前のスキーマ部分がない場合は、現在のセッション・スキーマが想定されます。たとえば、この同じ例では、名前がACL1として指定され、現在のスキーマがSCOTTの場合に、SCOTT.ACL1に解決されます。

inherit_mode

継承モード。これは、次のいずれかの値です。

EXTENDED (extends from)、CONSTRAINED (constrained with)

次の例では、AllDepACL ACLをHRACL ACLの親のACLとして設定しています。継承タイプはEXTENDEDに設定されます。

BEGIN
  SYS.XS_ACL.SET_PARENT_ACL('HRACL','AllDepACL',XS_ACL.EXTENDED);
END;

ADD_ACL_PARAMETERプロシージャ

ADD_ACL_PARAMETERは、データ・セキュリティ・ポリシーのACLパラメータ値を追加します。

構文

XS_ACL.ADD_ACL_PARAMETER (
  acl         IN VARCHAR2,
  policy      IN VARCHAR2,
  parameter   IN VARCHAR2,
  value       IN NUMBER); 

XS_ACL.ADD_ACL_PARAMETER (
  acl         IN VARCHAR2,
  policy      IN VARCHAR2,
  parameter   IN VARCHAR2,
  value       IN VARCHAR2);

パラメータ

パラメータ 説明

acl

パラメータを追加するACLの名前。

名前は、SCOTT.ACL1のようにスキーマで修飾されます。名前のスキーマ部分がない場合は、現在のセッション・スキーマが想定されます。たとえば、この同じ例では、名前がACL1として指定され、現在のスキーマがSCOTTの場合に、SCOTT.ACL1に解決されます。

policy

ACLパラメータが作成されたデータ・セキュリティ・ポリシーの名前。

名前は、SCOTT.ACL1のようにスキーマで修飾されます。名前のスキーマ部分がない場合は、現在のセッション・スキーマが想定されます。たとえば、この同じ例では、名前がACL1として指定され、現在のスキーマがSCOTTの場合に、SCOTT.ACL1に解決されます。

parameter

データ・セキュリティ・ポリシーで定義されているACLパラメータの名前。

value

使用するACLパラメータの値。

次の例は、ACL1REGIONパラメータを追加します。ACLパラメータが作成されるデータ・セキュリティ・ポリシーの名前はTEST_DSです。REGIONパラメータの値はWESTです。

BEGIN
  SYS.XS_ACL.ADD_ACL_PARAMETER('ACL1','TEST_DS','REGION', 'WEST');
END;

REMOVE_ACL_PARAMETERSプロシージャ

REMOVE_ACL_PARAMETERSは、ACLの指定されたACLパラメータを削除します。パラメータ名が指定されていない場合は、ACLのすべてのACLパラメータが削除されます。

構文

XS_ACL.REMOVE_ACL_PARAMETERS (
  acl        IN VARCHAR2,
  parameter  IN VARCHAR2); 

XS_ACL.REMOVE_ACL_PARAMETERS (
  acl IN VARCHAR2); 

パラメータ

パラメータ 説明

acl

パラメータを削除するACLの名前。

名前は、SCOTT.ACL1のようにスキーマで修飾されます。名前のスキーマ部分がない場合は、現在のセッション・スキーマが想定されます。たとえば、この同じ例では、名前がACL1として指定され、現在のスキーマがSCOTTの場合に、SCOTT.ACL1に解決されます。

parameter

ACLから削除する必要のあるパラメータの名前。

次の例は、ACL1 ACLからREGIONパラメータを削除します。

BEGIN
  XS_ACL.REMOVE_ACL_PARAMETERS('ACL1', 'REGION');
END;

次の例は、ACL1のすべてのACLパラメータを削除します。

BEGIN
  SYS.XS_ACL.REMOVE_ACL_PARAMETERS('ACL1');
END;

SET_DESCRIPTIONプロシージャ

SET_DESCRIPTIONプロシージャは、ACLの説明文字列を設定します。

構文

XS_ACL.SET_DESCRIPTION (
  acl         IN VARCHAR2,
  description IN VARCHAR2);

パラメータ

パラメータ 説明

acl

説明を設定するACLの名前。

名前は、SCOTT.ACL1のようにスキーマで修飾されます。名前のスキーマ部分がない場合は、現在のセッション・スキーマが想定されます。たとえば、この同じ例では、名前がACL1として指定され、現在のスキーマがSCOTTの場合に、SCOTT.ACL1に解決されます。

description

ACLの説明文字列。

次の例は、HRACL ACLの説明を設定します。

BEGIN
  SYS.XS_ACL.SET_DESCRIPTION('HRACL','Grants privileges to HR representatives and 
                          managers.');
END;

DELETE_ACLプロシージャ

DELETE_ACLプロシージャは、指定されたACLを削除します。

構文

XS_ACL.DELETE_ACL (
  acl           IN VARCHAR2,
  delete_option IN PLS_INTEGER := XS_ADMIN_UTIL.DEFAULT_OPTION);

パラメータ

パラメータ 説明

acl

削除するACLの名前。

名前は、SCOTT.ACL1のようにスキーマで修飾されます。名前のスキーマ部分がない場合は、現在のセッション・スキーマが想定されます。たとえば、この同じ例では、名前がACL1として指定され、現在のスキーマがSCOTTの場合に、SCOTT.ACL1に解決されます。

delete_option

使用する削除オプション。データ・セキュリティ・ポリシーに対して、次のオプションの動作は同じです。

  • DEFAULT_OPTION:

    デフォルト・オプションでは、他で参照されていない場合にのみACLを削除できます。ACLが他の場所で参照されている場合は、ACLを削除できません。

    たとえば、データ・セキュリティ・ポリシーの一部であるACLを削除しようとした場合は、削除操作が失敗します。

  • CASCADE_OPTION:

    カスケード・オプションは、ACLを削除し、データ・セキュリティ・ポリシーのデータ・レルム制約内のACL参照も削除します。

  • ALLOW_INCONSISTENCIES_OPTION:

    不整合の許可オプションでは、他のエンティティからACLへの遅延バインド参照がある場合でもACLを削除できます。このモードでは、ACLが削除されますが、参照は削除されません。

次の例は、デフォルトの削除オプションを使用してHRACL ACLを削除します。

BEGIN
  SYS.XS_ACL.DELETE_ACL('HRACL');
END;

XS_ADMIN_UTILパッケージ

XS_ADMIN_UTILパッケージには、他のパッケージで使用するヘルパー・サブプログラムが含まれます。

セキュリティ・モデル

XS_ADMIN_UTILパッケージは、SYSスキーマに作成されます。コール元には、このパッケージに対する実行者の権限があります。ユーザーまたはロールのReal Application Securityシステム権限を付与または取り消すには、SYS権限が必要です。

オブジェクト・タイプ、コンストラクタ・ファンクション、シノニムおよび付与

このパッケージには、次のオブジェクト・タイプ、コンストラクタ・ファンクション、シノニムおよびGRANT文が定義されています。

CREATE OR REPLACE TYPE XS$LIST IS VARRAY(1000) OF VARCHAR2(4000);
CREATE OR REPLACE TYPE XS$NAME_LIST IS VARRAY(1000) OF VARCHAR2(261);

定数

次の定数は削除オプションを定義します。

DEFAULT_OPTION               CONSTANT PLS_INTEGER := 1;
CASCADE_OPTION               CONSTANT PLS_INTEGER := 2;
ALLOW_INCONSISTENCIES_OPTION CONSTANT PLS_INTEGER := 3;

次の定数はプリンシパルのタイプを定義します。

PTYPE_XS              CONSTANT PLS_INTEGER := 1;
PTYPE_DB              CONSTANT PLS_INTEGER := 2;
PTYPE_DN              CONSTANT PLS_INTEGER := 3;
PTYPE_EXTERNAL        CONSTANT PLS_INTEGER := 4;

XS_ADMIN_UTILサブプログラムの要約

表11-4 XS_ADMIN_UTILサブプログラムの要約

サブプログラム 簡単な説明

GRANT_SYSTEM_PRIVILEGEプロシージャ

ユーザーまたはロールにReal Application Securityシステム権限を付与します。

REVOKE_SYSTEM_PRIVILEGEプロシージャ

ユーザーまたはロールからReal Application Securityシステム権限を取り消します。

GRANT_SYSTEM_PRIVILEGEプロシージャ

GRANT_SYSTEM_PRIVILEGEプロシージャを使用して、ユーザーまたはロールにReal Application Securityセキュリティ・クラス権限を付与します。SYS権限を持つユーザーのみがこの操作を実行できます。

構文

XS_ADMIN_UTIL.GRANT_SYSTEM_PRIVILEGE (
  priv_name      IN VARCHAR2,
  user_name      IN VARCHAR2,
  user_type      IN  PLS_INTEGER := XS_ADMIN_UTIL.PTYPE_DB);

パラメータ

パラメータ 説明

priv_name

付与するReal Application Securityセキュリティ・クラス権限の名前を指定します。

user_name

Real Application Securityセキュリティ・クラス権限を付与するユーザーまたはロールの名前を指定します。

user_type

ユーザーのタイプ。デフォルトではデータベース・ユーザーです。

次の例では、データベース・ユーザーdbuser1を作成して、このデータベース・ユーザーにReal Application Security権限ADMINISTER_SESSIONを付与し、user_typeとしてデフォルトのXS_ADMIN_UTIL.PTYPE_DBを指定しますが、これはデフォルト値であるため指定は不要です。

SQL> CREATE USER dbuser1 identified by password;
SQL> EXEC SYS.XS_ADMIN_UTIL.GRANT_SYSTEM_PRIVILEGE('ADMINISTER_SESSION', 'dbuser1', XS_ADMIN_UTIL.PTYPE_DB);

次の例では、アプリケーション・ユーザーuser1を作成して、このアプリケーション・ユーザーにReal Application Security権限ADMINISTER_SESSIONを付与し、user_typeとしてデフォルトのXS_ADMIN_UTIL.PTYPE_XSを指定します。

SQL> EXEC SYS.XS_PRINCIPAL.CREATE_USER('user1','HR1');
SQL> EXEC SYS.XS_PRINCIPAL.SET_PASSWORD('user1', 'password');
SQL> EXEC SYS.XS_ADMIN_UTIL.GRANT_SYSTEM_PRIVILEGE('ADMINISTER_SESSION', 'user1', XS_ADMIN_UTIL.PTYPE_XS);

REVOKE_SYSTEM_PRIVILEGEプロシージャ

REVOKE_SYSTEM_PRIVILEGEを使用して、ユーザーまたはロールからReal Application Securityセキュリティ・クラス権限を取り消します。SYS権限を持つユーザーのみがこの操作を実行できます。

構文

XS_ADMIN_UTIL.REVOKE_SYSTEM_PRIVILEGE (
  priv_name      IN VARCHAR2,
  user_name      IN VARCHAR2,
  user_type      IN  PLS_INTEGER := XS_ADMIN_UTIL.PTYPE_DB);

パラメータ

パラメータ 説明

priv_name

取り消すReal Application Securityセキュリティ・クラス権限の名前を指定します。

user_name

Real Application Securityセキュリティ・クラス権限を取り消すユーザーまたはロールの名前を指定します。

user_type

ユーザーのタイプ。デフォルトではデータベース・ユーザーです。

次の例では、データベース・ユーザーdbuser1を作成して、このデータベース・ユーザーからReal Application Security権限ADMINISTER_SESSIONを取り消し、user_typeとしてデフォルトのXS_ADMIN_UTIL.PTYPE_DBを指定しますが、これはデフォルト値であるため指定は不要です。

CREATE USER dbuser1 identified by password;
SYS.XS_ADMIN_UTIL.REVOKE_SYSTEM_PRIVILEGE('ADMINISTER_SESSION','dbuser1', XS_ADMIN_UTIL.PTYPE_DB);

次の例では、アプリケーション・ユーザーuser1を作成して、このアプリケーション・ユーザーからReal Application Security権限ADMINISTER_SESSIONを取り消し、user_typeとしてデフォルトのXS_ADMIN_UTIL.PTYPE_XSを指定します。

SQL> EXEC SYS.XS_PRINCIPAL.CREATE_USER('user1','HR1');
SQL> EXEC SYS.XS_PRINCIPAL.SET_PASSWORD('user1', 'password');
SQL> EXEC SYS.XS_ADMIN_UTIL.REVOKE_SYSTEM_PRIVILEGE('ADMINISTER_SESSION','user1', XS_ADMIN_UTIL.PTYPE_XS);

XS_DATA_SECURITYパッケージ

XS_DATA_SECURITYパッケージには、データ・セキュリティ・ポリシー、関連データ・レルム制約、列制約およびACLパラメータを作成、管理、削除するためのプロシージャが含まれます。

オブジェクト・タイプ、コンストラクタ・ファンクション、シノニムおよび付与

このパッケージには、次のオブジェクト・タイプ、コンストラクタ・ファンクション、シノニムおよびGRANT文が定義されています。

-- Create a type for key
CREATE OR REPLACE TYPE XS$KEY_TYPE AS OBJECT (
primary_key      VARCHAR2(130),
foreign_key      VARCHAR2(4000),
-- Foreign key type; 1 = col name, 2 = col value
foreign_key_type NUMBER,
-- Constructor function
CONSTRUCTOR FUNCTION XS$KEY_TYPE
                     (primary_key      IN VARCHAR2,
                      foreign_key      IN VARCHAR2,
                      foreign_key_type IN NUMBER)
                      RETURN SELF AS RESULT,

MEMBER FUNCTION GET_PRIMARY_KEY RETURN VARCHAR2,
MEMBER FUNCTION GET_FOREIGN_KEY RETURN VARCHAR2,
MEMBER FUNCTION GET_FOREIGN_KEY_TYPE RETURN NUMBER,
);
CREATE OR REPLACE TYPE XS$KEY_LIST AS VARRAY(1000) OF XS$KEY_TYPE;
CREATE OR REPLACE TYPE XS$REALM_CONSTRAINT_TYPE AS OBJECT (
-- Member variables
realm_type    NUMBER,
-- Member evaluation rule 
realm              VARCHAR2(4000),
-- acl list of instance set
acl_list              XS$NAME_LIST,
-- isStatic variable for instance set. Stored as INTEGER. No boolean datatype 
-- for objects. False is stored as 0 and TRUE is stored as 1
is_static          INTEGER,
-- Indicate if the realm is parameterized.
parameterized      INTEGER,
-- parent schema name for inherited from
parent_schema      VARCHAR2(130),
-- parent object name for inherited from
parent_object      VARCHAR2(130),
-- keys for inherited from
key_list           XS$KEY_LIST,
-- when condition for inherited from
when_condition     VARCHAR2(4000),

-- Constructor function - row_level realm
CONSTRUCTOR FUNCTION XS$REALM_CONSTRAINT_TYPE
                     (realm                  IN VARCHAR2,
                      acl_list               IN XS$NAME_LIST,
                      is_static              IN BOOLEAN := FALSE)
                      RETURN SELF AS RESULT,
 
-- Constructor function - parameterized row_level realm
CONSTRUCTOR FUNCTION XS$REALM_CONSTRAINT_TYPE
                     (realm                  IN VARCHAR2,                      
                      is_static              IN BOOLEAN := FALSE)
                      RETURN SELF AS RESULT,
 
-- Constructor function - master realm
CONSTRUCTOR FUNCTION XS$REALM_CONSTRAINT_TYPE
                     (parent_schema  IN VARCHAR2,
                      parent_object  IN VARCHAR2,
                      key_list       IN XS$KEY_LIST,
                      when_condition IN VARCHAR2:= NULL)
                      RETURN SELF AS RESULT,
 
-- Accessor functions
MEMBER FUNCTION GET_TYPE RETURN NUMBER,
MEMBER FUNCTION GET_REALM RETURN VARCHAR2,
MEMBER FUNCTION GET_ACLS RETURN XS$NAME_LIST,
MEMBER FUNCTION IS_DYNAMIC_REALM RETURN BOOLEAN,
MEMBER FUNCTION IS_STATIC_REALM RETURN BOOLEAN,
MEMBER FUNCTION IS_PARAMETERIZED_REALM RETURN BOOLEAN,
MEMBER FUNCTION GET_KEYS RETURN XS$KEY_LIST,
MEMBER FUNCTION GET_PARENT_SCHEMA RETURN VARCHAR2,
MEMBER FUNCTION GET_PARENT_OBJECT RETURN VARCHAR2,
MEMBER FUNCTION GET_WHEN_CONDITION RETURN VARCHAR2,
MEMBER PROCEDURE SET_REALM(realm IN VARCHAR2),
MEMBER PROCEDURE ADD_ACLS(acl      IN VARCHAR2),
MEMBER PROCEDURE ADD_ACLS(acl_list IN XS$NAME_LIST),
MEMBER PROCEDURE SET_ACLS(acl_list IN XS$NAME_LIST),
MEMBER PROCEDURE SET_DYNAMIC,
MEMBER PROCEDURE SET_STATIC,
MEMBER PROCEDURE ADD_KEYS(key IN XS$KEY_TYPE),
MEMBER PROCEDURE ADD_KEYS(key_list IN XS$KEY_LIST),
MEMBER PROCEDURE SET_KEYS(key_list IN XS$KEY_LIST),
MEMBER PROCEDURE SET_PARENT_SCHEMA(parent_schema IN VARCHAR2),
MEMBER PROCEDURE SET_PARENT_OBJECT(parent_object IN VARCHAR2),
MEMBER PROCEDURE SET_WHEN_CONDITION(when_condition IN VARCHAR2)
);
-- Create a list of realm constraint type
CREATE OR REPLACE TYPE XS$REALM_CONSTRAINT_LIST AS VARRAY(1000)
                       OF XS$REALM_CONSTRAINT_TYPE;
-- Create a type for column(attribute) security
CREATE OR REPLACE TYPE XS$COLUMN_CONSTRAINT_TYPE AS OBJECT (
-- column list
column_list        XS$LIST,
-- privilege for column security
privilege          VARCHAR2(261),
-- Constructor function
CONSTRUCTOR FUNCTION XS$COLUMN_CONSTRAINT_TYPE
                     (column_list  IN XS$LIST,
                      privilege    IN VARCHAR2)
                      return SELF AS RESULT,
MEMBER FUNCTION GET_COLUMNS RETURN XS$LIST,
MEMBER FUNCTION GET_PRIVILEGE RETURN VARCHAR2,
MEMBER PROCEDURE ADD_COLUMNS(column IN VARCHAR2),
MEMBER PROCEDURE ADD_COLUMNS(column_list IN XS$LIST),
MEMBER PROCEDURE SET_COLUMNS(column_list IN XS$LIST),
MEMBER PROCEDURE SET_PRIVILEGE(privilege IN VARCHAR2)
);
-- Create a list of column constraint for column security
CREATE OR REPLACE TYPE XS$COLUMN_CONSTRAINT_LIST
                       IS VARRAY(1000) of XS$COLUMN_CONSTRAINT_TYPE;

セキュリティ・モデル

XS_DATA_SECURITYパッケージは、SYSスキーマに作成されます。すべてのスキーマのACL、セキュリティ・クラス、セキュリティ・ポリシーなどのスキーマ・オブジェクトを管理できるADMIN_ANY_SEC_POLICYDBAロールに付与されます。また、ADMIN_ANY_SEC_POLICYを付与されているユーザーは、ENABLE_OBJECT_POLICYDISABLE_OBJECT_POLICYAPPLY_OBJECT_POLICYおよびREMOVE_OBJECT_POLICYプロシージャをコールできます。

ユーザーは、スキーマに対するRESOURCEロールを付与されている場合に、自身のスキーマ内のスキーマ・オブジェクトを管理できます。RESOURCEロールおよびXS_RESOURCEアプリケーション・ロールには、スキーマ内のスキーマ・オブジェクトの管理に必要なADMIN_SEC_POLICY権限が含まれます。

XS_DATA_SECURITYサブプログラムの要約

表11-5 XS_DATA_SECURITYサブプログラムの要約

サブプログラム 簡単な説明

CREATE_POLICYプロシージャ

新規データ・セキュリティ・ポリシーを作成します。

APPEND_REALM_CONSTRAINTSプロシージャ

1つ以上のデータ・レルム制約を既存のデータ・セキュリティ・ポリシーに追加します。

REMOVE_REALM_CONSTRAINTSプロシージャ

指定されたデータ・セキュリティ・ポリシーのすべてのデータ・レルム制約を削除します。

ADD_COLUMN_CONSTRAINTSプロシージャ

1つ以上の列制約を指定されたデータ・セキュリティ・ポリシーに追加します。

REMOVE_COLUMN_CONSTRAINTSプロシージャ

データ・セキュリティ・ポリシーからすべての列制約を削除します。

CREATE_ACL_PARAMETERプロシージャ

指定されたデータ・セキュリティ・ポリシーのACLパラメータを作成します。

DELETE_ACL_PARAMETERプロシージャ

指定されたデータ・セキュリティ・ポリシーからACLパラメータを削除します。

SET_DESCRIPTIONプロシージャ

指定されたデータ・セキュリティ・ポリシーの説明文字列を設定します。

DELETE_POLICYプロシージャ

データ・セキュリティ・ポリシーを削除します。

表11-6 表またはビューでデータ・セキュリティ・ポリシーを管理するためのXS_DATA_SECURITYサブプログラムの要約

サブプログラム 簡単な説明

ENABLE_OBJECT_POLICYプロシージャ

指定された表またはビューのデータ・セキュリティ・ポリシーを有効にします。

DISABLE_OBJECT_POLICYプロシージャ

指定された表またはビューのデータ・セキュリティ・ポリシーを無効にします。

REMOVE_OBJECT_POLICYプロシージャ

指定された表またはビューを削除せずに、そこからデータ・セキュリティを削除します。

APPLY_OBJECT_POLICYプロシージャ

指定された表またはビューのデータ・セキュリティ・ポリシーを有効または再度有効にします。

CREATE_POLICYプロシージャ

CREATE_POLICYプロシージャは、新規データ・セキュリティ・ポリシーを作成します。

構文

XS_DATA_SECURITY.CREATE_POLICY ( 
  name                   IN VARCHAR2,
  realm_constraint_list  IN XS$REALM_CONSTRAINT_LIST,
  column_constraint_list IN XS$COLUMN_CONSTRAINT_LIST := NULL,
  description            IN VARCHAR2 :=NULL) ;

パラメータ

パラメータ 説明

name

作成するデータ・セキュリティ・ポリシーの名前。

名前は、SCOTT.POLICY1のようにスキーマで修飾されます。名前のスキーマ部分がない場合は、現在のセッション・スキーマが想定されます。たとえば、この同じ例では、名前がPOLICY1として指定され、現在のスキーマがSCOTTの場合に、SCOTT.POLICY1に解決されます。

realm_constraint_list

データ・セキュリティ・ポリシーによって保護される行を決定するデータ・レルム制約のリスト。

column_constraint_list

これはオプションです。保護する属性と権限のリスト。

description

データ・セキュリティ・ポリシーのオプションの説明。

次の例は、USER1.EMPLOYEES_DSというデータ・セキュリティ・ポリシーを作成します。データ・レルム制約を使用して、部門番号60および100に関連するデータを保護します。また、SALARY列(属性)へのアクセスは列制約を使用して制限されます。

DECLARE
  realm_cons XS$REALM_CONSTRAINT_LIST;      
  column_cons XS$COLUMN_CONSTRAINT_LIST;
BEGIN  
  realm_cons := 
    XS$REALM_CONSTRAINT_LIST(
      XS$REALM_CONSTRAINT_TYPE(realm=> 'DEPARTMENT_ID in (60, 100)',
                               acl_list=> XS$NAME_LIST('HRACL')));
  
  column_cons := 
    XS$COLUMN_CONSTRAINT_LIST(
      XS$COLUMN_CONSTRAINT_TYPE(column_list=> XS$LIST('SALARY'),
                            privilege=> 'VIEW_SENSITIVE_INFO'));
 
  SYS.XS_DATA_SECURITY.CREATE_POLICY(
          name=>'USER1.EMPLOYEES_DS',
          realm_constraint_list=>realm_cons,
          column_constraint_list=>column_cons);
END;

APPEND_REALM_CONSTRAINTSプロシージャ

APPEND_REALM_CONSTRAINTSプロシージャは、1つ以上のデータ・レルム制約を既存のデータ・セキュリティ・ポリシーに追加します。

構文

XS_DATA_SECURITY.APPEND_REALM_CONSTRAINTS (
  policy           IN VARCHAR2,
  realm_constraint IN XS$REALM_CONSTRAINT_TYPE);

XS_DATA_SECURITY.APPEND_REALM_CONSTRAINTS (
  policy                IN VARCHAR2,
  realm_constraint_list IN XS$REALM_CONSTRAINT_LIST);

パラメータ

パラメータ 説明

policy

データ・レルム制約を追加するデータ・セキュリティ・ポリシーの名前。

名前は、SCOTT.POLICY1のようにスキーマで修飾されます。名前のスキーマ部分がない場合は、現在のセッション・スキーマが想定されます。たとえば、この同じ例では、名前がPOLICY1として指定され、現在のスキーマがSCOTTの場合に、SCOTT.POLICY1に解決されます。

realm_constraint

データ・セキュリティ・ポリシーに追加するデータ・レルム制約。

realm_constraint_list

データ・セキュリティ・ポリシーに追加するデータ・レルム制約のリスト。

次の例は、新規データ・レルム制約をEMPLOYEES_DSデータ・セキュリティ・ポリシーに追加します。

DECLARE
  realm_cons XS$REALM_CONSTRAINT_TYPE;      
BEGIN  
  realm_cons := 
      XS$REALM_CONSTRAINT_TYPE(realm=> 'DEPARTMENT_ID in (40, 50)',
                               acl_list=> XS$NAME_LIST('HRACL'));
 
  SYS.XS_DATA_SECURITY.APPEND_REALM_CONSTRAINTS(
          policy=>'EMPLOYEES_DS',
          realm_constraint=>realm_cons);
END;

REMOVE_REALM_CONSTRAINTSプロシージャ

REMOVE_REALM_CONSTRAINTSプロシージャは、データ・セキュリティ・ポリシーからすべてのデータ・レルム制約を削除します。

構文

XS_DATA_SECURITY.REMOVE_REALM_CONSTRAINTS (
  policy IN VARCHAR2);

パラメータ

パラメータ 説明

policy

データ・レルム制約を削除するデータ・セキュリティ・ポリシーの名前。

名前は、SCOTT.POLICY1のようにスキーマで修飾されます。名前のスキーマ部分がない場合は、現在のセッション・スキーマが想定されます。たとえば、この同じ例では、名前がPOLICY1として指定され、現在のスキーマがSCOTTの場合に、SCOTT.POLICY1に解決されます。

次の例は、EMPLOYEES_DSデータ・セキュリティ・ポリシーからすべてのデータ・レルム制約を削除します。

BEGIN 
  SYS.XS_DATA_SECURITY.REMOVE_REALM_CONSTRAINTS('EMPLOYEES_DS');
END; 

ADD_COLUMN_CONSTRAINTSプロシージャ

ADD_COLUMN_CONSTRAINTSプロシージャは、1つ以上の列制約をデータ・セキュリティ・ポリシーに追加します。

構文

XS_DATA_SECURITY.ADD_COLUMN_CONSTRAINTS (
  policy            IN VARCHAR2,
  column_constraint IN XS$COLUMN_CONSTRAINT_TYPE);

XS_DATA_SECURITY.ADD_COLUMN_CONSTRAINTS (
  policy                 IN VARCHAR2,
  column_constraint_list IN XS$COLUMN_CONSTRAINT_LIST);

パラメータ

パラメータ 説明

policy

属性制約を追加するデータ・セキュリティ・ポリシーの名前。

名前は、SCOTT.POLICY1のようにスキーマで修飾されます。名前のスキーマ部分がない場合は、現在のセッション・スキーマが想定されます。たとえば、この同じ例では、名前がPOLICY1として指定され、現在のスキーマがSCOTTの場合に、SCOTT.POLICY1に解決されます。

column_constraint

追加する列制約。

column_constraint_list

追加する列制約のリスト。

次の例は、COMMISSION_PCT列に対する列制約をEMPLOYEES_DSデータ・セキュリティ・ポリシーに追加します。

DECLARE
  column_cons XS$COLUMN_CONSTRAINT_TYPE;
BEGIN  
  column_cons := 
      XS$COLUMN_CONSTRAINT_TYPE(column_list=> XS$LIST('COMMISSION_PCT'),
                            privilege=> 'VIEW_SENSITIVE_INFO');
 
  SYS.XS_DATA_SECURITY.ADD_COLUMN_CONSTRAINTS(
          policy=>'EMPLOYEES_DS',
          column_constraint=>column_cons);
END;

REMOVE_COLUMN_CONSTRAINTSプロシージャ

REMOVE_COLUMN_CONSTRAINTSプロシージャは、データ・セキュリティ・ポリシーからすべての列制約を削除します。

構文

XS_DATA_SECURITY.REMOVE_COLUMN_CONSTRAINTS (
  policy IN VARCHAR2,);

パラメータ

パラメータ 説明

policy

列制約を削除するデータ・セキュリティ・ポリシーの名前。

名前は、SCOTT.POLICY1のようにスキーマで修飾されます。名前のスキーマ部分がない場合は、現在のセッション・スキーマが想定されます。たとえば、この同じ例では、名前がPOLICY1として指定され、現在のスキーマがSCOTTの場合に、SCOTT.POLICY1に解決されます。

次の例は、EMPLOYEES_DSデータ・セキュリティ・ポリシーからすべての列制約を削除します。

BEGIN 
  SYS.XS_DATA_SECURITY.REMOVE_COLUMN_CONSTRAINTS('EMPLOYEES_DS');
END; 

CREATE_ACL_PARAMETERプロシージャ

CREATE_ACL_PARAMETERプロシージャは、データ・セキュリティ・ポリシーのACLパラメータを作成します。

構文

XS_DATA_SECURITY.CREATE_ACL_PARAMETER (
  policy     IN VARCHAR2,
  parameter  IN VARCHAR2,
  param_type IN NUMBER);

パラメータ

パラメータ 説明

policy

ACLパラメータを作成する必要のあるデータ・セキュリティ・ポリシーの名前。

名前は、SCOTT.POLICY1のようにスキーマで修飾されます。名前のスキーマ部分がない場合は、現在のセッション・スキーマが想定されます。たとえば、この同じ例では、名前がPOLICY1として指定され、現在のスキーマがSCOTTの場合に、SCOTT.POLICY1に解決されます。

parameter

作成するACLパラメータの名前。

param_type

パラメータのデータ型。これは1 (NUMBER)または2 (VARCHAR)です。

次の例は、DEPT_POLICYというACLパラメータをEMPLOYEES_DSデータ・セキュリティ・ポリシーに対して作成します。

BEGIN 
  SYS.XS_DATA_SECURITY.CREATE_ACL_PARAMETER('EMPLOYEES_DS','DEPT_POLICY',1);
END; 

DELETE_ACL_PARAMETERプロシージャ

DELETE_ACL_PARAMETERプロシージャは、データ・セキュリティ・ポリシーのACLパラメータを削除します。

構文

XS_DATA_SECURITY.DELETE_ACL_PARAMETER (
  policy                IN VARCHAR2,
  parameter             IN VARCHAR2,
  delete_option         IN PLS_INTEGER := XS_ADMIN_UTIL.DEFAULT_OPTION);

パラメータ

パラメータ 説明

policy

ACLパラメータを削除するデータ・セキュリティ・ポリシーの名前。

名前は、SCOTT.POLICY1のようにスキーマで修飾されます。名前のスキーマ部分がない場合は、現在のセッション・スキーマが想定されます。たとえば、この同じ例では、名前がPOLICY1として指定され、現在のスキーマがSCOTTの場合に、SCOTT.POLICY1に解決されます。

parameter

削除するACLパラメータの名前。

delete_option

使用する削除オプション。次のオプションがあります。

  • DEFAULT_OPTION (default):

    デフォルト・オプションでは、他で参照されていない場合にのみACLパラメータを削除できます。ACLパラメータを参照する他のエンティティがある場合は、ACLパラメータを削除できません。

  • CASCADE_OPTION:

    カスケード・オプションは、ACLパラメータをそれに対する参照とともに削除します。セキュリティ・クラスを削除するユーザーには、これらの参照を削除する権限も必要です。

  • ALLOW_INCONSISTENCIES_OPTION:

    不整合の許可オプションでは、他のエンティティからエンティティへの遅延バインド参照がある場合でもそのエンティティを削除できます。エンティティが前の依存性の一部である場合は、削除が失敗し、エラーが生成されます。

次の例は、デフォルト・オプションを使用してDEPT_POLICY ACLパラメータをEMPLOYEES_DSデータ・セキュリティ・ポリシーから削除します。

BEGIN
  SYS.XS_DATA_SECURITY.DELETE_ACL_PARAMETER('EMPLOYEES_DS','DEPT_POLICY',
                                            XS_ADMIN_UTIL.DEFAULT_OPTION);
END; 

SET_DESCRIPTIONプロシージャ

SET_DESCRPTIONプロシージャは、指定されたデータ・セキュリティ・ポリシーの説明文字列を設定します。

構文

XS_DATA_SECURITY.SET_DESCRIPTION (
  policy         IN VARCHAR2,
  description    IN VARCHAR2);

パラメータ

パラメータ 説明

policy

説明を設定するデータ・セキュリティ・ポリシーの名前。

名前は、SCOTT.POLICY1のようにスキーマで修飾されます。名前のスキーマ部分がない場合は、現在のセッション・スキーマが想定されます。たとえば、この同じ例では、名前がPOLICY1として指定され、現在のスキーマがSCOTTの場合に、SCOTT.POLICY1に解決されます。

description

指定されたデータ・セキュリティ・ポリシーの説明文字列。

次の例は、EMPLOYEES_DSデータ・セキュリティ・ポリシーの説明文字列を設定します。

BEGIN 
  SYS.XS_DATA_SECURITY.SET_DESCRIPTION('EMPLOYEES_DS',
                                       'Data Security Policy for HR.EMPLOYEES');
END; 

DELETE_POLICYプロシージャ

DELETE_POLICYプロシージャは、データ・セキュリティ・ポリシーを削除します。

構文

XS_DATA_SECURITY.DELETE_POLICY( 
  policy        IN VARCHAR2,
  delete_option IN PLS_INTEGER := XS_ADMIN_UTIL.DEFAULT_OPTION); 

パラメータ

パラメータ 説明

policy

削除するデータ・セキュリティ・ポリシーの名前。

名前は、SCOTT.POLICY1のようにスキーマで修飾されます。名前のスキーマ部分がない場合は、現在のセッション・スキーマが想定されます。たとえば、この同じ例では、名前がPOLICY1として指定され、現在のスキーマがSCOTTの場合に、SCOTT.POLICY1に解決されます。

delete_option

使用する削除オプション。セキュリティ・ポリシーに対して、次のオプションの動作は同じです。

  • DEFAULT_OPTION:

    デフォルト・オプションでは、他で参照されていない場合にのみデータ・セキュリティ・ポリシーを削除できます。データ・セキュリティ・ポリシーを参照する他のエンティティがある場合は、データ・セキュリティ・ポリシーを削除できません。

  • CASCADE_OPTION:

    カスケード・オプションは、データ・セキュリティ・ポリシーをそれに対する参照とともに削除します。データ・セキュリティ・ポリシーを削除するユーザーは、これらの参照も削除します。

  • ALLOW_INCONSISTENCIES_OPTION:

    不整合の許可オプションでは、他のエンティティからエンティティへの遅延バインド参照がある場合でもそのエンティティを削除できます。エンティティが前の依存性の一部である場合は、削除が失敗し、エラーが生成されます。

次の例は、デフォルト・オプションを使用してEMPLOYEES_DSデータ・セキュリティ・ポリシーを削除します。

BEGIN
  SYS.XS_DATA_SECURITY.DELETE_POLICY('EMPLOYEES_DS',
                                        XS_ADMIN_UTIL.DEFAULT_OPTION); 
END;

ENABLE_OBJECT_POLICYプロシージャ

ENABLE_OBJECT_POLICYプロシージャは、指定された表またはビューのデータ・セキュリティ・ポリシーを有効にします。ENABLE_OBJECT_POLICYは、表またはビューに対してACLベースの行レベル・データ・セキュリティ・ポリシーを有効にします。

影響する表に対してインポートまたはエクスポートを実行した後で、またはデバッグの目的で、データ・セキュリティ・ポリシーを有効にすることが必要な場合があります。

現在のユーザーが使用可能な表またはビューのデータ・セキュリティ・ポリシーのステータスを調べるには、DBA_XS_APPLIED_POLICIESデータ・ディクショナリ・ビューを問い合せます。

構文

XS_DATA_SECURITY.ENABLE_OBJECT_POLICY (
 policy  IN VARCHAR2,
 schema  IN VARCHAR2,
 object  IN VARCHAR2);

パラメータ

パラメータ 説明

policy

有効にするデータ・セキュリティ・ポリシーの名前。

名前は、SCOTT.POLICY1のようにスキーマで修飾されます。名前のスキーマ部分がない場合は、現在のセッション・スキーマが想定されます。たとえば、この同じ例では、名前がPOLICY1として指定され、現在のスキーマがSCOTTの場合に、SCOTT.POLICY1に解決されます。

schema

有効にする表またはビューを含むスキーマの名前。

object

データ・セキュリティ・ポリシーを有効にする表またはビューの名前。

次の例は、salesスキーマのproducts表に対してXDSを有効にします。

BEGIN
  SYS.XS_DATA_SECURITY.ENABLE_OBJECT_POLICY(policy =>'CUST_DS', schema=>'sales', object=>'products');
END;

DISABLE_OBJECT_POLICYプロシージャ

DISABLE_OBJECT_POLICYプロシージャは、指定された表またはビューのデータ・セキュリティ・ポリシーを無効にします。DISABLE_OBJECT_POLICYは、表またはビューに対してACLベースの行レベル・データ・セキュリティ・ポリシーを無効にします。

影響する表に対してインポートまたはエクスポートを実行する場合、またはデバッグの目的で、Real Application Securityを無効にすることが必要な場合があります。

現在のユーザーが使用可能な表またはビューのデータ・セキュリティ・ポリシーのステータスを調べるには、DBA_XS_APPLIED_POLICIESデータ・ディクショナリ・ビューを問い合せます。

構文

XS_DATA_SECURITY.DISABLE_OBJECT_POLICY (
 policy  IN VARCHAR2,
 schema  IN VARCHAR2,
 object  IN VARCHAR2);

パラメータ

パラメータ 説明

policy

無効にするデータ・セキュリティ・ポリシーの名前。

名前は、SCOTT.POLICY1のようにスキーマで修飾されます。名前のスキーマ部分がない場合は、現在のセッション・スキーマが想定されます。たとえば、この同じ例では、名前がPOLICY1として指定され、現在のスキーマがSCOTTの場合に、SCOTT.POLICY1に解決されます。

schema

無効にする表またはビューを含むスキーマの名前。

object

データ・セキュリティ・ポリシーを無効にする表またはビューの名前。

次の例は、salesスキーマのproducts表に対してXDSを無効にします。

BEGIN
  SYS.XS_DATA_SECURITY.DISABLE_OBJECT_POLICY(policy =>'CUST_DS', schema=>'sales', object=>'products');
END;

REMOVE_OBJECT_POLICYプロシージャ

REMOVE_OBJECT_POLICYプロシージャは、指定された表またはビューを削除せずに、そこからデータ・セキュリティ・ポリシーを削除します。REMOVE_OBJECT_POLICYは、静的データ・レルム制約でENABLE_XDSによって作成されたACLマテリアライズド・ビューを削除します。

現在のユーザーが使用可能な表またはビューのデータ・セキュリティ・ポリシーのステータスを調べるには、DBA_XS_APPLIED_POLICIESデータ・ディクショナリ・ビューを問い合せます。

構文

XS_DATA_SECURITY.REMOVE_OBJECT_POLICY (
 policy  IN VARCHAR2,
 schema  IN VARCHAR2,
 object  IN VARCHAR2);

パラメータ

パラメータ 説明

policy

削除するデータ・セキュリティ・ポリシーの名前。

名前は、SCOTT.POLICY1のようにスキーマで修飾されます。名前のスキーマ部分がない場合は、現在のセッション・スキーマが想定されます。たとえば、この同じ例では、名前がPOLICY1として指定され、現在のスキーマがSCOTTの場合に、SCOTT.POLICY1に解決されます。

schema

データ・セキュリティ・ポリシーを削除する表またはビューを含むスキーマの名前。

object

データ・セキュリティ・ポリシーを削除する表またはビューの名前

次の例は、salesスキーマのproducts表からCUST_DSデータ・セキュリティ・ポリシーを削除します。

BEGIN 
  SYS.XS_DATA_SECURITY.REMOVE_OBJECT_POLICY(policy=>'CUST_DS', schema=>'sales', object=>'products');
END;

APPLY_OBJECT_POLICYプロシージャ

APPLY_OBJECT_POLICYプロシージャは、指定されたデータベース表またはビューのデータ・セキュリティ・ポリシーを有効または再度有効にします。

現在のユーザーが使用可能な表またはビューのデータ・セキュリティ・ポリシーのステータスを調べるには、DBA_XS_APPLIED_POLICIESデータ・ディクショナリ・ビューを問い合せます。

構文

XS_DATA_SECURITY.APPLY_OBJECT_POLICY (
 policy          IN VARCHAR2,
 schema          IN VARCHAR2, 
 object          IN VARCHAR2, 
 row_acl         IN BOOLEAN DEFAULT FALSE,
 owner_bypass    IN BOOLEAN DEFAULT FALSE,
 statement_types IN VARCHAR2 DEFAULT NULL,
 aclmv           IN VARCHAR2 DEFAULT NULL );

パラメータ

パラメータ 説明

policy

有効にするデータ・セキュリティ・ポリシーの名前。

名前は、SCOTT.POLICY1のようにスキーマで修飾されます。名前のスキーマ部分がない場合は、現在のセッション・スキーマが想定されます。たとえば、この同じ例では、名前がPOLICY1として指定され、現在のスキーマがSCOTTの場合に、SCOTT.POLICY1に解決されます。

schema

有効または再度有効にするリレーショナル表またはビューを含むスキーマの名前。

object

データ・セキュリティ・ポリシーを有効または再度有効にするリレーショナル表またはビューの名前。

row_acl

デフォルトはFALSEです。TRUEに設定されている場合は、非表示の列SYS_ACLODを作成します。

owner_bypass

オブジェクトの所有者はデータ・セキュリティ・ポリシーをバイパスできます。デフォルトはFALSEです。

statement_types

タイプは、SELECTINSERTUPDATEDELETEおよびINDEXです。

アプリケーション・セキュリティにより、表の行を更新する必要があり、同じ表の特定の列への読取りアクセスも制限される場合は、2つのAPPLY_OBJECT_POLICYプロシージャを使用して各データ・セキュリティ・ポリシーを施行し、各ポリシーを正確に施行する必要があります。たとえば、一方のAPPLY_OBJECT_POLICYプロシージャでは表の行を更新するために必要なDML statement_typesを施行し(INSERTUPDATEDELETEなど)、他方のAPPLY_OBJECT_POLICYプロシージャでは列制約のためにSELECTstatement_typesのみを施行します。

aclmv

静的ACL情報をメンテナンスするユーザー提供のMV名を指定します。MVには、TABLEROWIDACLIDLISTの2つの列があります。aclmvのデフォルト値はNULLです。

次の例は、HRスキーマのEMP表に対してDEPT_POLICYデータ・セキュリティ・ポリシーを有効にします。

BEGIN
  sys.xs_data_security.apply_object_policy(
           policy => 'HR.EMPLOYEES_DS',
           schema => 'HR',
           object => 'EMPLOYEES',
           statement_types => 'SELECT',
           owner_bypass => true);
END;

XS_DATA_SECURITY_UTILパッケージ

XS_DATA_SECURITY_UTILパッケージは、ユーザー表への静的ACLの自動リフレッシュをスケジュール、およびACLリフレッシュ・モードをコミット時またはオンデマンド・リフレッシュに変更するユーティリティ・パッケージです。

セキュリティ・モデル

XS_DATA_SECURITY_UTILパッケージは、SYSスキーマに作成されます。このパッケージに含まれるプログラムを実行するには、パッケージに対するEXECUTE権限が必要です。

定数

次の値はACLMVリフレッシュ・モードに対して有効です。

ACLMV_ON_DEMAND  CONSTANT VARCHAR2(9) := 'ON DEMAND';
ACLMV_ON_COMMIT  CONSTANT VARCHAR2(9) := 'ON COMMIT';

静的ACLMVに対するリフレッシュのタイプは次のとおりです。

XS_ON_COMMIT_MV  CONSTANT BINARY_INTEGER := 0;
XS_ON_DEMAND_MV  CONSTANT BINARY_INTEGER := 1;
XS_SCHEDULED_MV  CONSTANT BINARY_INTEGER := 2;

静的ACLMVのタイプは次のとおりです。

XS_SYSTEM_GENERATED_MV  CONSTANT BINARY_INTEGER := 0;
XS_USER_SPECIFIED_MV    CONSTANT BINARY_INTEGER := 1;

XS_DATA_SECURITY_UTILサブプログラムの要約

表11-7 XS_DATA_SECURITY_UTILサブプログラムの要約

サブプログラム 簡単な説明

SCHEDULE_STATIC_ACL_REFRESHプロシージャ

ユーザー表に対する静的ACLの自動リフレッシュをスケジュールします

ALTER_STATIC_ACL_REFRESHプロシージャ

ACLリフレッシュ・モードをコミット時またはオンデマンド・リフレッシュに変更します。

SCHEDULE_STATIC_ACL_REFRESHプロシージャ

SCHEDULE_STATIC_ACL_REFRESHプロシージャを使用して、ユーザー表に対する静的ACLの自動リフレッシュを起動またはスケジュールします。start_dateおよびrepeat_intervalパラメータにNULL値が渡された場合は、リフレッシュを即時に開始できます。

現在のユーザーが使用可能な表またはビューに対して実行されたすべての最新のACLリフレッシュ・ジョブのステータスを調べるには、ALL_XDS_LATEST_ACL_REFSTATDBA_XDS_LATEST_ACL_REFSTATおよびUSER_XDS_LATEST_ACL_REFSTATデータ・ディクショナリ・ビューを問い合せます。すべての静的ACLリフレッシュ・ジョブ・ステータス履歴は、ALL_XDS_ACL_REFSTATDBA_XDS_ACL_REFSTATおよびUSER_XDS_ACL_REFSTATデータ・ディクショナリ・ビューにあります。

構文

XS_DATA_SECURITY_UTIL.SCHEDULE_STATIC_ACL_REFRESH (
  schema_name      IN VARCHAR2 DEFAULT NULL,
  table_name       IN VARCHAR2,
  start_date       IN TIMESTAMP WITH TIME ZONE DEFAULT NULL,
  repeat_interval  IN VARCHAR2 DEFAULT NULL,
  comments         IN VARCHAR2 DEFAULT NULL );

パラメータ

パラメータ 説明

schema_name

表が属するスキーマの名前を指定します。

table_name

静的ACLリフレッシュに対して表を一意に識別するために前述のスキーマ名とともに使用される表名。

start_date

この属性は、このリフレッシュの実行がスケジュールされている最初の日付を指定します。ファンクションが繰り返し呼び出される場合は、最後に指定されたstart_daterepeat_intervalがジョブのスケジュールに使用されます。即時コール、コミット時またはリフレッシュ・ジョブによって実行されたACLリフレッシュの各実行結果がXDS_ACL_REFSTATに追加されます。

start_dateおよびrepeat_intervalNULLのままの場合は、リフレッシュが即時に起動され、既存のリフレッシュ・スケジュールが消去されます。即時リフレッシュでは、リフレッシュ・モードを変更しないため、行はXDS_ACL_REFRESHに追加されません。

repeat_interval

リフレッシュを繰り返す間隔を指定します。反復間隔は、DBMS_SCHEDULERパッケージのカレンダ構文またはPL/SQL式を使用して指定できます。カレンダ構文の使用の詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。

指定された式を評価して、リフレッシュの次回実行時を決定します。repeat_intervalを指定しない場合、ジョブは、指定した開始日に1回のみ実行されます。

start_dateおよびrepeat_intervalを使用し、end_dateをデフォルトのNULLにしたDBMS_SCHEDULERパッケージを使用してリフレッシュ・ジョブを作成します。

Comments

ジョブのコメントを指定します。デフォルトでは、この属性はNULLです

SYS.XS_DATA_SECURITY_UTIL.SCHEDULE_STATIC_ACL_REFRESH('aclmvuser', 'sales', SYSTIMESTAMP, 'freq=hourly; interval=2');

ALTER_STATIC_ACL_REFRESHプロシージャ

ALTER_STATIC_ACL_REFRESHプロシージャを使用して、ACLリフレッシュ・モードをコミット時またはオンデマンド・リフレッシュに変更します。

構文

XS_DATA_SECURITY_UTIL.ALTER_STATIC_ACL_REFRESH (
  schema_name      IN VARCHAR2 DEFAULT NULL,
  table_name       IN VARCHAR2,
  refresh_mode     IN VARCHAR2);

パラメータ

パラメータ 説明

schema_name

表が属するスキーマの名前を指定します。

table_name

静的ACLリフレッシュ・モードを変更する表を一意に識別するためにスキーマ名とともに使用される表名。

refresh_mode

ON COMMITまたはON DEMAND

SYS.XS_DATA_SECURITY_UTIL.ALTER_STATIC_ACL_REFRESH('aclmvuser','sales', refresh_mode=>'ON COMMIT');

XS_DIAGパッケージ

XS_DIAGパッケージには、プリンシパル、セキュリティ・クラス、ACL、データ・セキュリティ・ポリシー、ネームスペースおよびワークスペース内のすべてのオブジェクトのデータ・セキュリティの潜在的な問題を診断するサブプログラムが含まれます。すべてのサブプログラムは、オブジェクトが有効な場合にTRUEを戻し、それ以外の場合にそれぞれFALSEを戻します。識別された各不整合について、error_limitパラメータで指定した不整合の最大数に達するまで、行がXS$VALIDATION_TABLE検証表に挿入されます。ユーザーは、この検証表を問い合せて、メッセージ・コード、エラーの説明、無効なオブジェクトに通じるパス、不整合の性質を識別するのに役立つ可能性のあるその他の有用な情報などの情報について識別された不整合を判断できます。

セキュリティ・モデル

XS_DIAGパッケージは、SYSスキーマに作成されます。コール元には、このパッケージに対する実行者の権限があり、XS_DIAGパッケージを実行するにはADMIN_ANY_SEC_POLICYシステム権限が必要です。XS_DIAGパッケージに対するEXECUTE権限がPUBLICに付与されます。XS$VALIDATION_TABLE検証表に対するSELECT権限がPUBLICに付与されます。

XS_DIAGサブプログラムの要約

表11-8 XS_DIAGサブプログラムの要約

サブプログラム 説明

VALIDATE_PRINCIPALファンクション

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

VALIDATE_SECURITY_CLASSファンクション

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

VALIDATE_ACLファンクション

ACLを検証します。

VALIDATE_DATA_SECURITYファンクション

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

VALIDATE_NAMESPACE_TEMPLATEファンクション

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

VALIDATE_WORKSPACEファンクション

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

VALIDATE_PRINCIPALファンクション

VALIDATE_PRINCIPALファンクションは、プリンシパルを検証します。このファンクションは、オブジェクトが有効な場合にTRUEを戻し、それ以外の場合にFALSEを戻します。識別された各不整合について、格納できる不整合の最大数に達するまで、行がXS$VALIDATION_TABLE検証表に挿入されます。ユーザーは、検証失敗の原因を調べるために検証表を問い合せる必要があります。

構文

validate_principal(name         IN VARCHAR2, 
                   error_limit  IN PLS_INTEGER := 1) 
   RETURN BOOLEAN;

パラメータ

パラメータ 説明

name

検証するオブジェクトの名前。

error_limit

検証表に格納できる不整合の最大数。

プリンシパル、ユーザーuser1を検証してから、不整合がある場合に検証表を問い合せます。

begin
  if sys.xs_diag.validate_principal('user1', 100) then
    dbms_output.put_line('The user is valid.');
  else
    dbms_output.put_line('The user is invalid.');
  end if;
end;
/
select * from xs$validation_table;

プリンシパル、ロールrole1を検証してから、不整合がある場合に検証表を問い合せます。

begin
  if sys.xs_diag.validate_principal('role1', 100) then
    dbms_output.put_line('The role is valid.');
  else
    dbms_output.put_line('The role is invalid.');
  end if;
end;
/
select * from xs$validation_table;

VALIDATE_SECURITY_CLASSファンクション

VALIDATE_SECURITY_CLASSファンクションは、セキュリティ・クラスを検証します。このファンクションは、オブジェクトが有効な場合にTRUEを戻し、それ以外の場合にFALSEを戻します。識別された各不整合について、格納できる不整合の最大数に達するまで、行がXS$VALIDATION_TABLE検証表に挿入されます。ユーザーは、検証失敗の原因を調べるために検証表を問い合せる必要があります。

構文

validate_security_class(name         IN VARCHAR2, 
                        error_limit  IN PLS_INTEGER := 1)
   RETURN BOOLEAN;

パラメータ

パラメータ 説明

name

検証するオブジェクトの名前。

error_limit

検証表に格納できる不整合の最大数。

セキュリティ・クラスsec1を検証してから、不整合がある場合に検証表を問い合せます。

begin
  if sys.xs_diag.validate_security_class('sec1', 100) then
    dbms_output.put_line('The security class is valid.');
  else
    dbms_output.put_line('The security class is invalid.');
  end if;
end;
/
select * from xs$validation_table;

VALIDATE_ACLファンクション

VALIDATE_ACLファンクションは、ACLを検証します。このファンクションは、オブジェクトが有効な場合にTRUEを戻し、それ以外の場合にFALSEを戻します。識別された各不整合について、格納できる不整合の最大数に達するまで、行がXS$VALIDATION_TABLE検証表に挿入されます。ユーザーは、検証失敗の原因を調べるために検証表を問い合せる必要があります。

構文

validate_acl(name         IN VARCHAR2, 
             error_limit  IN PLS_INTEGER := 1) 
   RETURN BOOLEAN;

パラメータ

パラメータ 説明

name

検証するオブジェクトの名前。

error_limit

検証表に格納できる不整合の最大数。

ACL acl1を検証してから、不整合がある場合に検証表を問い合せます。

begin
  if sys.xs_diag.validate_acl('acl1', 100) then
    dbms_output.put_line('The ACL is valid.');
  else
    dbms_output.put_line('The ACL is invalid.');
  end if;
end;
/
select * from xs$validation_table;

VALIDATE_DATA_SECURITYファンクション

VALIDATE_DATA_SECURITYファンクションは、データ・セキュリティを検証します。このファンクションは、オブジェクトが有効な場合にTRUEを戻し、それ以外の場合にFALSEを戻します。識別された各不整合について、格納できる不整合の最大数に達するまで、行がXS$VALIDATION_TABLE検証表に挿入されます。ユーザーは、検証失敗の原因を調べるために検証表を問い合せる必要があります。

このファンクションには、ポリシー検証のスタイルが3つあります。

  • policyがNULL以外で、table_nameNULLの場合、ファンクションはポリシーが適用されるすべての表に対してポリシーを検証します。table_nameがNULLの場合、table_ownerはNULL以外の場合でも無視されます。

  • policytable_nameの両方がNULL以外の場合、ファンクションは特定の表に対してポリシーを検証します。table_ownerが指定されていない場合は、現在のスキーマが使用されます。

  • ポリシーがNULLでtable_nameがNULL以外の場合、ファンクションは表に適用されているすべてのポリシーを表に対して検証します。table_ownerが指定されていない場合は、現在のスキーマが使用されます。

構文

validate_data_security(policy       IN VARCHAR2 :=NULL,
                       table_owner  IN VARCHAR2 :=NULL,
                       table_name   IN VARCHAR2 :=NULL,
                       error_limit  IN PLS_INTEGER := 1) 
   RETURN BOOLEAN;

パラメータ

パラメータ 説明

policy

検証するオブジェクトの名前。

table_owner

表またはビューのスキーマの名前。

table_name

表またはビューの名前。

error_limit

検証表に格納できる不整合の最大数。

適用されているすべての表でポリシーpolicy1を検証してから、不整合がある場合に検証表を問い合せます。

begin
  if sys.xs_diag.validate_data_security(policy      => 'policy1',
                                        error_limit => 100) then
    dbms_output.put_line('The policy is valid on all the applied tables.');
  else
    dbms_output.put_line('The policy is invalid on some of the applied tables.');
  end if;
end;
/
select * from xs$validation_table;

特定の表でポリシーpolicy1を検証してから、不整合がある場合に検証表を問い合せます。

begin
  if sys.xs_diag.validate_data_security(policy      => 'policy1',
                                        table_owner => 'HR',
                                        table_name  => 'EMPLOYEES',
                                        error_limit => 100) then
    dbms_output.put_line('The policy is valid on the table.');
  else
    dbms_output.put_line('The policy is invalid on the table.');
  end if;
end;
/
select * from xs$validation_table;

特定の表に適用されているすべてのポリシーを検証してから、不整合がある場合に検証表を問い合せます。

begin
  if sys.xs_diag.validate_data_security(table_owner => 'HR',
                                        table_name  => 'EMPLOYEES',
                                        error_limit => 100) then
    dbms_output.put_line('All the applied policies on the table are valid.');
  else
    dbms_output.put_line('Some applied policies on the table are invalid');
  end if;
end;
/
select * from xs$validation_table;

VALIDATE_NAMESPACE_TEMPLATEファンクション

VALIDATE_NAMESPACE_TEMPLATEファンクションは、ネームスペースを検証します。このファンクションは、オブジェクトが有効な場合にTRUEを戻し、それ以外の場合にFALSEを戻します。識別された各不整合について、格納できる不整合の最大数に達するまで、行がXS$VALIDATION_TABLE検証表に挿入されます。ユーザーは、検証失敗の原因を調べるために検証表を問い合せる必要があります。

構文

validate_namespace_template(name         IN VARCHAR2,
                            error_limit  IN PLS_INTEGER := 1)
   RETURN BOOLEAN;

パラメータ

パラメータ 説明

name

検証するオブジェクトの名前。

error_limit

検証表に格納できる不整合の最大数。

ネームスペースns1を検証してから、不整合がある場合に検証表を問い合せます。

begin
  if sys.xs_diag.validate_namespace_template('ns1', 100) then
    dbms_output.put_line('The namespace template is valid.');
  else
    dbms_output.put_line('The namespace template is invalid.');
  end if;
end;
/
select * from xs$validation_table;

VALIDATE_WORKSPACEファンクション

VALIDATE_WORKSPACEファンクションは、すべてのアーティファクトを検証します。つまり、ワークスペースに存在するすべてのオブジェクトをこの1つのファンクションを使用して検証します。このファンクションは、すべてのオブジェクトが有効な場合にTRUEを戻し、それ以外の場合にFALSEを戻します。識別された各不整合について、格納できる不整合の最大数に達するまで、行がXS$VALIDATION_TABLE検証表に挿入されます。ユーザーは、検証失敗の原因を調べるために検証表を問い合せる必要があります。

構文

validate_workspace(error_limit  IN PLS_INTEGER := 1)
   RETURN BOOLEAN;

パラメータ

パラメータ 説明

error_limit

検証表に格納できる不整合の最大数。

ワークスペース内のすべてのオブジェクトを検証してから、不整合がある場合に検証表を問い合せます。

begin
  if sys.xs_diag.validate_workspace(100) then
    dbms_output.put_line('The objects are valid.');
  else
    dbms_output.put_line('The objects are invalid.');
  end if;
end;
/
select * from xs$validation_table;

XS_NAMESPACEパッケージ

XS_NAMESPACEパッケージには、ネームスペース・テンプレートおよび属性を作成、管理および削除するためのサブプログラムが含まれます。

セキュリティ・モデル

XS_NAMESPACEパッケージは、SYSスキーマに作成されます。ネームスペース・テンプレートと属性の管理を許可するADMIN_ANY_SEC_POLICYDBAロールに付与されます。

オブジェクト・タイプ、コンストラクタ・ファンクション、シノニムおよび付与

このパッケージには、次のオブジェクト・タイプ、コンストラクタ・ファンクション、シノニムおよびGRANT文が定義されています。

-- Type definition for namespace template attribute
CREATE OR REPLACE TYPE XS$NS_ATTRIBUTE AS OBJECT (
-- Member Variables
-- Name of the namespace template attribute
-- Must be unique within a namespace template
-- Cannot be null
name              VARCHAR2(4000),
-- Default value assigned to the attribute
default_value     VARCHAR2(4000),
-- Trigger events associated with the attribute
-- Allowed values are :
-- 0 : NO_EVENT
-- 1 : FIRST_READ_EVENT
-- 2 : UPDATE_EVENT
-- 3 : FIRST_READ_PLUS_UPDATE_EVENT
attribute_events  NUMBER,

-- Constructor function
CONSTRUCTOR FUNCTION XS$NS_ATTRIBUTE
                    (name             IN VARCHAR2,
                     default_value    IN VARCHAR2 := NULL,
                     attribute_events IN NUMBER := 0)
                     RETURN SELF AS RESULT,

-- Return the name of the attribute
MEMBER FUNCTION GET_NAME RETURN VARCHAR2,
-- Return the default value of the attribute
MEMBER FUNCTION GET_DEFAULT_VALUE RETURN VARCHAR2,
-- Return the trigger events associated with attribute
MEMBER FUNCTION GET_ATTRIBUTE_EVENTS RETURN NUMBER,
-- Mutator procedures
-- Set the default value for the attribute
MEMBER PROCEDURE SET_DEFAULT_VALUE(default_value IN VARCHAR2),
-- Associate trigger events to the attribute
MEMBER PROCEDURE SET_ATTRIBUTE_EVENTS(attribute_events IN NUMBER)
);
CREATE OR REPLACE TYPE XS$NS_ATTRIBUTE_LIST AS VARRAY(1000) OF XS$NS_ATTRIBUTE;

定数

属性イベント定数は次のとおりです。

NO_EVENT                     CONSTANT PLS_INTEGER := 0;
FIRSTREAD_EVENT              CONSTANT PLS_INTEGER := 1;
UPDATE_EVENT                 CONSTANT PLS_INTEGER := 2;
FIRSTREAD_PLUS_UPDATE_EVENT  CONSTANT PLS_INTEGER := 3;

XS_NAMESPACEサブプログラムの要約

表11-9 XS_NAMESPACEサブプログラムの要約

サブプログラム 説明

CREATE_TEMPLATEプロシージャ

新規ネームスペース・テンプレートを作成します。

ADD_ATTRIBUTESプロシージャ

既存のネームスペース・テンプレートに1つ以上の属性を追加します。

REMOVE_ATTRIBUTESプロシージャ

ネームスペース・テンプレートから1つ以上の属性を削除します。

SET_HANDLERプロシージャ

指定されたネームスペース・テンプレートにハンドラ・ファンクションを割り当てます。

SET_DESCRIPTIONプロシージャ

指定されたネームスペース・テンプレートの説明文字列を設定します。

DELETE_TEMPLATEプロシージャ

指定されたネームスペース・テンプレートを削除します。

CREATE_TEMPLATEプロシージャ

CREATE_TEMPLATEプロシージャは、新規ネームスペース・テンプレートを作成します。

構文

XS_NAMESPACE.CREATE_TEMPLATE (
  name             IN VARCHAR2,
  attr_list        IN XS$NS_ATTRIBUTE_LIST := NULL,
  schema           IN VARCHAR2 := NULL,
  package          IN VARCHAR2 := NULL,
  function         IN VARCHAR2 := NULL,
  acl              IN VARCHAR2 := 'SYS.NS_UNRESTRICTED_ACL'
  description      IN VARCHAR2 := NULL);

パラメータ

パラメータ 説明

name

作成するネームスペース・テンプレートの名前。

attr_list

ネームスペース・テンプレートに含まれる属性と、それらのデフォルト値およびUPDATE_EVENTなどの関連属性イベント。

schema

ネームスペース・テンプレートのハンドラ・ファンクションを含むスキーマ。

package

ネームスペース・テンプレートのハンドラ・ファンクションを含むパッケージ。

function

ネームスペース・テンプレートのハンドラ・ファンクション。ハンドラ・ファンクションは、属性イベントの発生時にコールされます。

acl

このネームスペース・テンプレートのACLの名前。ACLが提供されていない場合、デフォルトは、アプリケーション・ユーザーによる無制限の属性操作を許可する事前定義済ACL SYS.NS_UNRESTRICTED_ACLです。

description

ネームスペース・テンプレートのオプションの説明文字列。

次の例は、POAttrsというネームスペース・テンプレートを作成します。ネームスペース・テンプレートには、attrlistで定義されている属性のリストが含まれます。ネームスペース・テンプレートのハンドラ・ファンクションはPopulate_Order_Funcと呼ばれます。このハンドラ・ファンクションは、SCOTTスキーマに含まれるOrders_Pckgパッケージの一部です。ネームスペース・テンプレートには、テンプレートから作成されたネームスペースに対する無制限の操作を許可するNS_UNRESTRICTED_ACLがテンプレートに設定されています。

DECLARE
  attrlist XS$NS_ATTRIBUTE_LIST;
BEGIN
  attrlist := XS$NS_ATTRIBUTE_LIST();
  attrlist.extend(2);
  attrlist(1) := XS$NS_ATTRIBUTE('desc', 'general');
  attrlist(2) := XS$NS_ATTRIBUTE(name=>'item_no',
                 attribute_events=>XS_NAMESPACE.FIRSTREAD_EVENT);
  SYS.XS_NAMESPACE.CREATE_TEMPLATE('POAttrs', attrlist, 'SCOTT',
                                   'Orders_Pckg','Populate_Order_Func',
                                   'SYS.NS_UNRESTRICTED_ACL',
                                   'Purchase Order Attributes');
END;

ADD_ATTRIBUTESプロシージャ

ADD_ATTRIBUTESプロシージャは、既存のネームスペース・テンプレートに1つ以上の属性を追加します。

構文

XS_NAMESPACE.ADD_ATTRIBUTES ( 
  template         IN VARCHAR2,
  attribute        IN VARCHAR2,
  default_value    IN VARCHAR2 := NULL,
  attribute_events IN PLS_INTEGER := XS_NAMESPACE.NO_EVENT);

XS_NAMESPACE.ADD_ATTRIBUTES ( 
  template  IN VARCHAR2,
  attr_list IN XS$NS_ATTRIBUTE_LIST); 

パラメータ

パラメータ 説明

template

属性が追加されるネームスペース・テンプレートの名前。

attribute

追加する属性の名前。

attr_list

追加する属性のリスト。

default_value

属性のデフォルト値。

attribute_events

属性に関連付けられている更新イベントなどの属性イベント。

次の例は、item_typeという属性をPOAttrsネームスペースに追加します。追加される新規属性のデフォルト値と属性イベントも指定します。

BEGIN
  SYS.XS_NAMESPACE.ADD_ATTRIBUTES(template=>'POAttrs',attribute=>'item_type',
                                  default_value=>'generic',
                                  attribute_events=>XS_NAMESPACE.update_event);
END;

REMOVE_ATTRIBUTESプロシージャ

REMOVE_ATTRIBUTESプロシージャは、ネームスペース・テンプレートから1つ以上の属性を削除します。属性名が指定されていない場合は、すべての属性がネームスペース・テンプレートから削除されます。

構文

XS_NAMESPACE.REMOVE_ATTRIBUTES ( 
  template  IN VARCHAR2,
  attribute IN VARCHAR2); 

XS_NAMESPACE.REMOVE_ATTRIBUTES ( 
  template  IN VARCHAR2,
  attr_list IN XS$LIST); 

XS_NAMESPACE.REMOVE_ATTRIBUTES ( 
  template   IN VARCHAR2); 

パラメータ

パラメータ 説明

template

属性が削除されるネームスペース・テンプレートの名前。

attribute

削除する属性の名前。

attr_list

削除する属性名のリスト。

次の例は、item_type属性をPOAttrsネームスペースから削除します。

BEGIN
  SYS.XS_NAMESPACE.REMOVE_ATTRIBUTES('POAttrs','item_type');
END;

次の例は、POAttrsネームスペース・テンプレートからすべての属性を削除します。

BEGIN
  SYS.XS_NAMESPACE.REMOVE_ATTRIBUTES('POAttrs');
END;

SET_HANDLERプロシージャ

SET_HANDLERプロシージャは、指定されたネームスペース・テンプレートにハンドラ・ファンクションを割り当てます。

構文

XS_NAMESPACE.SET_HANDLER (
  template         IN VARCHAR2,
  schema           IN VARCHAR2,
  package          IN VARCHAR2,
  function         IN VARCHAR2);

パラメータ

パラメータ 説明

template

ハンドラ・ファンクションを設定するネームスペース・テンプレートの名前。

schema

ハンドラ・パッケージとファンクションを含むスキーマ。

package

ハンドラ・ファンクションを含むパッケージの名前。

function

ネームスペース・テンプレートのハンドラ・ファンクションの名前。

次の例は、Populate_Order_Funcというハンドラ・ファンクションをPOAttrsネームスペース・テンプレートに対して設定します。

BEGIN
  SYS.XS_NAMESPACE.SET_HANDLER('POAttrs','SCOTT',
                               'Orders_Pckg','Populate_Order_Func');
END;

SET_DESCRIPTIONプロシージャ

SET_DESCRIPTIONプロシージャは、指定されたネームスペース・テンプレートの説明文字列を設定します。

構文

XS_NAMESPACE.SET_DESCRIPTION (
  template     IN VARCHAR2,
  description  IN VARCHAR2);

パラメータ

パラメータ 説明

template

説明を設定するネームスペース・テンプレートの名前。

description

指定されたネームスペース・テンプレートの説明文字列。

次の例は、POAttrsネームスペース・テンプレートの説明文字列を設定します。

BEGIN
  SYS.XS_NAMESPACE.SET_DESCRIPTION('POAttrs','Purchase Order Attributes');
END;

DELETE_TEMPLATEプロシージャ

DELETE_TEMPLATEプロシージャは、指定されたネームスペース・テンプレートを削除します。

構文

XS_NAMESPACE.DELETE_TEMPLATE( 
  template      IN VARCHAR2,
  delete_option IN PLS_INTEGER := XS_ADMIN_UTIL.DEFAULT_OPTION); 

パラメータ

パラメータ 説明

template

削除するネームスペース・テンプレートの名前。

delete_option

使用する削除オプション。ネームスペース・テンプレートに対して、次のオプションの動作は同じです。

  • DEFAULT_OPTION:

    デフォルト・オプションでは、他で参照されていない場合にのみネームスペース・テンプレートを削除できます。ネームスペース・テンプレートを参照する他のエンティティがある場合は、ネームスペース・テンプレートを削除できません。

  • CASCADE_OPTION:

    カスケード・オプションは、ネームスペース・テンプレートをそれに対する参照とともに削除します。ネームスペース・テンプレートを削除するユーザーは、それらの参照も削除します。

  • ALLOW_INCONSISTENCIES_OPTION:

    不整合の許可オプションでは、他のエンティティからエンティティへの遅延バインド参照がある場合でもそのエンティティを削除できます。エンティティが前の依存性の一部である場合は、削除が失敗し、エラーが生成されます。

次の例は、デフォルトの削除オプションを使用してPOAttrsネームスペース・テンプレートを削除します。

BEGIN
  SYS.XS_NAMESPACE.DELETE_TEMPLATE('POAttrs',XS_ADMIN_UTIL.DEFAULT_OPTION);
END;

XS_PRINCIPALパッケージ

XS_PRINCIPALパッケージには、アプリケーション・プリンシパルの作成、管理および削除に使用されるプロシージャが含まれます。これらのアプリケーション・プリンシパルには、アプリケーション・ユーザー、標準アプリケーション・ロールおよび動的アプリケーション・ロールが含まれます。

セキュリティ・モデル

XS_PRINCIPALパッケージは、SYSスキーマに作成されます。

アプリケーション・ユーザーおよびロールの作成、変更または削除に必要な権限は、データベース・ユーザーおよびロールの作成、変更または削除に必要なのと同じシステム権限によって管理されます。

オブジェクト・タイプ、コンストラクタ・ファンクション、シノニムおよび付与

このパッケージには、次のオブジェクト・タイプ、コンストラクタ・ファンクション、シノニムおよびGRANT文が定義されています。

-- Type definition for roles granted to the principals
CREATE OR REPLACE TYPE XS$ROLE_GRANT_TYPE AS OBJECT (
-- Member Variables
-- Constants defined in other packages cannot be recognized in a type.
-- e.g.  XS_ADMIN_UTIL.XSNAME_MAXLEN
-- name   VARCHAR2(XS_ADMIN_UTIL.XSNAME_MAXLEN),
  name          VARCHAR2(130),
-- Start date of the effective date
  start_date    TIMESTAMP WITH TIME ZONE,
-- End date of the effective date
  end_date      TIMESTAMP WITH TIME ZONE,

  CONSTRUCTOR FUNCTION XS$ROLE_GRANT_TYPE (
    name       IN VARCHAR2,
    start_date IN TIMESTAMP WITH TIME ZONE:= NULL,
    end_date   IN TIMESTAMP WITH TIME ZONE:= NULL)
  RETURN SELF AS RESULT,

  MEMBER FUNCTION get_role_name RETURN VARCHAR2,
  MEMBER PROCEDURE set_start_date(start_date IN TIMESTAMP WITH TIME ZONE),
  MEMBER FUNCTION get_start_date RETURN TIMESTAMP WITH TIME ZONE,
  MEMBER PROCEDURE set_end_date(end_date IN TIMESTAMP WITH TIME ZONE),
  MEMBER FUNCTION get_end_date RETURN TIMESTAMP WITH TIME ZONE
);

CREATE OR REPLACE TYPE XS$ROLE_GRANT_LIST AS VARRAY(1000) OF XS$ROLE_GRANT_TYPE;

定数

次の定数はユーザーのステータスを定義します。

ACTIVE          CONSTANT PLS_INTEGER := 1;
INACTIVE        CONSTANT PLS_INTEGER := 2;
UNLOCKED        CONSTANT PLS_INTEGER := 3;
EXPIRED         CONSTANT PLS_INTEGER := 4;
LOCKED          CONSTANT PLS_INTEGER := 5;

次の定数は動的ロール・スコープを定義します。

SESSION_SCOPE   CONSTANT PLS_INTEGER := 0;
REQUEST_SCOPE   CONSTANT PLS_INTEGER := 1;

次の定数は検証機能のタイプを定義します。

XS_SHA512       CONSTANT PLS_INTEGER := 2 ;
XS_SALTED_SHA1  CONSTANT PLS_INTEGER := 1 ;

XS_PRINCIPALサブプログラムの要約

表11-10 XS_PRINCIPALサブプログラムの要約

サブプログラム 説明

CREATE_USERプロシージャ

アプリケーション・ユーザーを作成します。

CREATE_ROLEプロシージャ

アプリケーション・ロールを作成します。

CREATE_DYNAMIC_ROLEプロシージャ

動的アプリケーション・ロールを作成します。

GRANT_ROLESプロシージャ

1つ以上のアプリケーション・ロールをアプリケーション・プリンシパルに付与します。

REVOKE_ROLESプロシージャ

1つ以上のロールをアプリケーション・プリンシパルから取り消します。

ADD_PROXY_USERプロシージャ

ターゲット・アプリケーション・ユーザーのプロキシ・ユーザーを追加します。

REMOVE_PROXY_USERSプロシージャ

ターゲット・アプリケーション・ユーザーの指定されたプロキシ・ユーザーまたはすべてのプロキシ・ユーザーを削除します。

ADD_PROXY_TO_DBUSER

データベース・ユーザーにプロキシ・アプリケーション・ユーザーを追加します。

REMOVE_PROXY_FROM_DBUSER

データベース・ユーザーからプロキシ・アプリケーション・ユーザーを削除します。

SET_EFFECTIVE_DATESプロシージャ

アプリケーション・ユーザーまたはロールの有効日を設定または変更します。

SET_DYNAMIC_ROLE_DURATIONプロシージャ

動的アプリケーション・ロールの期間(分単位)を設定または変更します。

SET_DYNAMIC_ROLE_SCOPEプロシージャ

REQUEST_SCOPESESSION_SCOPEなど、動的アプリケーション・ロールのスコープを設定または変更します。

ENABLE_BY_DEFAULTプロシージャ

アプリケーション・ロールを有効または無効にします。

ENABLE_ROLES_BY_DEFAULTプロシージャ

指定されたユーザーに直接付与されているすべてのロールを有効または無効にします。

SET_USER_SCHEMAプロシージャ

アプリケーション・ユーザーのデータベース・スキーマを設定します。

SET_GUIDプロシージャ

外部ユーザーまたはロールのGUIDを設定します。

SET_PROFILEプロシージャ

アプリケーション・ユーザーのプロファイルを設定します。Real Application Securityアプリケーション・ユーザーのデータベース使用率やデータベース・インスタンス・リソースを制限する、一連のリソース制限およびパスワード・パラメータです。

SET_USER_STATUSプロシージャ

ACTIVEINACTIVEUNLOCKLOCKEDEXPIREDなど、アプリケーション・ユーザー・アカウントのステータスを設定または変更します

SET_PASSWORDプロシージャ

アプリケーション・ユーザー・アカウントのパスワードを設定または変更します。

SET_VERIFIERプロシージャ

アプリケーション・ユーザー・アカウントの検証機能を設定または変更します。

SET_DESCRIPTIONプロシージャ

アプリケーション・ユーザーまたはロールの説明文字列を設定します。

DELETE_PRINCIPALプロシージャ

アプリケーション・ユーザーまたはロールを削除します。

CREATE_USERプロシージャ

CREATE_USERプロシージャは、新規アプリケーション・ユーザーを作成します。アプリケーション・ユーザーを作成するにはCREATE USERシステム権限が必要です。

DBA_XS_USERSデータ・ディクショナリ・ビューを使用して、すべてのアプリケーション・ユーザーのリストを取得できます。

構文

CREATE_USER ( 
  name            IN VARCHAR2,
  schema          IN VARCHAR2    := NULL,
  status          IN PLS_INTEGER := ACTIVE,
  start_date      IN TIMESTAMP WITH TIME ZONE  := NULL,
  end_date        IN TIMESTAMP WITH TIME ZONE  := NULL,
  guid            IN RAW         := NULL,
  external_source IN VARCHAR2    := NULL,
  description     IN VARCHAR2    := NULL); 

パラメータ

パラメータ 説明

name

作成するアプリケーション・ユーザーの名前。

status

作成時のユーザーのステータス。これは、次のいずれかの値です。

ACTIVEINACTIVE

デフォルト値はACTIVEです。

PASSWORDEXPIREDおよびLOCKEDは、Oracle Database Release 12.1 (12.1.0.2)以降は非推奨です。

schema

ユーザーに関連付けるデータベース・スキーマ。これはオプションです。

start_date

ユーザー・アカウントが有効になる日付。これはオプションです。

end_date

ユーザー・アカウントが無効になる日付。これはオプションです。

end_dateが指定されている場合は、start_dateも指定する必要があります。

guid

ユーザーのGUID。これは外部ユーザーに対してのみ有効です。

external_source

このユーザーのソースであるシステムの名前。これはオプションです。

description

ユーザー・アカウントの説明。これはオプションです。

次の例は、ユーザーを作成します。

BEGIN
 XS_PRINCIPAL.CREATE_USER('TEST1');
END;

次の例は、ユーザーを作成し、ユーザーのスキーマおよび開始日も指定します。

DECLARE 
st_date TIMESTAMP WITH TIME ZONE;
BEGIN
  st_date := TO_TIMESTAMP_TZ('2010-06-18 11:00:00 -5:00','YYYY-MM-DD HH:MI:SS
  TZH:TZM');
  SYS.XS_PRINCIPAL.CREATE_USER(name=>'u2',
                               schema=>'scott',
                               start_date=>st_date);
END;

CREATE_ROLEプロシージャ

CREATE_ROLEプロシージャは、新規アプリケーション・ロールを作成します。標準アプリケーション・ロールを作成するにはCREATE ROLEシステム権限が必要です。

DBA_XS_ROLESデータ・ディクショナリ・ビューを使用して、アプリケーション・ロールのリストを開始日や終了日などの属性とともに取得できます

構文

CREATE_ROLE (   name            IN VARCHAR2,
  enabled         IN BOOLEAN  := FALSE,
  start_date      IN TIMESTAMP WITH TIME ZONE := NULL,
  end_date        IN TIMESTAMP WITH TIME ZONE := NULL,
  guid            IN RAW      := NULL,
  external_source IN VARCHAR2 := NULL,
  description     IN VARCHAR2 := NULL); 

パラメータ

パラメータ 説明

name

作成するアプリケーション・ロールの名前。

enabled

作成時にロールを有効にするかどうかを指定します。デフォルト値はFALSEで、ロールが作成時に無効になることを意味します。

start_date

ロールが有効になる日付。これはオプションです。

end_date

ロールが無効になる日付。これはオプションです。

end_dateが指定されている場合は、start_dateも指定する必要があります。

guid

ロールのGUID。これは外部ロールに対してのみ適用されます。

external_source

このロールのソースであるシステムの名前。これはオプションです。

description

ロールの説明(オプション)。

次の例は、hrmgrというアプリケーション・ロールを作成します。

BEGIN
  SYS.XS_PRINCIPAL.CREATE_ROLE('hrmgr');
END;

次の例は、hrrepというアプリケーション・ロールを作成します。また、ロールを有効にし、現在の日付をロールの開始日として割り当てます。

DECLARE 
  st_date TIMESTAMP WITH TIME ZONE;
BEGIN
  st_date := SYSTIMESTAMP;
  SYS.XS_PRINCIPAL.CREATE_ROLE(name=>'hrrep',
                               enabled=>true,
                               start_date=>st_date);
END;

CREATE_DYNAMIC_ROLEプロシージャ

CREATE_DYNAMIC_ROLEプロシージャは、新しい動的アプリケーション・ロールを作成します。動的アプリケーション・ロールは、アプリケーションで定義された基準に基づいて、アプリケーションによって動的に有効または無効にできます。動的アプリケーション・ロールを作成するにはCREATE ROLEシステム権限が必要です。

DBA_XS_DYNAMIC_ROLESデータ・ディクショナリ・ビューを使用して、すべての動的アプリケーション・ロールのリストを期間などの属性とともに取得できます。

構文

CREATE_DYNAMIC_ROLE (
  name        IN VARCHAR2,
  duration    IN PLS_INTEGER := NULL, 
  scope       IN PLS_INTEGER := XS_PRINCIPAL.SESSION_SCOPE,
  description IN VARCHAR2    := NULL);

パラメータ

パラメータ 説明

name

作成する動的アプリケーション・ロールの名前。

duration

動的アプリケーション・ロールの期間(分単位)。オプション属性。

scope

動的アプリケーション・ロールのスコープ属性。可能な値はSESSION_SCOPEおよびREQUEST_SCOPEです。デフォルト値はXS_PRINCIPAL.SESSION_SCOPEです。

description

動的アプリケーション・ロールのオプションの説明。

次の例は、sslroleという動的アプリケーション・ロールを作成します。

BEGIN
  SYS.XS_PRINCIPAL.CREATE_DYNAMIC_ROLE('sslrole');
END;

次の例は、reproleという動的アプリケーション・ロールを作成します。また、ロールの期間を100分として指定し、ロールのリクエスト・スコープを選択します。

BEGIN
  SYS.XS_PRINCIPAL.CREATE_DYNAMIC_ROLE(name=>'reprole',
                                       duration=>100,
                                       scope=>XS_PRINCIPAL.REQUEST_SCOPE);
END;

GRANT_ROLESプロシージャ

GRANT_ROLESプロシージャは、1つ以上のアプリケーション・ロールをアプリケーション・プリンシパルに付与します。アプリケーション・ロールを付与するにはGRANT ANY ROLEシステム権限が必要です。

DBA_XS_ROLE_GRANTSデータ・ディクショナリ・ビューを使用して、すべてのロール付与のリストを開始日や終了日などの詳細とともに取得できます。

構文

GRANT_ROLES (
grantee       IN VARCHAR2,
role          IN VARCHAR2,
start_date    IN TIMESTAMP WITH TIME ZONE:= NULL,
end_date      IN TIMESTAMP WITH TIME ZONE:= NULL,);

GRANT_ROLES (
grantee   IN VARCHAR2,
role_list IN XS$ROLE_GRANT_LIST);

パラメータ

パラメータ 説明

grantee

ロールが付与されるプリンシパルの名前。

role

付与されるロールの名前。

role_list

付与するロールのリスト。

start_date

付与が有効になる日付。これは、オプションのパラメータです。

end_date

付与が有効な期間の最終日。これは、オプションのパラメータです。

次の例は、開始日と終了日を指定してHRREPロールをユーザーSMAVRISに付与します。

DECLARE 
  st_date TIMESTAMP WITH TIME ZONE;
  end_date TIMESTAMP WITH TIME ZONE;
BEGIN
  st_date := TO_TIMESTAMP_TZ('2010-06-18 11:00:00 -5:00','YYYY-MM-DD HH:MI:SS
                              TZH:TZM');
  end_date := TO_TIMESTAMP_Tz('2011-06-18 11:00:00 -5:00','YYYY-MM-DD HH:MI:SS
                               TZH:TZM');
  SYS.XS_PRINCIPAL.GRANT_ROLES('SMAVRIS', 'HRREP', st_date, end_date);
END;

次の例は、HRREPおよびHRMGRロールをユーザーSMAVRISに付与します。

DECLARE 
  rg_list XS$ROLE_GRANT_LIST; 
BEGIN
  rg_list := XS$ROLE_GRANT_LIST(XS$ROLE_GRANT_TYPE('HRREP'),
                                XS$ROLE_GRANT_TYPE('HRMGR'));
 
  SYS.XS_PRINCIPAL.GRANT_ROLES('SMAVRIS', rg_list);
END;

次の例では、ユーザーXSUSERにロールXSCONNECTを付与する方法を示します。この付与により、ユーザーXSUSERがそのパスワードを使用してデータベースに接続できます。

EXEC SYS.XS_PRINCIPAL.GRANT_ROLES('XSUSER', 'XSCONNECT');

REVOKE_ROLESプロシージャ

REVOKE_ROLESプロシージャは、指定された権限受領者から指定したロールを取り消します。ロールが指定されていない場合は、権限受領者からすべてのアプリケーション・ロールが取り消されます。ロールを付与または取り消すにはGRANT ANY ROLEシステム権限が必要です。

DBA_XS_ROLE_GRANTSデータ・ディクショナリ・ビューを使用して、すべてのロール付与のリストを開始日や終了日などの詳細とともに取得できます。

構文

REVOKE_ROLES (
  grantee   IN VARCHAR2,
  role      IN VARCHAR2);

REVOKE_ROLES (
  grantee   IN VARCHAR2,
  role_list IN XS$NAME_LIST); 

REVOKE_ROLES (
  grantee IN VARCHAR2);

パラメータ

パラメータ 説明

grantee

ロールが取り消されるアプリケーション・プリンシパル。

role

取り消すアプリケーション・ロールの名前。

role_list

取り消すロール名のリスト。

次の例は、ユーザーSMAVRISからHRREPロールを取り消します。

BEGIN
  XS_PRINCIPAL.REVOKE_ROLES('SMAVRIS','HRREP');
END;

次の例は、ユーザーSMAVRISからHRREPおよびHRMGRロールを取り消します。

DECLARE
  role_list XS$NAME_LIST; 
BEGIN
  role_list := XS$NAME_LIST('HRREP','HRMGR');
  SYS.XS_PRINCIPAL.REVOKE_ROLES('SMAVRIS', role_list);
END;

次の例は、付与されているすべてのロールをユーザーSMAVRISから取り消します。

BEGIN
  SYS.XS_PRINCIPAL.REVOKE_ROLES('SMAVRIS');
END;

ADD_PROXY_USERプロシージャ

ADD_PROXY_USERは、指定されたアプリケーション・ユーザーのターゲット・ユーザーを追加します。これにより、アプリケーション・ユーザーがターゲット・ユーザーのプロキシとして機能できます。このプロシージャには2つのシグネチャがあります。最初のシグネチャでは、target_rolesパラメータを使用して、プロキシ・ユーザーに割り当てるターゲット・ユーザーのロールのサブセットを指定できます。2番目のシグネチャでは、target_rolesパラメータがないため、ターゲット・ユーザーのすべてのロールがプロキシ・ユーザーに割り当てられます。

プロキシ・ユーザーを追加または削除するにはALTER USERシステム権限が必要です。

構文

ADD_PROXY_USER (
  target_user  IN VARCHAR2,
  proxy_user   IN VARCHAR2,
  target_roles IN XS$NAME_LIST);

ADD_PROXY_USER (
  target_user  IN VARCHAR2,
  proxy_user   IN VARCHAR2);

パラメータ

パラメータ 説明

target_user

プロキシとして機能できる対象のターゲット・アプリケーション・ユーザーの名前。

proxy_user

プロキシ・アプリケーション・ユーザーの名前。

target_roles

プロキシ・ユーザーがプロキシとして機能できるターゲット・ユーザー・ロールのリスト。このパラメータは必須です。明示的なNULL値を渡した場合は、ターゲット・ユーザーのロールなしでプロキシ・ユーザーを構成します。それ以外の場合、proxy_userパラメータではtarget_rolesパラメータに指定する値が使用されます。

次の例は、ユーザーDJONESがターゲット・ユーザーSMAVRISのプロキシとして機能できるようにします。DJONESに付与されるターゲット・ロールはHRREPおよびHRMGRです。

DECLARE
  pxy_roles XS$NAME_LIST; 
BEGIN
  pxy_roles := XS$NAME_LIST('HRREP','HRMGR');
  SYS.XS_PRINCIPAL.ADD_PROXY_USER('SMAVRIS','DJONES', pxy_roles);
END;

次の例は、ターゲット・ロールに対して明示的なNULL値を渡します。つまり、ターゲット・ユーザー'SMAVRIS'のロールをプロキシ・ユーザー'DJONES'に割り当てません。

BEGIN
  SYS.XS_PRINCIPAL.ADD_PROXY_USER('SMAVRIS','DJONES', NULL);
END;

次の例は、ターゲット・ユーザー'SMAVRIS'のすべてのロールをプロキシ・ユーザー'DJONES'に割り当てます。

BEGIN
  SYS.XS_PRINCIPAL.ADD_PROXY_USER('SMAVRIS','DJONES');
END;

REMOVE_PROXY_USERSプロシージャ

REMOVE_PROXY_USERSプロシージャは、ターゲット・アプリケーション・ユーザーの1つまたはすべてのプロキシ・ユーザーの関連付けを解除します。関連付けられたプロキシ・ロールは、プロキシ・ユーザーに対して自動的に削除されます。

プロキシ・ユーザーを追加または削除するにはALTER USERシステム権限が必要です。

構文

REMOVE_PROXY_USERS (
  target_user  IN VARCHAR2); 

REMOVE_PROXY_USERS (
  target_user IN VARCHAR2,
  proxy_user  IN VARCHAR2);

パラメータ

パラメータ 説明

target_user

プロキシの関連付けが解除されるターゲット・アプリケーション・ユーザー。

proxy_user

ターゲット・ユーザーから関連付けを解除する必要のあるプロキシ・アプリケーション・ユーザー。

次の例は、ターゲット・ユーザーSMAVRISのすべてのプロキシ・ユーザーを削除します。

BEGIN
  SYS.XS_PRINCIPAL.REMOVE_PROXY_USERS('SMAVRIS');
END;

次の例は、プロキシ・ユーザーDJONESをターゲット・ユーザーSMAVRISから関連付け解除します。

BEGIN
  SYS.XS_PRINCIPAL.REMOVE_PROXY_USERS('SMAVRIS','DJONES');
END;

ADD_PROXY_TO_DBUSER

ADD_PROXY_TO_DBUSERは、指定されたターゲット・プロキシ・アプリケーション・ユーザーを指定されたデータベース・ユーザーに追加します。アプリケーション・ユーザーは直接ログオン・ユーザーである必要があります。これにより、アプリケーション・ユーザーがターゲット・データベース・ユーザーのプロキシとして機能できます。デフォルトでは、ターゲット・ユーザーに割り当てられているすべてのロールをプロキシ・ユーザーが使用できます。Oracleデータベースと同様に、ターゲット・データベース・ユーザーのデフォルト・ロールは接続後に有効になります。ターゲット・データベース・ユーザーに割り当てられているその他のロールはSET ROLE文を使用して設定できます。

プロキシ・ユーザーをデータベース・ユーザーに追加するにはALTER USERシステム権限が必要です。

構文

ADD_PROXY_TO_DBUSER (
  database_user  IN VARCHAR2,
  proxy_user     IN VARCHAR2,
  is_external    IN BOOLEAN := FALSE);

パラメータ

パラメータ 説明

database_user

プロキシとして機能できる対象のターゲット・データベース・ユーザーの名前。

proxy_user

プロキシ・アプリケーション・ユーザーの名前。

is_external

ユーザーが外部ユーザーであるか標準のReal Application Securityアプリケーション・ユーザーであるかを指定するパラメータ。

次の例は、アプリケーション・ユーザーDJONESがターゲット・データベース・ユーザーSMAVRISのプロキシとして機能できるようにします。

BEGIN
  SYS.XS_PRINCIPAL.ADD_PROXY_TO_DBUSER('SMAVRIS','DJONES', TRUE);
END;

REMOVE_PROXY_FROM_DBUSER

REMOVE_PROXY_FROM_DBUSERプロシージャは、データベース・ユーザーからプロキシ・アプリケーション・ユーザーを関連付け解除します。関連付けられたプロキシ・ロールは、アプリケーション・ユーザーから自動的に削除されます。

プロキシ・ユーザーをデータベース・ユーザーから削除するにはALTER USERシステム権限が必要です。

構文

REMOVE_PROXY_FROM_DBUSER (
  database_user IN VARCHAR2,
  proxy_user    IN VARCHAR2);

パラメータ

パラメータ 説明

database_user

プロキシの関連付けが解除されるターゲット・データベース・ユーザー。

proxy_user

ターゲット・データベース・ユーザーから関連付けを解除する必要のあるプロキシ・アプリケーション・ユーザー。

次の例は、プロキシ・ユーザーDJONESをターゲット・データベース・ユーザーSMAVRISから関連付け解除します。

BEGIN
  SYS.XS_PRINCIPAL.REMOVE_PROXY_FROM_DBUSER('SMAVRIS','DJONES');
END;

SET_EFFECTIVE_DATESプロシージャ

SET_EFFECTIVE_DATESプロシージャは、アプリケーション・ユーザーまたはロールの有効日を設定または変更します。start_dateおよびend_dateの値がデフォルトでNULLとして指定されている場合、そのアプリケーション・ユーザーは現在有効ではないため、この特定のアプリケーション・ユーザーのセッションを作成することはできません。

アプリケーション・ユーザーに対してこのプロシージャを実行するにはALTER USERシステム権限が必要です。アプリケーション・ロールに対してこのプロシージャを実行するにはALTER ANY ROLEシステム権限が必要です。

構文

SET_EFFECTIVE_DATES (
  principal         IN VARCHAR2,
  start_date        IN TIMESTAMP WITH TIME ZONE:= NULL,
  end_date          IN TIMESTAMP WITH TIME ZONE:= NULL);

パラメータ

パラメータ 説明

principal

有効日を設定するアプリケーション・ユーザーまたはロールの名前。

start_date

有効期間の開始日。

end_date

有効期間の終了日。

次の例は、ユーザーDJONESの有効日を設定します。

DECLARE 
  st_date TIMESTAMP WITH TIME ZONE;
  end_date TIMESTAMP WITH TIME ZONE;
BEGIN
  st_date := TO_TIMESTAMP_TZ('2010-06-18 11:00:00 -5:00','YYYY-MM-DD HH:MI:SS
                              TZH:TZM');
  end_date := TO_TIMESTAMP_Tz('2011-06-18 11:00:00 -5:00','YYYY-MM-DD HH:MI:SS
                               TZH:TZM');
  SYS.XS_PRINCIPAL.SET_EFFECTIVE_DATES(principal=>'DJONES', 
                                       start_date=>st_date,end_date=>end_date);
END;

SET_DYNAMIC_ROLE_DURATIONプロシージャ

SET_DYNAMIC_ROLE_DURATIONプロシージャは、動的アプリケーション・ロールの期間を設定または変更します。期間は分で指定します。

ロールを変更するにはALTER ANY ROLEシステム権限が必要です。

構文

SET_DYNAMIC_ROLE_DURATION (
  role      IN VARCHAR2,
  duration  IN PLS_INTEGER);

パラメータ

パラメータ 説明

role

動的アプリケーション・ロールの名前。

duration

動的アプリケーション・ロールの期間(分単位)。この値を負の値に設定することはできません。

次の例は、reprole動的アプリケーション・ロールの期間を60分に設定します。

BEGIN
  SYS.XS_PRINCIPAL.SET_DYNAMIC_ROLE_DURATION('reprole',60);
END;

SET_DYNAMIC_ROLE_SCOPEプロシージャ

SET_DYNAMIC_ROLE_SCOPEプロシージャは、動的アプリケーション・ロールのスコープを設定または変更します。セッション(SESSION_SCOPE)またはリクエスト(REQUEST_SCOPE)スコープを選択できます。

ロールを変更するにはALTER ANY ROLEシステム権限が必要です。

構文

SET_DYNAMIC_ROLE_SCOPE (
  role      IN VARCHAR2,
  scope     IN PLS_INTEGER);

パラメータ

パラメータ 説明

role

動的アプリケーション・ロールの名前。

scope

設定する動的アプリケーション・ロールのスコープ。使用できる値はXS_PRINCIPAL.REQUEST_SCOPEおよびXS_PRINCIPAL.SESSION_SCOPEです。

次の例は、reprole動的アプリケーション・ロールのスコープをリクエスト・スコープに設定します。

begin
  SYS.XS_PRINCIPAL.SET_DYNAMIC_ROLE_SCOPE('reprole',XS_PRINCIPAL.REQUEST_SCOPE);
end;

ENABLE_BY_DEFAULTプロシージャ

ENABLE_BY_DEFAULTプロシージャは、標準アプリケーション・ロールを有効または無効にします。

有効になっている場合、アプリケーション・ロールは付与先のプリンシパルに対して自動的に有効になります。無効になっている場合、アプリケーション・ロールに関連付けられている権限は、アプリケーション・ロールがプリンシパルに付与されている場合でも有効になりません。

アプリケーション・ロールを変更するにはALTER ANY ROLEシステム権限が必要です。

構文

ENABLE_BY_DEFAULT ( 
  role       IN VARCHAR2,
  enabled    IN BOOLEAN := TRUE);

パラメータ

パラメータ 説明

role

標準アプリケーション・ロールの名前。

enabled

アプリケーション・ロールのenabled属性。これをTRUEに設定すると、アプリケーション・ロールがデフォルトで有効としてマークされます。デフォルト値はTRUEです。

次の例は、HRREPアプリケーション・ロールのenabled属性をTRUEに設定します。

BEGIN
  SYS.XS_PRINCIPAL.ENABLE_BY_DEFAULT('HRREP',TRUE);
END;

ENABLE_ROLES_BY_DEFAULTプロシージャ

ENABLE_ROLES_BY_DEFAULTプロシージャは、アプリケーション・ユーザーに直接付与されているすべてのアプリケーション・ロールを有効または無効にします。

アプリケーション・ユーザーに対してこのプロシージャを実行するにはALTER USERシステム権限が必要です。

構文

ENABLE_ROLES_BY_DEFAULT (
  user       IN VARCHAR2,
  enabled    IN BOOLEAN := TRUE);

パラメータ

パラメータ 説明

user

アプリケーション・ユーザーの名前。

enabled

アプリケーション・ユーザーに直接付与されているすべてのアプリケーション・ロールのenabled属性。

enabled属性をTRUEに設定すると、アプリケーション・ユーザーに直接付与されているすべてのアプリケーション・ロールが有効になります。デフォルト値はTRUEです。

enabled属性をFALSEに設定すると、アプリケーション・ユーザーに直接付与されているすべてのアプリケーション・ロールが無効になります。

次の例は、アプリケーション・ユーザーSMAVRISに直接付与されているすべてのロールを有効にします。

BEGIN
  SYS.XS_PRINCIPAL.ENABLE_ROLES_BY_DEFAULT('SMAVRIS',TRUE);
END;

SET_USER_SCHEMAプロシージャ

SET_USER_SCHEMAプロシージャは、アプリケーション・ユーザーのデータベース・スキーマを設定します。

アプリケーション・ユーザーに対してこのプロシージャを実行するにはALTER USERシステム権限が必要です。

構文

SET_USER_SCHEMA (
  user        IN VARCHAR2,
  schema      IN VARCHAR2);

パラメータ

パラメータ 説明

user

アプリケーション・ユーザーの名前。

schema

ユーザーに関連付けるデータベース・スキーマの名前。これをNULLに設定すると、すべてのスキーマ関連付けが削除されます。

次の例は、HRスキーマをユーザーDJONESに関連付けます。

BEGIN
  SYS.XS_PRINCIPAL.SET_USER_SCHEMA('DJONES','HR');
END;

SET_GUIDプロシージャ

SET_GUIDプロシージャは、プリンシパルのGUIDを設定します。プリンシパルは外部ユーザーまたはロールである必要があり、現在のGUIDはNULLである必要があります。

アプリケーション・ユーザーに対してこのプロシージャを実行するにはALTER USERシステム権限が必要です。アプリケーション・ロールに対してこのプロシージャを実行するにはALTER ANY ROLEシステム権限が必要です。

注意:

SET_GUIDが機能するためにはユーザーのexternal_source属性が設定されている必要があります。

構文

SET_GUID (
  principal IN VARCHAR2,
  guid      IN RAW);

パラメータ

パラメータ 説明

principal

外部ユーザーまたはロールの名前。

guid

外部ユーザーまたはロールのGUID。

次の例は、ユーザーAlexのGUIDを設定します。

BEGIN
  SYS.XS_PRINCIPAL.SET_GUID('ALEX','7b6cb3a98f8a4e20ac31a37419cc7fa3');
END;

SET_PROFILEプロシージャ

SET_PROFILEプロシージャは、アプリケーション・ユーザーのプロファイルを設定します。プロファイルは、Real Application Securityアプリケーション・ユーザーのデータベース使用率やデータベース・インスタンス・リソースを制限する、一連のリソース制限およびパスワード・パラメータです。アプリケーション・ユーザーとプロファイルは両方とも、既存のエンティティである必要があります。

このプロシージャを実行するユーザーは、ALTER_USER権限を持っている必要があります。

アプリケーション・ユーザーに割り当てられているプロファイルがカスケード・オプションを使用して削除されると、そのユーザーのデフォルト・プロファイルが自動的に有効になります。

構文

SET_PROFILE (
  user     IN VARCHAR2,
  profile  IN VARCHAR2);

パラメータ

パラメータ 説明

user

Real Application Securityアプリケーション・ユーザーの名前。既存のアプリケーション・ユーザーである必要があります。

profile

プロファイルの名前。

次の例では、profというプロファイルを作成し、profというプロファイルをxsuserというアプリケーション・ユーザーに設定します。

CREATE PROFILE prof LIMIT PASSWORD_REUSE_TIME 1/1440 PASSWORD_REUSE_MAX 3 PASSWORD_VERIFY_FUNCTION Verify_Pass;

BEGIN
  SYS.XS_PRINCIPAL.SET_PROFILE('xsuser','prof');
END;

SET_USER_STATUSプロシージャ

SET_USER_STATUSプロシージャは、アプリケーション・ユーザー・アカウントのステータスを設定または変更します。

アプリケーション・ユーザーに対してこのプロシージャを実行するにはALTER_USER権限が必要です。

構文

SET_USER_STATUS (
  user        IN VARCHAR2,
  status      IN PLS_INTEGER);

パラメータ

パラメータ 説明

user

ステータスを設定または更新する必要のあるユーザー・アカウントの名前。

status

Real Application Securityユーザー・アカウントの新規ステータス。ステータスの値は複数のクラスに分けることができます。

  • ACTIVEおよびINACTIVE - これら2つのアカウント・ステータス値は、ユーザー・アカウントがアプリケーション・セッションを作成する権限およびアプリケーション・セッションに連結する権限に影響します。

    ACTIVEに設定されている場合、アプリケーション・ユーザーは直接ログイン・アカウントを使用して、有効なパスワードでデータベースにログインできます。アカウントに必要なアプリケーション権限がある場合、アプリケーション・ユーザーはアプリケーション・セッションを作成したりアプリケーション・セッションに連結できます。

    INACTIVEに設定されている場合、アプリケーション・ユーザーは有効なパスワードであっても直接ログイン・アカウントを使用してデータベースにログインすることはできず、アプリケーション・セッションを作成したりアプリケーション・セッションに連結することはできません。

  • UNLOCKLOCKEDまたはEXPIRED - これらのステータス値は、直接ログインReal Application Securityアプリケーション・ユーザーについてのみ確認されます。

    UNLOCKに設定されている場合、アカウントがLOCKEDの際にアプリケーション・ユーザー・アカウントが開かれ、アプリケーション・ユーザーは直接ログイン・アカウントを使用して有効なパスワードでデータベースにログインできるようになります。

    LOCKEDに設定されている場合、アプリケーション・ユーザーのアカウントはロックされます。有効なパスワードであっても、直接ログイン・アカウントを使用したユーザー接続は許可されません。アカウントがロックされている場合、ユーザー・アカウントがACTIVEであれば、直接ログインは実行できませんが、ユーザーはアプリケーション・セッションを作成したりアプリケーション・セッションに連結することができます。

    EXPIREDに設定されている場合、アプリケーション・ユーザーのアカウントは期限切れになります。有効なパスワードでの直接ログイン・アカウントを使用したユーザー接続は許可されますが、ログオン時にパスワードを変更する必要があります。

  • PASSWORDEXPIRED (非推奨) - このステータス値はリリース1 (12.1.0.2)以降は非推奨となっています。

パラメータstatusに他の値を渡そうとすると、ORA-46152: XSセキュリティ - 無効なユーザー・ステータスが指定されましたエラーが返されます。

次の例は、ユーザーDJONESのユーザー・ステータスをLOCKEDに設定します。

BEGIN
  SYS.XS_PRINCIPAL.SET_USER_STATUS('DJONES',XS_PRINCIPAL.LOCKED);
END;

SET_PASSWORDプロシージャ

SET_PASSWORDプロシージャは、アプリケーション・ユーザー・アカウントのパスワードを設定または変更します。SET_PASSWORDプロシージャを使用すると、パスワードおよびtypeパラメータに基づいて検証機能が作成され、検証機能とtypeパラメータの値がディクショナリ表に挿入されます。

直接ログインReal Application Securityユーザーは、oldpassパラメータを使用して値を指定することで、自分のパスワードを変更できます。旧パスワードの値が間違っている場合、試行するたびにログイン失敗回数が増加し、ORA-28008: 旧パスワードが正しくありませんエラーが返されます。正しい旧パスワードを指定するまで、新規パスワードは設定されません。

アプリケーション・ユーザーに対してこのプロシージャを実行するには、または他のReal Application Securityユーザーのパスワードを変更するには、ALTER_USER権限が必要です。

外部IDストアから同期されたネイティブのReal Application Securityユーザーは、自分のパスワードを変更できません。これらのユーザーは、元のIDストアで自分のパスワードを変更する必要があります。

ロジカル・スタンバイ・データベースでは、SET_PASSWORD操作とSQL*Plus PASSWORDコマンドは両方ともブロックされます。

構文

SET_PASSWORD (
  user      IN VARCHAR2,
  password  IN VARCHAR2,
  type      IN PLS_INTEGER := XS_SHA512,
  opassword IN VARCHAR2 :=NULL);

パラメータ

パラメータ 説明

user

パスワードを設定するアプリケーション・ユーザー・アカウントの名前。

password

設定するパスワード。

type

パスワードに使用する検索機能のタイプ。デフォルト値はXS_SHA512です。検証機能タイプは、次のいずれかである必要があります。

XS_SHA512, XS_SALTED_SHA1

opassword

旧パスワード。Real Application Securityユーザーが自分のパスワードを変更する場合、このパラメータが必要です。指定されていない場合、ユーザーは自分のパスワードを変更するのに必要な権限を持っている必要があります。

次の例は、アプリケーション・ユーザーSMAVRISのパスワードを設定します。パスワードのXS_SHA512検証機能タイプも指定します。

BEGIN
  SYS.XS_PRINCIPAL.SET_PASSWORD('SMAVRIS','2Hrd2Guess',XS_PRINCIPAL.XS_SHA512);
END;

SET_VERIFIERプロシージャ

SET_VERIFIERプロシージャは、アプリケーション・ユーザー・アカウントの検証機能を設定または変更します。SET_VERIFIERプロシージャを使用すると、検証機能とtypeパラメータの値がディクショナリ表に挿入されます。これにより、管理者はパスワードではなく検証機能の知識があればユーザーをReal Application Securityに移行できます。

アプリケーション・ユーザーに対してこのプロシージャを実行するにはALTER_USER権限が必要です。

ロジカル・スタンバイ・データベースでは、SET_VERIFIER操作とSQL*Plus PASSWORDコマンドは両方ともブロックされます。

構文

set_verifier ( 
  user      IN VARCHAR2,
  verifier  IN VARCHAR2,
  type      IN PLS_INTEGER := XS_SHA512);

パラメータ

パラメータ 説明

user

検証機能の設定対象のアプリケーション・ユーザーの名前。

verifier

検証機能として使用する文字列。

type

使用する検索機能のタイプ。これは、次の中のいずれか1つです:

XS_SHA512, XS_SALTED_SHA1

次の例は、ユーザーSMAVRISの検証機能を設定します。

BEGIN
  SYS.XS_PRINCIPAL.SET_VERIFIER('SMAVRIS','6DFF060084ECE67F',XS_PRINCIPAL.XS_SHA512);
END;

SET_DESCRIPTIONプロシージャ

SET_DESCRIPTIONプロシージャを使用して、アプリケーション・プリンシパルの説明を設定します。

アプリケーション・ユーザーに対してこのプロシージャを実行するにはALTER USERシステム権限が必要です。アプリケーション・ロールに対してこのプロシージャを実行するにはALTER ANY ROLEシステム権限が必要です。

構文

SET_DESCRIPTION (  principal   IN VARCHAR2,  description IN VARCHAR2);

パラメータ

パラメータ 説明

principal

説明を設定するプリンシパルの名前。

description

プリンシパルに関する説明文字列。

次の例は、アプリケーション・ロールHRREPの説明を設定します。

BEGIN
  SYS.XS_PRINCIPAL.SET_DESCRIPTION('HRREP','HR Representative role');
END;

DELETE_PRINCIPALプロシージャ

DELETE_PRINCIPALプロシージャは、アプリケーション・ユーザーまたはアプリケーション・ロールを削除します。

アプリケーション・ユーザーに対してこのプロシージャを実行するにはDROP USERシステム権限が必要です。アプリケーション・ロールに対してこのプロシージャを実行するにはDROP ANY ROLEシステム権限が必要です。

構文

delete_principal (
  principal     IN VARCHAR2,
  delete_option IN PLS_INTEGER:=XS_ADMIN_UTIL.DEFAULT_OPTION);

パラメータ

パラメータ 説明

principal

削除するアプリケーション・ユーザーまたはアプリケーション・ロールの名前。

delete_option

使用する削除オプション。次のオプションがあります。

  • DEFAULT_OPTION:

    デフォルト・オプションでは、他で参照されていない場合にのみプリンシパルを削除できます。プリンシパルを参照する他のエンティティがある場合は、プリンシパルを削除できません。

    たとえば、プリンシパルに付与されたアプリケーション・ロールを削除しようとした場合は、削除操作が失敗します。

  • CASCADE_OPTION:

    カスケード・オプションは、アプリケーション・ユーザーまたはアプリケーション・ロールをそれに対する参照とともに削除します。アプリケーション・ユーザーまたはアプリケーション・ロールを削除するユーザーには、これらの参照を削除する権限も必要です。

  • ALLOW_INCONSISTENCIES_OPTION:

    不整合の許可オプションでは、他のエンティティからエンティティへの遅延バインド参照がある場合でもそのエンティティを削除できます。エンティティが前の依存性の一部である場合は、削除が失敗し、エラーが生成されます。

次の例は、DEFAULT_OPTIONを使用してユーザーSMAVRISを削除します。

BEGIN
  SYS.XS_PRINCIPAL.DELETE_PRINCIPAL('SMAVRIS');
END;

XS_SECURITY_CLASSパッケージ

XS_SECURITY_CLASSパッケージには、セキュリティ・クラスおよびその権限を作成、管理および削除するためのプロシージャが含まれます。パッケージには、セキュリティ・クラスの継承を管理するためのプロシージャも含まれます。

セキュリティ・モデル

XS_SECURITY_CLASSパッケージは、SYSスキーマに作成されます。すべてのスキーマのACL、セキュリティ・クラス、セキュリティ・ポリシーなどのスキーマ・オブジェクトを管理できるADMIN_ANY_SEC_POLICYDBAロールに付与されます。

ユーザーは、スキーマに対するRESOURCEロールを付与されている場合に、自身のスキーマ内のスキーマ・オブジェクトを管理できます。RESOURCEロールおよびXS_RESOURCEアプリケーション・ロールには、スキーマ内のスキーマ・オブジェクトの管理に必要なADMIN_SEC_POLICY権限が含まれます。

XS_SECURITY_CLASSサブプログラムの要約

表11-11 XS_SECURITY_CLASSサブプログラムの要約

サブプログラム 説明

CREATE_SECURITY_CLASSプロシージャ

新規セキュリティ・クラスを作成します。

ADD_PARENTSプロシージャ

指定されたセキュリティ・クラスに1つ以上の親セキュリティ・クラスを追加します。

REMOVE_PARENTSプロシージャ

指定されたセキュリティ・クラスの1つ以上の親セキュリティ・クラスを削除します。

ADD_PRIVILEGESプロシージャ

指定されたセキュリティ・クラスに1つ以上の権限を追加します。

REMOVE_PRIVILEGESプロシージャ

指定されたセキュリティ・クラスの1つ以上の権限を削除します。

ADD_IMPLIED_PRIVILEGESプロシージャ

指定された集約権限に1つ以上の暗黙の権限を追加します。

REMOVE_IMPLIED_PRIVILEGESプロシージャ

集約権限から1つ以上の暗黙の権限を削除します。

SET_DESCRIPTIONプロシージャ

指定されたセキュリティ・クラスの説明文字列を設定します。

DELETE_SECURITY_CLASSプロシージャ

指定されたセキュリティ・クラスを削除します。

CREATE_SECURITY_CLASSプロシージャ

CREATE_SECURITY_CLASSは新規セキュリティ・クラスを作成します。

構文

XS_SECURITY_CLASS.CREATE_SECURITY_CLASS ( 
  name         IN VARCHAR2,
  priv_list    IN XS$PRIVILEGE_LIST,
  parent_list  IN XS$NAME_LIST := NULL,
  description  IN VARCHAR2 := NULL);

パラメータ

パラメータ 説明

name

作成するセキュリティ・クラスの名前。

名前は、SCOTT.SC1のようにスキーマで修飾されます。名前のスキーマ部分がない場合は、現在のセッション・スキーマが想定されます。たとえば、この同じ例では、名前がSC1として指定され、現在のスキーマがSCOTTの場合に、SCOTT.SC1に解決されます。

priv_list

セキュリティ・クラスに含める権限のリスト。

parent_list

セキュリティ・クラスが継承される親セキュリティ・クラスのリスト。これはオプションです。

description

セキュリティ・クラスのオプションの説明。

次の例は、HRPRIVSというセキュリティ・クラスを作成します。セキュリティ・クラスには、priv_listで定義されている権限のセットが含まれます。セキュリティ・クラスは、DMLクラスを親セキュリティ・クラスとして使用します。

DECLARE
  pr_list  XS$PRIVILEGE_LIST;
BEGIN
  pr_list :=XS$PRIVILEGE_LIST(
     XS$PRIVILEGE(name=>'VIEW_SENSITIVE_INFO'),
     XS$PRIVILEGE(name=>'UPDATE_INFO',
                  implied_priv_list=>XS$NAME_LIST
                  ('"UPDATE"', '"DELETE"', '"INSERT"')));
 
  SYS.XS_SECURITY_CLASS.CREATE_SECURITY_CLASS(
     name=>'HRPRIVS', 
     priv_list=>pr_list,
     parent_list=>XS$NAME_LIST('DML'));
END;

ADD_PARENTSプロシージャ

ADD_PARENTSプロシージャは、指定されたセキュリティ・クラスに1つ以上の親セキュリティ・クラスを追加します。

構文

XS_SECURITY_CLASS.ADD_PARENTS (
  sec_class   IN VARCHAR2,
  parent      IN VARCHAR2);

XS_SECURITY_CLASS.ADD_PARENTS (
  sec_class   IN VARCHAR2,
  parent_list IN XS$NAME_LIST);

パラメータ

パラメータ 説明

sec_class

親クラスが追加されるセキュリティ・クラスの名前。

名前は、SCOTT.SC1のようにスキーマで修飾されます。名前のスキーマ部分がない場合は、現在のセッション・スキーマが想定されます。たとえば、この同じ例では、名前がSC1として指定され、現在のスキーマがSCOTTの場合に、SCOTT.SC1に解決されます。

parent

追加される親セキュリティ・クラスの名前。

parent_list

追加する親クラスのリスト。

次の例は、親セキュリティ・クラスGENPRIVSHRPRIVSセキュリティ・クラスに追加します。

BEGIN
  SYS.XS_SECURITY_CLASS.ADD_PARENTS('HRPRIVS','GENPRIVS');
END;

REMOVE_PARENTSプロシージャ

REMOVE_PARENTSプロシージャは、指定されたセキュリティ・クラスの1つ以上の親クラスを削除します。

構文

XS_SECURITY_CLASS.REMOVE_PARENTS (
  sec_class IN VARCHAR2);

XS_SECURITY_CLASS.REMOVE_PARENTS (
  sec_class IN VARCHAR2,
  parent    IN VARCHAR2);

XS_SECURITY_CLASS.REMOVE_PARENTS (
  sec_class   IN VARCHAR2,
  parent_list IN XS$NAME_LIST);

パラメータ

パラメータ 説明

sec_class

親クラスが削除されるセキュリティ・クラスの名前。

名前は、SCOTT.SC1のようにスキーマで修飾されます。名前のスキーマ部分がない場合は、現在のセッション・スキーマが想定されます。たとえば、この同じ例では、名前がSC1として指定され、現在のスキーマがSCOTTの場合に、SCOTT.SC1に解決されます。

parent

削除する親セキュリティ・クラス。

parent_list

削除する親セキュリティ・クラスのリスト。

次の例は、親セキュリティ・クラスGENPRIVSHRPRIVSセキュリティ・クラスから削除します。

BEGIN
  SYS.XS_SECURITY_CLASS.REMOVE_PARENTS('HRPRIVS','GENPRIVS');
END;

ADD_PRIVILEGESプロシージャ

ADD_PRIVILEGESプロシージャは、セキュリティ・クラスに1つ以上の権限を追加します。

構文

XS_SECURITY_CLASS.ADD_PRIVILEGES (
  sec_class         IN VARCHAR2,
  priv              IN VARCHAR2,
  implied_priv_list IN XS$NAME_LIST := NULL,
  description       IN VARCHAR2 := NULL);

XS_SECURITY_CLASS.ADD_PRIVILEGES (
  sec_class  IN VARCHAR2,
  priv_list  IN XS$PRIVILEGE_LIST);

パラメータ

パラメータ 説明

sec_class

権限が追加されるセキュリティ・クラスの名前。

名前は、SCOTT.SC1のようにスキーマで修飾されます。名前のスキーマ部分がない場合は、現在のセッション・スキーマが想定されます。たとえば、この同じ例では、名前がSC1として指定され、現在のスキーマがSCOTTの場合に、SCOTT.SC1に解決されます。

priv

追加する権限の名前。

priv_list

追加する権限のリスト。

implied_priv_list

追加される暗黙の権限のオプションのリスト。

description

追加される権限のオプションの説明。

次の例は、UPDATE_INFOという集約権限をHRPRIVSセキュリティ・クラスに追加します。集約権限には、暗黙の権限UPDATEDELETEおよびINSERTが含まれます。

BEGIN
  SYS.XS_SECURITY_CLASS.ADD_PRIVILEGES(sec_class=>'HRPRIVS',priv=>'UPDATE_INFO',
                                       implied_priv_list=>XS$NAME_LIST('"UPDATE"',
                                                    '"DELETE"', '"INSERT"'));
END;

REMOVE_PRIVILEGESプロシージャ

REMOVE_PRIVILEGESプロシージャは、指定されたセキュリティ・クラスから1つ以上の権限を削除します。権限名またはリストが指定されていない場合は、指定されたセキュリティ・クラスからすべての権限が削除されます。

構文

XS_SECURITY_CLASS.REMOVE_PRIVILEGES (
  sec_class   IN VARCHAR2,
  priv        IN VARCHAR2);

XS_SECURITY_CLASS.REMOVE_PRIVILEGES (
  sec_class    IN VARCHAR2,
  priv_list    IN XS$NAME_LIST);

XS_SECURITY_CLASS.REMOVE_PRIVILEGES (
  sec_class IN VARCHAR2);

パラメータ

パラメータ 説明

sec_class

権限が削除されるセキュリティ・クラスの名前。

名前は、SCOTT.SC1のようにスキーマで修飾されます。名前のスキーマ部分がない場合は、現在のセッション・スキーマが想定されます。たとえば、この同じ例では、名前がSC1として指定され、現在のスキーマがSCOTTの場合に、SCOTT.SC1に解決されます。

priv

削除する権限の名前。

priv_list

削除する権限のリスト。

次の例は、UPDATE_INFO権限をHRPRIVSセキュリティ・クラスから削除します。

BEGIN
  SYS.XS_SECURITY_CLASS.REMOVE_PRIVILEGES('HRPRIVS','UPDATE_INFO');
END;

次の例は、HRPRIVSセキュリティ・クラスからすべての権限を削除します。

BEGIN
  SYS.XS_SECURITY_CLASS.REMOVE_PRIVILEGES('HRPRIVS');
END;

ADD_IMPLIED_PRIVILEGESプロシージャ

ADD_IMPLIED_PRIVILEGESプロシージャは、集約権限に1つ以上の暗黙の権限を追加します。

構文

XS_SECURITY_CLASS.ADD_IMPLIED_PRIVILEGES (
  sec_class    IN VARCHAR2,
  priv         IN VARCHAR2,
  implied_priv IN VARCHAR2);

XS_SECURITY_CLASS.ADD_IMPLIED_PRIVILEGES (
  sec_class         IN VARCHAR2,
  priv              IN VARCHAR2,
  implied_priv_list IN XS$NAME_LIST);

パラメータ

パラメータ 説明

sec_class

権限が追加されるセキュリティ・クラスの名前。

名前は、SCOTT.SC1のようにスキーマで修飾されます。名前のスキーマ部分がない場合は、現在のセッション・スキーマが想定されます。たとえば、この同じ例では、名前がSC1として指定され、現在のスキーマがSCOTTの場合に、SCOTT.SC1に解決されます。

priv

暗黙の権限が追加される集約権限の名前。

implied_priv

追加する暗黙の権限。

implied_priv_list

集約権限に追加する暗黙の権限のリスト。

次の例は、集約権限UPDATE_INFOの暗黙の権限のリストをHRPRIVSセキュリティ・クラスに追加します。

BEGIN
  SYS.XS_SECURITY_CLASS.ADD_IMPLIED_PRIVILEGES(sec_class=>'HRPRIVS', priv=>'UPDATE_INFO', implied_priv_list=>XS$NAME_LIST('"UPDATE"', '"DELETE"', '"INSERT"'));
END;

REMOVE_IMPLIED_PRIVILEGESプロシージャ

REMOVE_IMPLIED_PRIVILEGESプロシージャは、集約権限から指定された暗黙の権限を削除します。権限が指定されていない場合は、すべての暗黙の権限が集約権限から削除されます。

構文

XS_SECURITY_CLASS.REMOVE_IMPLIED_PRIVILEGES (
  sec_class    IN VARCHAR2,
  priv         IN VARCHAR2,
  implied_priv IN VARCHAR2);

XS_SECURITY_CLASS.REMOVE_IMPLIED_PRIVILEGES (
  sec_class         IN VARCHAR2,
  priv              IN VARCHAR2,
  implied_priv_list IN XS$NAME_LIST);

XS_SECURITY_CLASS.REMOVE_IMPLIED_PRIVILEGES (
  sec_class   IN VARCHAR2,
  priv        IN VARCHAR2);

パラメータ

パラメータ 説明

sec_class

権限が削除されるセキュリティ・クラスの名前。

名前は、SCOTT.SC1のようにスキーマで修飾されます。名前のスキーマ部分がない場合は、現在のセッション・スキーマが想定されます。たとえば、この同じ例では、名前がSC1として指定され、現在のスキーマがSCOTTの場合に、SCOTT.SC1に解決されます。

priv

暗黙の権限が削除される集約権限の名前。

implied_priv

集約権限から削除する暗黙の権限。

implied_priv_list

集約権限から削除する暗黙の権限のリスト。

次の例は、集約権限UPDATE_INFOの暗黙の権限DELETEHRPRIVSセキュリティ・クラスから削除します。

BEGIN
  SYS.XS_SECURITY_CLASS.REMOVE_IMPLIED_PRIVILEGES('HRPRIVS','UPDATE_INFO','"DELETE"');
END;

次の例は、集約権限UPDATE_INFOのすべての暗黙の権限をHRPRIVSセキュリティ・クラスから削除します。

BEGIN
  SYS.XS_SECURITY_CLASS.REMOVE_IMPLIED_PRIVILEGES('HRPRIVS','UPDATE_INFO');
END;

SET_DESCRIPTIONプロシージャ

SET_DESCRIPTIONプロシージャは、指定されたセキュリティ・クラスの説明文字列を設定します。

構文

XS_SECURITY_CLASS.SET_DESCRIPTION (
  sec_class   IN VARCHAR2,
  description IN VARCHAR2);

パラメータ

パラメータ 説明

sec_class

説明を設定するセキュリティ・クラスの名前。

名前は、SCOTT.SC1のようにスキーマで修飾されます。名前のスキーマ部分がない場合は、現在のセッション・スキーマが想定されます。たとえば、この同じ例では、名前がSC1として指定され、現在のスキーマがSCOTTの場合に、SCOTT.SC1に解決されます。

description

指定されたセキュリティ・クラスの説明文字列。

次の例は、HRPRIVSセキュリティ・クラスの説明文字列を設定します。

BEGIN
  SYS.XS_SECURITY_CLASS.SET_DESCRIPTION(
    'HRPRIVS','Contains privileges required to manage HR data');
END;

DELETE_SECURITY_CLASSプロシージャ

DELETE_SECURITY_CLASSプロシージャは、指定されたセキュリティ・クラスを削除します。

構文

XS_SECURITY_CLASS.DELETE_SECURITY_CLASS ( 
  sec_class     IN VARCHAR2,
  delete_option IN NUMBER:=XS_ADMIN_UTIL.DEFAULT_OPTION); 

パラメータ

パラメータ 説明

sec_class

削除するセキュリティ・クラスの名前。

名前は、SCOTT.SC1のようにスキーマで修飾されます。名前のスキーマ部分がない場合は、現在のセッション・スキーマが想定されます。たとえば、この同じ例では、名前がSC1として指定され、現在のスキーマがSCOTTの場合に、SCOTT.SC1に解決されます。

delete_option

使用する削除オプション。次のオプションがあります。

  • DEFAULT_OPTION:

    デフォルト・オプションでは、他で参照されていない場合にのみセキュリティ・クラスを削除できます。セキュリティ・クラスを参照する他のエンティティがある場合は、セキュリティ・クラスを削除できません。

  • CASCADE_OPTION:

    カスケード・オプションは、セキュリティ・クラスをそれに対する参照とともに削除します。セキュリティ・クラスを削除するユーザーには、これらの参照を削除する権限も必要です。

  • ALLOW_INCONSISTENCIES_OPTION:

    不整合の許可オプションでは、他のエンティティからエンティティへの遅延バインド参照がある場合でもそのエンティティを削除できます。

次の例は、デフォルト・オプションを使用してHRPRIVSセキュリティ・クラスを削除します。

BEGIN
  SYS.XS_SECURITY_CLASS.DELETE_SECURITY_CLASS('HRPRIVS',XS_ADMIN_UTIL.DEFAULT_OPTION);
END;