この章では、Oracle Database Real Application Securityで使用可能なPL/SQLパッケージについて説明します。
表11-1にこれらのパッケージを示します。各パッケージの詳細情報は、この表の後にあります。
表11-1 Oracle Database Real Application Security PL/SQLパッケージ
| PL/SQLパッケージ | 説明 |
|---|---|
アプリケーション・セッションを管理するサブプログラムを含みます。 |
|
アクセス制御リスト(ACL)の作成、管理、削除、およびパラメータ値の追加と削除を行うためのサブプログラムが含まれます。 |
|
ヘルパー・サブプログラムが含まれます。 |
|
データ・セキュリティ・ポリシー、関連データ・レルム制約、列制約およびACLパラメータを作成、管理、削除するためのサブプログラムが含まれます。 |
|
ユーザー表への静的ACLの自動リフレッシュをスケジュール、およびACLリフレッシュ・モードをコミット時またはオンデマンド・リフレッシュに変更するためのサブプログラムが含まれます。 |
|
Real Application Securityオブジェクトの潜在的な問題を診断し、識別された矛盾をレポートするためのサブプログラムが含まれます。 |
|
ネームスペース・テンプレートおよび属性を作成、管理および削除するためのサブプログラムが含まれます。 |
|
アプリケーション・ユーザーおよびロールを作成、管理および削除するためのサブプログラムが含まれます。 |
|
セキュリティ・クラスおよびその権限を作成、管理および削除するためのサブプログラムが含まれます。セキュリティ・クラスの継承を管理するためのサブプログラムも含まれます。 |
次の定数は、ネームスペース・イベント処理ファンクションに渡される操作コードを定義します。
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_CALLBACK、DELETE_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;
表11-2 DBMS_XS_SESSIONSサブプログラムの要約
| サブプログラム | 説明 |
|---|---|
指定されたアプリケーション・ユーザー名の新規アプリケーション・セッションを作成します。 |
|
現在の従来型データベース・セッションを、セッションIDで識別されるアプリケーション・セッションに連結します。 |
|
指定されたユーザーを現在連結されている匿名Real Application Securityセッションに割り当てます。 |
|
現在連結されているセッションのアプリケーション・ユーザーを切り替えます。 |
|
現在連結されているアプリケーション・セッションに新規アプリケーション・ネームスペースを作成します。 |
|
現在連結されているアプリケーション・セッションの指定されたアプリケーション・ネームスペースに新規カスタム属性を作成します。 |
|
現在連結されているアプリケーション・セッションのネームスペース内の指定された属性に新しい値を設定します。 |
|
現在連結されているアプリケーション・セッションのネームスペース内の属性の値を取得します。 |
|
現在連結されているアプリケーション・セッションの指定したネームスペース内のアプリケーション・ネームスペース属性を元の値にリセットします。 |
|
現在連結されているアプリケーションの指定したネームスペースから指定した属性を削除します。 |
|
現在連結されているアプリケーション・セッションから指定されたネームスペースおよびその属性を削除します。 |
|
現在連結されているアプリケーション・セッションで実際のアプリケーション・ロールを有効にします。 |
|
現在連結されているアプリケーション・セッションから実際のアプリケーション・ロールを無効にします。 |
|
指定されたセッションIDで新しいCookie値を設定します。 |
|
指定されたセッションIDで識別されるセッションの最終認証時刻を更新します。 |
|
指定されたセッションの非アクティブ・タイムアウト値を分単位で設定します。 |
|
現在連結されているセッションで実行された変更を保存または永続化します。 |
|
現在の従来型データベース・セッションを、連結先のアプリケーション・セッションから連結解除します。 |
|
セッションIDで指定されたセッションを破棄または終了します。 |
|
既存のイベント・ハンドラをデータベースに登録します。 |
|
|
|
既存のグローバル・コールバック・アソシエーションを削除します。 |
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);
パラメータ
| パラメータ | 説明 |
|---|---|
|
アプリケーション・セッションを作成する標準アプリケーション・ユーザーまたは外部アプリケーション・ユーザーの名前。 現在のセッションのユーザー名およびアプリケーション・ロールのリストを検索するには、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; |
|
新規に作成したアプリケーション・セッションのセッションID。次のいずれかの方法を使用して、セッションIDを取得できます。
|
|
セッションを外部プリンシパル・セッションとして作成するかどうか指定します。これは、オプションのパラメータです。デフォルト値は |
|
セッションを信頼モードとセキュア・モードのどちらで作成するかを指定します。信頼モードでは、データ・セキュリティ・チェックがバイパスされます。セキュア・モードでは、データセキュリティ・チェックが施行されます。これは、オプションのパラメータです。デフォルト値は |
|
名前、属性および属性値の3つのリスト。ネームスペースがセッションからアクセスできないか、このようなネームスペース・テンプレートが存在しない場合は、エラーがスローされます。 |
|
セッションに対して設定するサーバーCookieを指定します。これは、オプションのパラメータです。デフォルト値は |
例
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プロシージャは、現在の従来型データベース・セッションをセッション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);
パラメータ
| パラメータ | 説明 |
|---|---|
|
アプリケーション・セッションのセッションID。次のいずれかの方法を使用して、セッションIDを取得できます。
|
|
アプリケーション・セッションで有効にする、付与する動的ロールのリスト。これは、オプションのパラメータです。指定されたいずれかの動的ロールが存在しない場合は、セッションの連結が失敗します。セッションが外部プリンシパル・セッションの場合は、有効にする外部ロールのリストを指定できます。これらのロールは連結解除されるまで有効なままになり、次の連結でデフォルトでは有効になりません。 現在のセッションのアプリケーション・ロールのリストを検索するには、DBA_XS_SESSION_ROLESデータ・ディクショナリ・ビューを問い合せます。すべての動的アプリケーション・ロールのリストを検索するには、DBA_XS_PRINCIPALSデータ・ディクショナリ・ビューを次のように問い合せます。 SELECT NAME, TYPE FROM DBA_XS_PRINCIPALS; |
|
セッションで無効にする動的ロールのリスト。これは、オプションのパラメータです。 |
|
セッションが外部プリンシパル・セッションの場合に外部ロールのリスト。これは、オプションのパラメータです。これらの外部ロールは連結解除操作まで有効なままになり、次の連結でデフォルトでは再度有効になりません。 |
|
セッションに対して更新された認証時刻。これは、オプションのパラメータです。時刻は次の形式で指定する必要があります。
|
|
名前、属性および属性値の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プロシージャは、指定されたアプリケーション・ユーザーを現在連結されている匿名アプリケーション・セッションに割り当てます。
現在のセッションで有効になっているロールは、この操作後も保持されます。オプションのパラメータ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);
パラメータ
| パラメータ | 説明 |
|---|---|
|
実際のアプリケーション・ユーザーの名前。 既存のアプリケーション・ユーザーのリストを検索するには、DBA_XS_PRINCIPALSデータ・ディクショナリ・ビューを次のように問い合せます。 SELECT NAME FROM DBA_XS_PRINCIPALS; |
|
指定されたアプリケーション・ユーザーが外部ユーザーかどうかを指定します。これは、オプションのパラメータです。デフォルト値は |
|
アプリケーション・セッションで有効にする動的ロールのリスト。これは、オプションのパラメータです。 現在のセッションのアプリケーション・ロールのリストを検索するには、V$XS_SESSION_ROLESデータ・ディクショナリ・ビューを問い合せます。すべての動的アプリケーション・ロールのリストを検索するには、DBA_XS_DYNAMIC_ROLESデータ・ディクショナリ・ビューを次のように問い合せます。 SELECT NAME FROM DBA_XS_DYNAMIC_ROLES; |
|
セッションで無効にする動的ロールのリスト。これは、オプションのパラメータです。 |
|
アプリケーション・ユーザーが外部アプリケーション・ユーザーの場合に外部ロールのリスト。これは、オプションのパラメータです。 |
|
セッションに対して更新された認証時刻。これは、オプションのパラメータです。時刻は次の形式で指定する必要があります。
|
|
名前、属性および属性値の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プロシージャは、現在連結されているセッションのアプリケーション・ユーザーを切り替えます。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);
パラメータ
| パラメータ | 説明 |
|---|---|
|
切替え先のセキュリティ・コンテキストを持つユーザーのユーザー名。 既存のアプリケーション・ユーザーのリストを検索するには、DBA_XS_USERSデータ・ディクショナリ・ビューを次のように問い合せます。 SELECT NAME FROM DBA_XS_USERS; |
|
アプリケーション・ネームスペースが保持されるかどうかを制御します。 可能な値は次のとおりです。
|
|
名前、属性および属性値の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プロシージャは、現在連結されているアプリケーション・セッションに新規ネームスペースを作成します。ネームスペースに対応するネームスペース・テンプレートがシステムに存在する必要があり、存在しないと、この操作はエラーをスローします。この操作の後、ネームスペースおよびテンプレートに作成されたその属性がセッションで使用可能になります。
コール元のユーザーには、MODIFY_NAMESPACEアプリケーション権限が必要です。
構文
CREATE_NAMESPACE( namespace IN VARCHAR2);
パラメータ
| パラメータ | 説明 |
|---|---|
|
作成するネームスペースの名前。この名前の既存のネームスペース・テンプレート・ドキュメントが必要です。大/小文字を区別する文字列の最大サイズは128文字です。 現在のセッションの既存のネームスペースのリストを検索するには、連結後に
|
例
BEGIN
SYS.DBMS_XS_SESSIONS.CREATE_NAMESPACE('J_NS1');
END;
CREATE_ATTRIBUTEプロシージャは、現在連結されているアプリケーション・セッションの指定されたネームスペースに新規カスタム属性を作成します。ネームスペースがセッションですでに使用可能でないかこのようなネームスペース・テンプレートが存在しない場合は、エラーがスローされます。
コール元ユーザーにはMODIFY_ATTRIBUTEアプリケーション権限が付与されている必要があります。
構文
PROCEDURE create_attribute( namespace IN VARCHAR2, attribute IN VARCHAR2, value IN VARCHAR2 DEFAULT NULL, eventreg IN PLS_INTEGER DEFAULT NULL);
パラメータ
| パラメータ | 説明 |
|---|---|
|
属性が作成されるネームスペース。セッションにネームスペースが存在しない場合は、エラーがスローされます。大/小文字を区別する文字列の最大サイズは128文字です。 |
|
作成する属性の名前。大/小文字を区別する文字列の最大サイズは4000文字です。 |
|
属性のデフォルト値。大/小文字を区別する文字列の最大サイズは4000文字です。 |
|
属性に対してハンドラが実行されるイベント。これは、オプションのパラメータです。このパラメータの値は、次のいずれかです。
属性が最初の読取りイベントに対して登録されている場合、ハンドラは、値を戻す前に属性が初期化されていない場合に実行されます。更新イベントが登録されている場合は、属性が変更されるたびにハンドラがコールされます。イベントは、ネームスペースにイベント・ハンドラがある場合にのみ登録でき、それ以外の場合はエラーがスローされます。 |
例
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プロシージャは、現在連結されているセッションに関連付けられているネームスペースの指定された属性に新しい値を設定します。ハンドラ・ファンクションは、属性に対してupdateイベントが設定されている場合にコールされます。ネームスペースが存在しないか削除されている場合は、エラーがスローされます。存在するネームスペースに対応するテンプレートがない場合は、エラーがスローされます。
コール元ユーザーにはMODIFY_ATTRIBUTEアプリケーション権限が付与されている必要があります。
構文
SET_ATTRIBUTE ( namespace IN VARCHAR2, attribute IN VARCHAR2, value IN VARCHAR2);
パラメータ
| パラメータ | 説明 |
|---|---|
|
属性に関連付けられているネームスペースの名前。大/小文字を区別する文字列の最大サイズは128文字です。 現在のセッションの既存のネームスペースのリストを検索するには、連結後に
|
|
既存のネームスペース内の既存の属性の名前。 既存のネームスペース属性のリストを検索するには、V$XS_SESSION_NS_ATTRIBUTESデータ・ディクショナリ・ビューを問い合せます。 |
|
属性の新規の値。大/小文字を区別する文字列の最大サイズは4000文字です。 属性に関連付けられている既存の値のリストを検索するには、V$XS_SESSION_NS_ATTRIBUTESデータ・ディクショナリ・ビューを問い合せます。 |
例
BEGIN
SYS.DBMS_XS_SESSIONS.SET_ATTRIBUTE('J_NS','JohnNSAttr1','John bio');
END;
GET_ATTRIBUTEプロシージャは、現在連結されているセッションのネームスペースの指定された属性の値を取得します。ネームスペースに対応するテンプレートが存在しない場合は、エラーがスローされます。指定された属性が存在しない場合は、空の文字列が戻されます。
属性値がNULLで、firstReadイベントが設定され、このとき初めて属性値がフェッチされる場合は、属性のハンドラ・ファンクションがコールされます。
コール元ユーザーには、どの権限も付与されている必要はありません。
構文
GET_ATTRIBUTE ( namespace IN VARCHAR2, attribute IN VARCHAR2, value OUT NOCOPY VARCHAR2);
パラメータ
| パラメータ | 説明 |
|---|---|
|
取得する属性のネームスペース。大/小文字を区別する文字列の最大サイズは128文字です。 現在のセッションの既存のネームスペースのリストを検索するには、連結後に |
|
取得する属性の名前。大/小文字を区別する文字列の最大サイズは4000文字です。使用可能な属性のリストを検索するには、V$XS_SESSION_NS_ATTRIBUTESデータ・ディクショナリ・ビューを問い合せます。 |
|
取得する属性の値。 使用可能な属性値のリストを検索するには、V$XS_SESSION_NS_ATTRIBUTESデータ・ディクショナリ・ビューを問い合せます。 |
例
DECLARE attrVal VARCHAR2(4000);
BEGIN
SYS.DBMS_XS_SESSIONS.GET_ATTRIBUTE('J_NS1','JohnNS1Attr1',attrVal);
END;
RESET_ATTRIBUTEプロシージャは、現在連結されているセッションのネームスペース内で属性の値をデフォルト値(存在する場合)またはNULLにリセットします。属性にデフォルト値が指定されている場合、値はデフォルト値にリセットされます。属性がデフォルト値なしで作成され、attribute_first_read_eventでマークされている場合は、値がNULLに設定され、未初期化としてマークされます。属性がデフォルト値なしで作成され、attribute_first_read_eventでマークされていない場合は、値がNULLに設定されます。
コール元ユーザーにはMODIFY_ATTRIBUTEアプリケーション権限が付与されている必要があります。
構文
PROCEDURE reset_attribute( namespace IN VARCHAR2, attribute IN VARCHAR2);
パラメータ
| パラメータ | 説明 |
|---|---|
|
属性を含むネームスペースの名前。大/小文字を区別する文字列の最大サイズは128文字です。 |
|
リセットする属性の名前。大/小文字を区別する文字列の最大サイズは4000文字です。 |
例
BEGIN
SYS.DBMS_XS_SESSIONS.RESET_ATTRIBUTE('ns2','attr1');
END;
DELETE_ATTRIBUTEプロシージャは、現在連結されているセッションの指定されたネームスペースから指定された属性および関連付けられている値を削除します。カスタム属性のみ削除できます。テンプレート属性は削除できません。指定された属性が存在しない場合は、エラーがスローされます。
コール元アプリケーションにはMODIFY_ATTRIBUTEアプリケーション権限が付与されている必要があります。
構文
DELETE_ATTRIBUTE ( namespace IN VARCHAR2, attribute IN VARCHAR2);
パラメータ
| パラメータ | 説明 |
|---|---|
|
削除する属性に関連付けられているネームスペース。大/小文字を区別する文字列の最大サイズは128文字です。 現在のセッションの既存のネームスペースのリストを検索するには、連結後に
|
|
削除する属性。 現在のセッションの既存のネームスペースのリストを検索するには、連結後に |
例
BEGIN
SYS.DBMS_XS_SESSIONS.DELETE_ATTRIBUTE('JohnNS1','JohnNS1Attr1');
END;
DELETE_NAMESPACEプロシージャは、ネームスペースおよびその属性を現在連結されているアプリケーション・セッションから削除します。
コール元のユーザーには、MODIFY_NAMESPACEアプリケーション権限が必要です。
構文
DELETE_NAMESPACE ( namespace IN VARCHAR2);
パラメータ
| パラメータ | 説明 |
|---|---|
|
削除するネームスペースの名前。大/小文字を区別する文字列の最大サイズは128文字です。 現在のセッションの既存のネームスペースのリストを検索するには、連結後に
|
例
BEGIN
SYS.DBMS_XS_SESSIONS.DELETE_NAMESPACE('JohnNS1');
END;
ENABLE_ROLEプロシージャは、現在連結されているアプリケーション・セッションで実際のアプリケーション・ロールを有効にします。ロールがすでに有効になっている場合、ENABLE_ROLEプロシージャはアクションを実行しません。このプロシージャは、現在のアプリケーション・ユーザーに直接付与されている標準アプリケーション・ロールのみ有効にします。動的アプリケーション・ロールは有効にできません。
この操作では、コール元ユーザーにアプリケーション権限は不要です。
構文
ENABLE_ROLE ( role IN VARCHAR2);
パラメータ
| パラメータ | 説明 |
|---|---|
|
有効にするロールの名前。大/小文字を区別する文字列の最大サイズは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 ( role IN VARCHAR2);
パラメータ
| パラメータ | 説明 |
|---|---|
|
無効にするロールの名前。大/小文字を区別する文字列の最大サイズは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プロシージャは、指定されたセッションIDで新しいCookie値を設定します。指定されたセッションが存在しないかCookie名がすべてのユーザー・アプリケーション・セッション間で一意でない場合は、エラーがスローされます。
このプロシージャを実行するには、ユーザーにMODIFY_SESSIONアプリケーション権限が付与されている必要があります。
構文
SET_SESSION_COOKIE ( cookie IN VARCHAR2, sessionid IN RAW DEFAULT NULL);
パラメータ
| パラメータ | 説明 |
|---|---|
|
新規Cookieの名前。Cookieに対して許可される最大長は1024文字です。Cookie名は一意にする必要があります。 現在のセッションの既存のCookiesのリストを検索するには、 |
|
アプリケーション・セッションのセッションID。デフォルト値は
セッション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プロシージャは、指定されたセッションIDの最終認証時刻を現在の時刻で更新します。アプリケーションは、アプリケーション・ユーザーを再認証したときにこのプロシージャをコールする必要があります。
REAUTH_SESSIONプロシージャを使用して、アプリケーションまたは中間層サーバーで最近認証されていないためタイムアウトになったロールを有効にします。reauthSession Javaメソッドをコールすることもできます。
このファンクションを実行するには、ユーザーにMODIFY_SESSIONアプリケーション権限が付与されている必要があります。
構文
REAUTH_SESSION ( sessionid IN RAW DEFAULT NULL);
パラメータ
| パラメータ | 説明 |
|---|---|
|
アプリケーション・セッションのセッションID。このパラメータはオプションです。デフォルト値は
セッションIDを指定しないか |
例
DECLARE sessionid RAW(16); BEGIN SYS.DBMS_XS_SESSIONS.REAUTH_SESSION(sessionid); END;
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);
パラメータ
| パラメータ | 説明 |
|---|---|
|
分単位での非アクティブ・タイムアウト値。 |
|
アプリケーション・セッションのセッションID。デフォルト値は
セッションIDを指定しないか |
例
DECLARE
sessionid RAW(16);
BEGIN
SYS.DBMS_XS_SESSIONS.CREATE_SESSION('lwuser1', sessionid);
SYS.DBMS_XS_SESSIONS.SET_INACTIVITY_TIMEOUT (300, sessionid);
END;
/
DETACH_SESSIONプロシージャは、現在の従来型データベース・セッションを、連結先のアプリケーション・セッションから連結解除します。データベース・セッションは、アプリケーション・セッションに連結する前のコンテキストに戻ります。操作を実行するために権限は必要ないため、任意のユーザーがこのプロシージャを実行できます。
構文
DETACH_SESSION (abort IN BOOLEAN DEFAULT FALSE);
パラメータ
| パラメータ | 説明 |
|---|---|
|
|
例
BEGIN SYS.DBMS_XS_SESSIONS.DETACH_SESSION; END;
DESTROY_SESSIONプロシージャは、指定されたセッションを破棄します。このプロシージャは、アプリケーション・セッションからすべての従来のセッションも暗黙的に連結解除します。セッションが破棄された後は、セッションに対してそれ以上連結を実行できません。この操作では、アプリケーション・ユーザーの直接ログオンを通じて作成されたセッションは破棄できません。
このプロシージャを実行するには、ユーザーにTERMINATE_SESSIONアプリケーション権限が必要です。
構文
DESTROY_SESSION ( sessionid IN RAW, force IN BOOLEAN DEFAULT FALSE);
パラメータ
| パラメータ | 説明 |
|---|---|
|
アプリケーション・セッションのセッションID。次のいずれかの方法を使用して、セッションIDを取得できます。
セッションIDを指定しないか |
|
|
例
DECLARE
sessionid RAW(16);
BEGIN
SYS.DBMS_XS_SESSIONS.CREATE_SESSION('lwtSession1', sessionid);
SYS.DBMS_XS_SESSIONS.DESTROY_SESSION (sessionid);
END;
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);
パラメータ
| パラメータ | 説明 |
|---|---|
|
次のイベント・タイプから選択します。
|
|
コールバック・プロシージャが作成されたスキーマの名前を入力します。 |
|
コールバック・プロシージャが作成されたパッケージの名前を入力します。コールバック・プロシージャがスタンドアロンの場合は、 |
|
グローバル・コールバックを定義するプロシージャの名前を入力します。 |
例
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( 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);
パラメータ
| パラメータ | 説明 |
|---|---|
|
次のイベント・タイプから選択します。
|
|
グローバル・コールバックを有効にするか無効にするかを指定します。デフォルト値は |
|
グローバル・コールバックが作成されたスキーマの名前を入力します。 |
|
グローバル・コールバックが作成されたパッケージの名前を入力します。 |
|
グローバル・コールバックを定義するプロシージャの名前を入力します。 |
例
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( event_type IN PLS_INTEGER, callback_schema IN VARCHAR2 DEFAULT NULL, callback_package IN VARCHAR2 DEFAULT NULL, callback_procedure IN VARCHAR2 DEFAULT NULL);
パラメータ
| パラメータ | 説明 |
|---|---|
|
次のイベント・タイプから選択します。
|
|
グローバル・コールバックが作成されたスキーマの名前を入力します。 |
|
グローバル・コールバックが作成されたパッケージの名前を入力します。 |
|
グローバル・コールバックを定義するプロシージャの名前を入力します。 |
例
BEGIN SYS.DBMS_XS_SESSIONS.DELETE_GLOBAL_CALLBACK ( DBMS_XS_SESSIONS.CREATE_SESSION_EVENT, 'APPS1_SCHEMA','APPS2_PKG','CREATE_SESSION_CB'); END;
このパッケージには、次のオブジェクト・タイプ、コンストラクタ・ファンクション、シノニムおよび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;
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;
表11-3 XS_ACLサブプログラムの要約
| サブプログラム | 説明 |
|---|---|
アクセス制御リスト(ACL)を作成します。 |
|
1つ以上のアクセス制御エントリ(ACE)を既存のACLに追加します。 |
|
ACLからすべてのACEを削除します。 |
|
ACLのセキュリティ・クラスを設定または変更します。 |
|
ACLの親ACLを設定または変更します。 |
|
データ・セキュリティ・ポリシーのACLパラメータ値を追加します。 |
|
ACLのACLパラメータと値を削除します。 |
|
ACLの説明文字列を設定します。 |
|
指定された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);
パラメータ
| パラメータ | 説明 |
|---|---|
|
作成するACLの名前。 名前は、 |
|
ACL内のアクセス制御エントリ(ACE)のリスト。 |
|
ACLのスコープまたはタイプを指定するセキュリティ・クラスの名前。セキュリティ・クラスが指定されていない場合は、 名前は、 |
|
親ACL名(存在する場合)。 名前は、 |
|
親ACLが指定されている場合に継承モード。使用できる値は |
|
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プロシージャは、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);
パラメータ
| パラメータ | 説明 |
|---|---|
|
ACEを追加するACLの名前。 名前は、 |
|
ACLに追加するACE。 |
|
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プロシージャは、ACLからすべてのACEを削除します。
構文
XS_ACL.REMOVE_ACES ( acl IN VARCHAR2);
パラメータ
| パラメータ | 説明 |
|---|---|
|
ACEを削除するACLの名前。 名前は、 |
例
次の例は、HRACLというACLからすべてのACEを削除します。
BEGIN
SYS.XS_ACL.REMOVE_ACES('HRACL');
END;
構文
XS_ACL.SET_SECURITY_CLASS ( acl IN VARCHAR2, sec_class IN VARCHAR2);
パラメータ
| パラメータ | 説明 |
|---|---|
|
セキュリティ・クラスを設定するACLの名前。 名前は、 |
|
ACLのスコープまたはタイプを定義するセキュリティ・クラスの名前。 名前は、 |
例
次の例は、HRPRIVSセキュリティ・クラスをHRACL ACLに関連付けます。
BEGIN
SYS.XS_ACL.SET_SECURITY_CLASS('HRACL','HRPRIVS');
END;
SET_PARENT_ACLは、ACLの親ACLを設定または変更します。
構文
XS_ACL.SET_PARENT_ACL( acl IN VARCHAR2, parent IN VARCHAR2, inherit_mode IN PLS_INTEGER);
パラメータ
| パラメータ | 説明 |
|---|---|
|
親を設定する必要があるACLの名前。 名前は、 |
|
親ACLの名前。 名前は、 |
|
継承モード。これは、次のいずれかの値です。
|
例
次の例では、AllDepACL ACLをHRACL ACLの親のACLとして設定しています。継承タイプはEXTENDEDに設定されます。
BEGIN
SYS.XS_ACL.SET_PARENT_ACL('HRACL','AllDepACL',XS_ACL.EXTENDED);
END;
構文
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パラメータが作成されたデータ・セキュリティ・ポリシーの名前。 名前は、 |
|
データ・セキュリティ・ポリシーで定義されているACLパラメータの名前。 |
|
使用するACLパラメータの値。 |
例
次の例は、ACL1のREGIONパラメータを追加します。ACLパラメータが作成されるデータ・セキュリティ・ポリシーの名前はTEST_DSです。REGIONパラメータの値はWESTです。
BEGIN
SYS.XS_ACL.ADD_ACL_PARAMETER('ACL1','TEST_DS','REGION', 'WEST');
END;
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から削除する必要のあるパラメータの名前。 |
例
次の例は、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プロシージャは、ACLの説明文字列を設定します。
構文
XS_ACL.SET_DESCRIPTION ( acl IN VARCHAR2, description IN VARCHAR2);
パラメータ
| パラメータ | 説明 |
|---|---|
|
説明を設定するACLの名前。 名前は、 |
|
ACLの説明文字列。 |
例
次の例は、HRACL ACLの説明を設定します。
BEGIN
SYS.XS_ACL.SET_DESCRIPTION('HRACL','Grants privileges to HR representatives and
managers.');
END;
DELETE_ACLプロシージャは、指定されたACLを削除します。
構文
XS_ACL.DELETE_ACL ( acl IN VARCHAR2, delete_option IN PLS_INTEGER := XS_ADMIN_UTIL.DEFAULT_OPTION);
パラメータ
| パラメータ | 説明 |
|---|---|
|
削除するACLの名前。 名前は、 |
|
使用する削除オプション。データ・セキュリティ・ポリシーに対して、次のオプションの動作は同じです。
|
例
次の例は、デフォルトの削除オプションを使用してHRACL ACLを削除します。
BEGIN
SYS.XS_ACL.DELETE_ACL('HRACL');
END;
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;
表11-4 XS_ADMIN_UTILサブプログラムの要約
| サブプログラム | 簡単な説明 |
|---|---|
ユーザーまたはロールにReal Application Securityシステム権限を付与します。 |
|
ユーザーまたはロールからReal Application Securityシステム権限を取り消します。 |
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);
パラメータ
| パラメータ | 説明 |
|---|---|
|
付与するReal Application Securityセキュリティ・クラス権限の名前を指定します。 |
|
Real Application Securityセキュリティ・クラス権限を付与するユーザーまたはロールの名前を指定します。 |
|
ユーザーのタイプ。デフォルトではデータベース・ユーザーです。 |
例
次の例では、データベース・ユーザー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を使用して、ユーザーまたはロールから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);
パラメータ
| パラメータ | 説明 |
|---|---|
|
取り消すReal Application Securityセキュリティ・クラス権限の名前を指定します。 |
|
Real Application Securityセキュリティ・クラス権限を取り消すユーザーまたはロールの名前を指定します。 |
|
ユーザーのタイプ。デフォルトではデータベース・ユーザーです。 |
例
次の例では、データベース・ユーザー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);
このパッケージには、次のオブジェクト・タイプ、コンストラクタ・ファンクション、シノニムおよび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_POLICYがDBAロールに付与されます。また、ADMIN_ANY_SEC_POLICYを付与されているユーザーは、ENABLE_OBJECT_POLICY、DISABLE_OBJECT_POLICY、APPLY_OBJECT_POLICYおよびREMOVE_OBJECT_POLICYプロシージャをコールできます。
ユーザーは、スキーマに対するRESOURCEロールを付与されている場合に、自身のスキーマ内のスキーマ・オブジェクトを管理できます。RESOURCEロールおよびXS_RESOURCEアプリケーション・ロールには、スキーマ内のスキーマ・オブジェクトの管理に必要なADMIN_SEC_POLICY権限が含まれます。
表11-5 XS_DATA_SECURITYサブプログラムの要約
| サブプログラム | 簡単な説明 |
|---|---|
新規データ・セキュリティ・ポリシーを作成します。 |
|
1つ以上のデータ・レルム制約を既存のデータ・セキュリティ・ポリシーに追加します。 |
|
指定されたデータ・セキュリティ・ポリシーのすべてのデータ・レルム制約を削除します。 |
|
1つ以上の列制約を指定されたデータ・セキュリティ・ポリシーに追加します。 |
|
データ・セキュリティ・ポリシーからすべての列制約を削除します。 |
|
指定されたデータ・セキュリティ・ポリシーのACLパラメータを作成します。 |
|
指定されたデータ・セキュリティ・ポリシーからACLパラメータを削除します。 |
|
指定されたデータ・セキュリティ・ポリシーの説明文字列を設定します。 |
|
データ・セキュリティ・ポリシーを削除します。 |
表11-6 表またはビューでデータ・セキュリティ・ポリシーを管理するためのXS_DATA_SECURITYサブプログラムの要約
| サブプログラム | 簡単な説明 |
|---|---|
指定された表またはビューのデータ・セキュリティ・ポリシーを有効にします。 |
|
指定された表またはビューのデータ・セキュリティ・ポリシーを無効にします。 |
|
指定された表またはビューを削除せずに、そこからデータ・セキュリティを削除します。 |
|
指定された表またはビューのデータ・セキュリティ・ポリシーを有効または再度有効にします。 |
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) ;
パラメータ
| パラメータ | 説明 |
|---|---|
|
作成するデータ・セキュリティ・ポリシーの名前。 名前は、 |
|
データ・セキュリティ・ポリシーによって保護される行を決定するデータ・レルム制約のリスト。 |
|
これはオプションです。保護する属性と権限のリスト。 |
|
データ・セキュリティ・ポリシーのオプションの説明。 |
例
次の例は、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プロシージャは、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);
パラメータ
| パラメータ | 説明 |
|---|---|
|
データ・レルム制約を追加するデータ・セキュリティ・ポリシーの名前。 名前は、 |
|
データ・セキュリティ・ポリシーに追加するデータ・レルム制約。 |
|
データ・セキュリティ・ポリシーに追加するデータ・レルム制約のリスト。 |
例
次の例は、新規データ・レルム制約を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プロシージャは、データ・セキュリティ・ポリシーからすべてのデータ・レルム制約を削除します。
構文
XS_DATA_SECURITY.REMOVE_REALM_CONSTRAINTS ( policy IN VARCHAR2);
パラメータ
| パラメータ | 説明 |
|---|---|
|
データ・レルム制約を削除するデータ・セキュリティ・ポリシーの名前。 名前は、 |
例
次の例は、EMPLOYEES_DSデータ・セキュリティ・ポリシーからすべてのデータ・レルム制約を削除します。
BEGIN
SYS.XS_DATA_SECURITY.REMOVE_REALM_CONSTRAINTS('EMPLOYEES_DS');
END;
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);
パラメータ
| パラメータ | 説明 |
|---|---|
|
属性制約を追加するデータ・セキュリティ・ポリシーの名前。 名前は、 |
|
追加する列制約。 |
|
追加する列制約のリスト。 |
例
次の例は、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プロシージャは、データ・セキュリティ・ポリシーからすべての列制約を削除します。
構文
XS_DATA_SECURITY.REMOVE_COLUMN_CONSTRAINTS ( policy IN VARCHAR2,);
パラメータ
| パラメータ | 説明 |
|---|---|
|
列制約を削除するデータ・セキュリティ・ポリシーの名前。 名前は、 |
例
次の例は、EMPLOYEES_DSデータ・セキュリティ・ポリシーからすべての列制約を削除します。
BEGIN
SYS.XS_DATA_SECURITY.REMOVE_COLUMN_CONSTRAINTS('EMPLOYEES_DS');
END;
CREATE_ACL_PARAMETERプロシージャは、データ・セキュリティ・ポリシーのACLパラメータを作成します。
構文
XS_DATA_SECURITY.CREATE_ACL_PARAMETER ( policy IN VARCHAR2, parameter IN VARCHAR2, param_type IN NUMBER);
パラメータ
| パラメータ | 説明 |
|---|---|
|
ACLパラメータを作成する必要のあるデータ・セキュリティ・ポリシーの名前。 名前は、 |
|
作成するACLパラメータの名前。 |
|
パラメータのデータ型。これは |
例
次の例は、DEPT_POLICYというACLパラメータをEMPLOYEES_DSデータ・セキュリティ・ポリシーに対して作成します。
BEGIN
SYS.XS_DATA_SECURITY.CREATE_ACL_PARAMETER('EMPLOYEES_DS','DEPT_POLICY',1);
END;
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);
パラメータ
| パラメータ | 説明 |
|---|---|
|
ACLパラメータを削除するデータ・セキュリティ・ポリシーの名前。 名前は、 |
|
削除するACLパラメータの名前。 |
|
使用する削除オプション。次のオプションがあります。
|
例
次の例は、デフォルト・オプションを使用してDEPT_POLICY ACLパラメータをEMPLOYEES_DSデータ・セキュリティ・ポリシーから削除します。
BEGIN
SYS.XS_DATA_SECURITY.DELETE_ACL_PARAMETER('EMPLOYEES_DS','DEPT_POLICY',
XS_ADMIN_UTIL.DEFAULT_OPTION);
END;
SET_DESCRPTIONプロシージャは、指定されたデータ・セキュリティ・ポリシーの説明文字列を設定します。
構文
XS_DATA_SECURITY.SET_DESCRIPTION ( policy IN VARCHAR2, description IN VARCHAR2);
パラメータ
| パラメータ | 説明 |
|---|---|
|
説明を設定するデータ・セキュリティ・ポリシーの名前。 名前は、 |
|
指定されたデータ・セキュリティ・ポリシーの説明文字列。 |
例
次の例は、EMPLOYEES_DSデータ・セキュリティ・ポリシーの説明文字列を設定します。
BEGIN
SYS.XS_DATA_SECURITY.SET_DESCRIPTION('EMPLOYEES_DS',
'Data Security Policy for HR.EMPLOYEES');
END;
DELETE_POLICYプロシージャは、データ・セキュリティ・ポリシーを削除します。
構文
XS_DATA_SECURITY.DELETE_POLICY( policy IN VARCHAR2, delete_option IN PLS_INTEGER := XS_ADMIN_UTIL.DEFAULT_OPTION);
パラメータ
| パラメータ | 説明 |
|---|---|
|
削除するデータ・セキュリティ・ポリシーの名前。 名前は、 |
|
使用する削除オプション。セキュリティ・ポリシーに対して、次のオプションの動作は同じです。
|
例
次の例は、デフォルト・オプションを使用してEMPLOYEES_DSデータ・セキュリティ・ポリシーを削除します。
BEGIN
SYS.XS_DATA_SECURITY.DELETE_POLICY('EMPLOYEES_DS',
XS_ADMIN_UTIL.DEFAULT_OPTION);
END;
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);
パラメータ
| パラメータ | 説明 |
|---|---|
|
有効にするデータ・セキュリティ・ポリシーの名前。 名前は、 |
|
有効にする表またはビューを含むスキーマの名前。 |
|
データ・セキュリティ・ポリシーを有効にする表またはビューの名前。 |
例
次の例は、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は、表またはビューに対してACLベースの行レベル・データ・セキュリティ・ポリシーを無効にします。
影響する表に対してインポートまたはエクスポートを実行する場合、またはデバッグの目的で、Real Application Securityを無効にすることが必要な場合があります。
現在のユーザーが使用可能な表またはビューのデータ・セキュリティ・ポリシーのステータスを調べるには、DBA_XS_APPLIED_POLICIESデータ・ディクショナリ・ビューを問い合せます。
構文
XS_DATA_SECURITY.DISABLE_OBJECT_POLICY ( policy IN VARCHAR2, schema IN VARCHAR2, object IN VARCHAR2);
パラメータ
| パラメータ | 説明 |
|---|---|
|
無効にするデータ・セキュリティ・ポリシーの名前。 名前は、 |
|
無効にする表またはビューを含むスキーマの名前。 |
|
データ・セキュリティ・ポリシーを無効にする表またはビューの名前。 |
例
次の例は、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は、静的データ・レルム制約でENABLE_XDSによって作成されたACLマテリアライズド・ビューを削除します。
現在のユーザーが使用可能な表またはビューのデータ・セキュリティ・ポリシーのステータスを調べるには、DBA_XS_APPLIED_POLICIESデータ・ディクショナリ・ビューを問い合せます。
構文
XS_DATA_SECURITY.REMOVE_OBJECT_POLICY ( policy IN VARCHAR2, schema IN VARCHAR2, object IN VARCHAR2);
パラメータ
| パラメータ | 説明 |
|---|---|
|
削除するデータ・セキュリティ・ポリシーの名前。 名前は、 |
|
データ・セキュリティ・ポリシーを削除する表またはビューを含むスキーマの名前。 |
|
データ・セキュリティ・ポリシーを削除する表またはビューの名前 |
例
次の例は、salesスキーマのproducts表からCUST_DSデータ・セキュリティ・ポリシーを削除します。
BEGIN SYS.XS_DATA_SECURITY.REMOVE_OBJECT_POLICY(policy=>'CUST_DS', schema=>'sales', object=>'products'); END;
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 );
パラメータ
| パラメータ | 説明 |
|---|---|
|
有効にするデータ・セキュリティ・ポリシーの名前。 名前は、 |
|
有効または再度有効にするリレーショナル表またはビューを含むスキーマの名前。 |
|
データ・セキュリティ・ポリシーを有効または再度有効にするリレーショナル表またはビューの名前。 |
|
デフォルトは |
|
オブジェクトの所有者はデータ・セキュリティ・ポリシーをバイパスできます。デフォルトは |
|
タイプは、 アプリケーション・セキュリティにより、表の行を更新する必要があり、同じ表の特定の列への読取りアクセスも制限される場合は、2つの |
|
静的ACL情報をメンテナンスするユーザー提供のMV名を指定します。MVには、 |
例
次の例は、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;
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;
表11-7 XS_DATA_SECURITY_UTILサブプログラムの要約
| サブプログラム | 簡単な説明 |
|---|---|
ユーザー表に対する静的ACLの自動リフレッシュをスケジュールします |
|
ACLリフレッシュ・モードをコミット時またはオンデマンド・リフレッシュに変更します。 |
SCHEDULE_STATIC_ACL_REFRESHプロシージャを使用して、ユーザー表に対する静的ACLの自動リフレッシュを起動またはスケジュールします。start_dateおよびrepeat_intervalパラメータにNULL値が渡された場合は、リフレッシュを即時に開始できます。
現在のユーザーが使用可能な表またはビューに対して実行されたすべての最新のACLリフレッシュ・ジョブのステータスを調べるには、ALL_XDS_LATEST_ACL_REFSTAT、DBA_XDS_LATEST_ACL_REFSTATおよびUSER_XDS_LATEST_ACL_REFSTATデータ・ディクショナリ・ビューを問い合せます。すべての静的ACLリフレッシュ・ジョブ・ステータス履歴は、ALL_XDS_ACL_REFSTAT、DBA_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 );
パラメータ
| パラメータ | 説明 |
|---|---|
|
表が属するスキーマの名前を指定します。 |
|
静的ACLリフレッシュに対して表を一意に識別するために前述のスキーマ名とともに使用される表名。 |
|
この属性は、このリフレッシュの実行がスケジュールされている最初の日付を指定します。ファンクションが繰り返し呼び出される場合は、最後に指定された
|
|
リフレッシュを繰り返す間隔を指定します。反復間隔は、 指定された式を評価して、リフレッシュの次回実行時を決定します。
|
|
ジョブのコメントを指定します。デフォルトでは、この属性は |
例
SYS.XS_DATA_SECURITY_UTIL.SCHEDULE_STATIC_ACL_REFRESH('aclmvuser', 'sales', SYSTIMESTAMP, 'freq=hourly; interval=2');
構文
XS_DATA_SECURITY_UTIL.ALTER_STATIC_ACL_REFRESH ( schema_name IN VARCHAR2 DEFAULT NULL, table_name IN VARCHAR2, refresh_mode IN VARCHAR2);
パラメータ
| パラメータ | 説明 |
|---|---|
|
表が属するスキーマの名前を指定します。 |
|
静的ACLリフレッシュ・モードを変更する表を一意に識別するためにスキーマ名とともに使用される表名。 |
|
|
例
SYS.XS_DATA_SECURITY_UTIL.ALTER_STATIC_ACL_REFRESH('aclmvuser','sales', refresh_mode=>'ON COMMIT');
XS_DIAGパッケージには、プリンシパル、セキュリティ・クラス、ACL、データ・セキュリティ・ポリシー、ネームスペースおよびワークスペース内のすべてのオブジェクトのデータ・セキュリティの潜在的な問題を診断するサブプログラムが含まれます。すべてのサブプログラムは、オブジェクトが有効な場合にTRUEを戻し、それ以外の場合にそれぞれFALSEを戻します。識別された各不整合について、error_limitパラメータで指定した不整合の最大数に達するまで、行がXS$VALIDATION_TABLE検証表に挿入されます。ユーザーは、この検証表を問い合せて、メッセージ・コード、エラーの説明、無効なオブジェクトに通じるパス、不整合の性質を識別するのに役立つ可能性のあるその他の有用な情報などの情報について識別された不整合を判断できます。
表11-8 XS_DIAGサブプログラムの要約
| サブプログラム | 説明 |
|---|---|
プリンシパルを検証します。 |
|
セキュリティ・クラスを検証します。 |
|
ACLを検証します。 |
|
データ・セキュリティ・ポリシーを検証するか、特定の表に対してデータ・セキュリティ・ポリシーを検証します。 |
|
ネームスペース・テンプレートを検証します。 |
|
ワークスペース全体を検証します。 |
VALIDATE_PRINCIPALファンクションは、プリンシパルを検証します。このファンクションは、オブジェクトが有効な場合にTRUEを戻し、それ以外の場合にFALSEを戻します。識別された各不整合について、格納できる不整合の最大数に達するまで、行がXS$VALIDATION_TABLE検証表に挿入されます。ユーザーは、検証失敗の原因を調べるために検証表を問い合せる必要があります。
構文
validate_principal(name IN VARCHAR2,
error_limit IN PLS_INTEGER := 1)
RETURN BOOLEAN;
パラメータ
| パラメータ | 説明 |
|---|---|
|
検証するオブジェクトの名前。 |
|
検証表に格納できる不整合の最大数。 |
例
プリンシパル、ユーザー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ファンクションは、セキュリティ・クラスを検証します。このファンクションは、オブジェクトが有効な場合にTRUEを戻し、それ以外の場合にFALSEを戻します。識別された各不整合について、格納できる不整合の最大数に達するまで、行がXS$VALIDATION_TABLE検証表に挿入されます。ユーザーは、検証失敗の原因を調べるために検証表を問い合せる必要があります。
構文
validate_security_class(name IN VARCHAR2,
error_limit IN PLS_INTEGER := 1)
RETURN BOOLEAN;
パラメータ
| パラメータ | 説明 |
|---|---|
|
検証するオブジェクトの名前。 |
|
検証表に格納できる不整合の最大数。 |
例
セキュリティ・クラス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ファンクションは、ACLを検証します。このファンクションは、オブジェクトが有効な場合にTRUEを戻し、それ以外の場合にFALSEを戻します。識別された各不整合について、格納できる不整合の最大数に達するまで、行がXS$VALIDATION_TABLE検証表に挿入されます。ユーザーは、検証失敗の原因を調べるために検証表を問い合せる必要があります。
構文
validate_acl(name IN VARCHAR2,
error_limit IN PLS_INTEGER := 1)
RETURN BOOLEAN;
パラメータ
| パラメータ | 説明 |
|---|---|
|
検証するオブジェクトの名前。 |
|
検証表に格納できる不整合の最大数。 |
例
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ファンクションは、データ・セキュリティを検証します。このファンクションは、オブジェクトが有効な場合にTRUEを戻し、それ以外の場合にFALSEを戻します。識別された各不整合について、格納できる不整合の最大数に達するまで、行がXS$VALIDATION_TABLE検証表に挿入されます。ユーザーは、検証失敗の原因を調べるために検証表を問い合せる必要があります。
このファンクションには、ポリシー検証のスタイルが3つあります。
policyがNULL以外で、table_nameがNULLの場合、ファンクションはポリシーが適用されるすべての表に対してポリシーを検証します。table_nameがNULLの場合、table_ownerはNULL以外の場合でも無視されます。
policyとtable_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;
パラメータ
| パラメータ | 説明 |
|---|---|
|
検証するオブジェクトの名前。 |
|
表またはビューのスキーマの名前。 |
|
表またはビューの名前。 |
|
検証表に格納できる不整合の最大数。 |
例
適用されているすべての表でポリシー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ファンクションは、ネームスペースを検証します。このファンクションは、オブジェクトが有効な場合にTRUEを戻し、それ以外の場合にFALSEを戻します。識別された各不整合について、格納できる不整合の最大数に達するまで、行がXS$VALIDATION_TABLE検証表に挿入されます。ユーザーは、検証失敗の原因を調べるために検証表を問い合せる必要があります。
構文
validate_namespace_template(name IN VARCHAR2,
error_limit IN PLS_INTEGER := 1)
RETURN BOOLEAN;
パラメータ
| パラメータ | 説明 |
|---|---|
|
検証するオブジェクトの名前。 |
|
検証表に格納できる不整合の最大数。 |
例
ネームスペース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ファンクションは、すべてのアーティファクトを検証します。つまり、ワークスペースに存在するすべてのオブジェクトをこの1つのファンクションを使用して検証します。このファンクションは、すべてのオブジェクトが有効な場合にTRUEを戻し、それ以外の場合にFALSEを戻します。識別された各不整合について、格納できる不整合の最大数に達するまで、行がXS$VALIDATION_TABLE検証表に挿入されます。ユーザーは、検証失敗の原因を調べるために検証表を問い合せる必要があります。
構文
validate_workspace(error_limit IN PLS_INTEGER := 1) RETURN BOOLEAN;
パラメータ
| パラメータ | 説明 |
|---|---|
|
検証表に格納できる不整合の最大数。 |
例
ワークスペース内のすべてのオブジェクトを検証してから、不整合がある場合に検証表を問い合せます。
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;
このパッケージには、次のオブジェクト・タイプ、コンストラクタ・ファンクション、シノニムおよび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;
表11-9 XS_NAMESPACEサブプログラムの要約
| サブプログラム | 説明 |
|---|---|
新規ネームスペース・テンプレートを作成します。 |
|
既存のネームスペース・テンプレートに1つ以上の属性を追加します。 |
|
ネームスペース・テンプレートから1つ以上の属性を削除します。 |
|
指定されたネームスペース・テンプレートにハンドラ・ファンクションを割り当てます。 |
|
指定されたネームスペース・テンプレートの説明文字列を設定します。 |
|
指定されたネームスペース・テンプレートを削除します。 |
構文
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);
パラメータ
| パラメータ | 説明 |
|---|---|
|
作成するネームスペース・テンプレートの名前。 |
|
ネームスペース・テンプレートに含まれる属性と、それらのデフォルト値および |
|
ネームスペース・テンプレートのハンドラ・ファンクションを含むスキーマ。 |
|
ネームスペース・テンプレートのハンドラ・ファンクションを含むパッケージ。 |
|
ネームスペース・テンプレートのハンドラ・ファンクション。ハンドラ・ファンクションは、属性イベントの発生時にコールされます。 |
|
このネームスペース・テンプレートのACLの名前。ACLが提供されていない場合、デフォルトは、アプリケーション・ユーザーによる無制限の属性操作を許可する事前定義済ACL |
|
ネームスペース・テンプレートのオプションの説明文字列。 |
例
次の例は、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プロシージャは、既存のネームスペース・テンプレートに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);
パラメータ
| パラメータ | 説明 |
|---|---|
|
属性が追加されるネームスペース・テンプレートの名前。 |
|
追加する属性の名前。 |
|
追加する属性のリスト。 |
|
属性のデフォルト値。 |
|
属性に関連付けられている更新イベントなどの属性イベント。 |
例
次の例は、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プロシージャは、ネームスペース・テンプレートから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);
パラメータ
| パラメータ | 説明 |
|---|---|
|
属性が削除されるネームスペース・テンプレートの名前。 |
|
削除する属性の名前。 |
|
削除する属性名のリスト。 |
例
次の例は、item_type属性をPOAttrsネームスペースから削除します。
BEGIN
SYS.XS_NAMESPACE.REMOVE_ATTRIBUTES('POAttrs','item_type');
END;
次の例は、POAttrsネームスペース・テンプレートからすべての属性を削除します。
BEGIN
SYS.XS_NAMESPACE.REMOVE_ATTRIBUTES('POAttrs');
END;
SET_HANDLERプロシージャは、指定されたネームスペース・テンプレートにハンドラ・ファンクションを割り当てます。
構文
XS_NAMESPACE.SET_HANDLER ( template IN VARCHAR2, schema IN VARCHAR2, package IN VARCHAR2, function IN VARCHAR2);
パラメータ
| パラメータ | 説明 |
|---|---|
|
ハンドラ・ファンクションを設定するネームスペース・テンプレートの名前。 |
|
ハンドラ・パッケージとファンクションを含むスキーマ。 |
|
ハンドラ・ファンクションを含むパッケージの名前。 |
|
ネームスペース・テンプレートのハンドラ・ファンクションの名前。 |
例
次の例は、Populate_Order_Funcというハンドラ・ファンクションをPOAttrsネームスペース・テンプレートに対して設定します。
BEGIN
SYS.XS_NAMESPACE.SET_HANDLER('POAttrs','SCOTT',
'Orders_Pckg','Populate_Order_Func');
END;
SET_DESCRIPTIONプロシージャは、指定されたネームスペース・テンプレートの説明文字列を設定します。
構文
XS_NAMESPACE.SET_DESCRIPTION ( template IN VARCHAR2, description IN VARCHAR2);
パラメータ
| パラメータ | 説明 |
|---|---|
|
説明を設定するネームスペース・テンプレートの名前。 |
|
指定されたネームスペース・テンプレートの説明文字列。 |
例
次の例は、POAttrsネームスペース・テンプレートの説明文字列を設定します。
BEGIN
SYS.XS_NAMESPACE.SET_DESCRIPTION('POAttrs','Purchase Order Attributes');
END;
構文
XS_NAMESPACE.DELETE_TEMPLATE( template IN VARCHAR2, delete_option IN PLS_INTEGER := XS_ADMIN_UTIL.DEFAULT_OPTION);
パラメータ
| パラメータ | 説明 |
|---|---|
|
削除するネームスペース・テンプレートの名前。 |
|
使用する削除オプション。ネームスペース・テンプレートに対して、次のオプションの動作は同じです。
|
例
次の例は、デフォルトの削除オプションを使用してPOAttrsネームスペース・テンプレートを削除します。
BEGIN
SYS.XS_NAMESPACE.DELETE_TEMPLATE('POAttrs',XS_ADMIN_UTIL.DEFAULT_OPTION);
END;
このパッケージには、次のオブジェクト・タイプ、コンストラクタ・ファンクション、シノニムおよび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 ;
表11-10 XS_PRINCIPALサブプログラムの要約
| サブプログラム | 説明 |
|---|---|
アプリケーション・ユーザーを作成します。 |
|
アプリケーション・ロールを作成します。 |
|
動的アプリケーション・ロールを作成します。 |
|
1つ以上のアプリケーション・ロールをアプリケーション・プリンシパルに付与します。 |
|
1つ以上のロールをアプリケーション・プリンシパルから取り消します。 |
|
ターゲット・アプリケーション・ユーザーのプロキシ・ユーザーを追加します。 |
|
ターゲット・アプリケーション・ユーザーの指定されたプロキシ・ユーザーまたはすべてのプロキシ・ユーザーを削除します。 |
|
データベース・ユーザーにプロキシ・アプリケーション・ユーザーを追加します。 |
|
データベース・ユーザーからプロキシ・アプリケーション・ユーザーを削除します。 |
|
アプリケーション・ユーザーまたはロールの有効日を設定または変更します。 |
|
動的アプリケーション・ロールの期間(分単位)を設定または変更します。 |
|
|
|
アプリケーション・ロールを有効または無効にします。 |
|
指定されたユーザーに直接付与されているすべてのロールを有効または無効にします。 |
|
アプリケーション・ユーザーのデータベース・スキーマを設定します。 |
|
外部ユーザーまたはロールのGUIDを設定します。 |
|
アプリケーション・ユーザーのプロファイルを設定します。Real Application Securityアプリケーション・ユーザーのデータベース使用率やデータベース・インスタンス・リソースを制限する、一連のリソース制限およびパスワード・パラメータです。 |
|
|
|
アプリケーション・ユーザー・アカウントのパスワードを設定または変更します。 |
|
アプリケーション・ユーザー・アカウントの検証機能を設定または変更します。 |
|
アプリケーション・ユーザーまたはロールの説明文字列を設定します。 |
|
アプリケーション・ユーザーまたはロールを削除します。 |
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);
パラメータ
| パラメータ | 説明 |
|---|---|
|
作成するアプリケーション・ユーザーの名前。 |
|
作成時のユーザーのステータス。これは、次のいずれかの値です。
デフォルト値は 値 |
|
ユーザーに関連付けるデータベース・スキーマ。これはオプションです。 |
|
ユーザー・アカウントが有効になる日付。これはオプションです。 |
|
ユーザー・アカウントが無効になる日付。これはオプションです。
|
|
ユーザーのGUID。これは外部ユーザーに対してのみ有効です。 |
|
このユーザーのソースであるシステムの名前。これはオプションです。 |
|
ユーザー・アカウントの説明。これはオプションです。 |
例
次の例は、ユーザーを作成します。
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システム権限が必要です。
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);
パラメータ
| パラメータ | 説明 |
|---|---|
|
作成するアプリケーション・ロールの名前。 |
|
作成時にロールを有効にするかどうかを指定します。デフォルト値は |
|
ロールが有効になる日付。これはオプションです。 |
|
ロールが無効になる日付。これはオプションです。
|
|
ロールのGUID。これは外部ロールに対してのみ適用されます。 |
|
このロールのソースであるシステムの名前。これはオプションです。 |
|
ロールの説明(オプション)。 |
例
次の例は、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 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);
パラメータ
| パラメータ | 説明 |
|---|---|
|
作成する動的アプリケーション・ロールの名前。 |
|
動的アプリケーション・ロールの期間(分単位)。オプション属性。 |
|
動的アプリケーション・ロールのスコープ属性。可能な値は |
|
動的アプリケーション・ロールのオプションの説明。 |
例
次の例は、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プロシージャは、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);
パラメータ
| パラメータ | 説明 |
|---|---|
|
ロールが付与されるプリンシパルの名前。 |
|
付与されるロールの名前。 |
|
付与するロールのリスト。 |
|
付与が有効になる日付。これは、オプションのパラメータです。 |
|
付与が有効な期間の最終日。これは、オプションのパラメータです。 |
例
次の例は、開始日と終了日を指定して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プロシージャは、指定された権限受領者から指定したロールを取り消します。ロールが指定されていない場合は、権限受領者からすべてのアプリケーション・ロールが取り消されます。ロールを付与または取り消すには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);
パラメータ
| パラメータ | 説明 |
|---|---|
|
ロールが取り消されるアプリケーション・プリンシパル。 |
|
取り消すアプリケーション・ロールの名前。 |
|
取り消すロール名のリスト。 |
例
次の例は、ユーザー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は、指定されたアプリケーション・ユーザーのターゲット・ユーザーを追加します。これにより、アプリケーション・ユーザーがターゲット・ユーザーのプロキシとして機能できます。このプロシージャには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);
パラメータ
| パラメータ | 説明 |
|---|---|
|
プロキシとして機能できる対象のターゲット・アプリケーション・ユーザーの名前。 |
|
プロキシ・アプリケーション・ユーザーの名前。 |
|
プロキシ・ユーザーがプロキシとして機能できるターゲット・ユーザー・ロールのリスト。このパラメータは必須です。明示的な |
例
次の例は、ユーザー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プロシージャは、ターゲット・アプリケーション・ユーザーの1つまたはすべてのプロキシ・ユーザーの関連付けを解除します。関連付けられたプロキシ・ロールは、プロキシ・ユーザーに対して自動的に削除されます。
プロキシ・ユーザーを追加または削除するにはALTER USERシステム権限が必要です。
構文
REMOVE_PROXY_USERS ( target_user IN VARCHAR2); REMOVE_PROXY_USERS ( target_user IN VARCHAR2, proxy_user IN VARCHAR2);
パラメータ
| パラメータ | 説明 |
|---|---|
|
プロキシの関連付けが解除されるターゲット・アプリケーション・ユーザー。 |
|
ターゲット・ユーザーから関連付けを解除する必要のあるプロキシ・アプリケーション・ユーザー。 |
例
次の例は、ターゲット・ユーザー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は、指定されたターゲット・プロキシ・アプリケーション・ユーザーを指定されたデータベース・ユーザーに追加します。アプリケーション・ユーザーは直接ログオン・ユーザーである必要があります。これにより、アプリケーション・ユーザーがターゲット・データベース・ユーザーのプロキシとして機能できます。デフォルトでは、ターゲット・ユーザーに割り当てられているすべてのロールをプロキシ・ユーザーが使用できます。Oracleデータベースと同様に、ターゲット・データベース・ユーザーのデフォルト・ロールは接続後に有効になります。ターゲット・データベース・ユーザーに割り当てられているその他のロールはSET ROLE文を使用して設定できます。
プロキシ・ユーザーをデータベース・ユーザーに追加するにはALTER USERシステム権限が必要です。
構文
ADD_PROXY_TO_DBUSER ( database_user IN VARCHAR2, proxy_user IN VARCHAR2, is_external IN BOOLEAN := FALSE);
パラメータ
| パラメータ | 説明 |
|---|---|
|
プロキシとして機能できる対象のターゲット・データベース・ユーザーの名前。 |
|
プロキシ・アプリケーション・ユーザーの名前。 |
|
ユーザーが外部ユーザーであるか標準のReal Application Securityアプリケーション・ユーザーであるかを指定するパラメータ。 |
例
次の例は、アプリケーション・ユーザーDJONESがターゲット・データベース・ユーザーSMAVRISのプロキシとして機能できるようにします。
BEGIN
SYS.XS_PRINCIPAL.ADD_PROXY_TO_DBUSER('SMAVRIS','DJONES', TRUE);
END;
REMOVE_PROXY_FROM_DBUSERプロシージャは、データベース・ユーザーからプロキシ・アプリケーション・ユーザーを関連付け解除します。関連付けられたプロキシ・ロールは、アプリケーション・ユーザーから自動的に削除されます。
プロキシ・ユーザーをデータベース・ユーザーから削除するにはALTER USERシステム権限が必要です。
構文
REMOVE_PROXY_FROM_DBUSER ( database_user IN VARCHAR2, proxy_user IN VARCHAR2);
パラメータ
| パラメータ | 説明 |
|---|---|
|
プロキシの関連付けが解除されるターゲット・データベース・ユーザー。 |
|
ターゲット・データベース・ユーザーから関連付けを解除する必要のあるプロキシ・アプリケーション・ユーザー。 |
例
次の例は、プロキシ・ユーザーDJONESをターゲット・データベース・ユーザーSMAVRISから関連付け解除します。
BEGIN
SYS.XS_PRINCIPAL.REMOVE_PROXY_FROM_DBUSER('SMAVRIS','DJONES');
END;
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);
パラメータ
| パラメータ | 説明 |
|---|---|
|
有効日を設定するアプリケーション・ユーザーまたはロールの名前。 |
|
有効期間の開始日。 |
|
有効期間の終了日。 |
例
次の例は、ユーザー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プロシージャは、動的アプリケーション・ロールの期間を設定または変更します。期間は分で指定します。
ロールを変更するにはALTER ANY ROLEシステム権限が必要です。
構文
SET_DYNAMIC_ROLE_DURATION ( role IN VARCHAR2, duration IN PLS_INTEGER);
パラメータ
| パラメータ | 説明 |
|---|---|
|
動的アプリケーション・ロールの名前。 |
|
動的アプリケーション・ロールの期間(分単位)。この値を負の値に設定することはできません。 |
例
次の例は、reprole動的アプリケーション・ロールの期間を60分に設定します。
BEGIN
SYS.XS_PRINCIPAL.SET_DYNAMIC_ROLE_DURATION('reprole',60);
END;
SET_DYNAMIC_ROLE_SCOPEプロシージャは、動的アプリケーション・ロールのスコープを設定または変更します。セッション(SESSION_SCOPE)またはリクエスト(REQUEST_SCOPE)スコープを選択できます。
ロールを変更するにはALTER ANY ROLEシステム権限が必要です。
構文
SET_DYNAMIC_ROLE_SCOPE ( role IN VARCHAR2, scope IN PLS_INTEGER);
パラメータ
| パラメータ | 説明 |
|---|---|
|
動的アプリケーション・ロールの名前。 |
|
設定する動的アプリケーション・ロールのスコープ。使用できる値は |
例
次の例は、reprole動的アプリケーション・ロールのスコープをリクエスト・スコープに設定します。
begin
SYS.XS_PRINCIPAL.SET_DYNAMIC_ROLE_SCOPE('reprole',XS_PRINCIPAL.REQUEST_SCOPE);
end;
ENABLE_BY_DEFAULTプロシージャは、標準アプリケーション・ロールを有効または無効にします。
有効になっている場合、アプリケーション・ロールは付与先のプリンシパルに対して自動的に有効になります。無効になっている場合、アプリケーション・ロールに関連付けられている権限は、アプリケーション・ロールがプリンシパルに付与されている場合でも有効になりません。
アプリケーション・ロールを変更するにはALTER ANY ROLEシステム権限が必要です。
構文
ENABLE_BY_DEFAULT ( role IN VARCHAR2, enabled IN BOOLEAN := TRUE);
パラメータ
| パラメータ | 説明 |
|---|---|
|
標準アプリケーション・ロールの名前。 |
|
アプリケーション・ロールの |
例
次の例は、HRREPアプリケーション・ロールのenabled属性をTRUEに設定します。
BEGIN
SYS.XS_PRINCIPAL.ENABLE_BY_DEFAULT('HRREP',TRUE);
END;
ENABLE_ROLES_BY_DEFAULTプロシージャは、アプリケーション・ユーザーに直接付与されているすべてのアプリケーション・ロールを有効または無効にします。
アプリケーション・ユーザーに対してこのプロシージャを実行するにはALTER USERシステム権限が必要です。
構文
ENABLE_ROLES_BY_DEFAULT ( user IN VARCHAR2, enabled IN BOOLEAN := TRUE);
パラメータ
| パラメータ | 説明 |
|---|---|
|
アプリケーション・ユーザーの名前。 |
|
アプリケーション・ユーザーに直接付与されているすべてのアプリケーション・ロールの enabled属性を enabled属性を |
例
次の例は、アプリケーション・ユーザーSMAVRISに直接付与されているすべてのロールを有効にします。
BEGIN
SYS.XS_PRINCIPAL.ENABLE_ROLES_BY_DEFAULT('SMAVRIS',TRUE);
END;
SET_USER_SCHEMAプロシージャは、アプリケーション・ユーザーのデータベース・スキーマを設定します。
アプリケーション・ユーザーに対してこのプロシージャを実行するにはALTER USERシステム権限が必要です。
構文
SET_USER_SCHEMA ( user IN VARCHAR2, schema IN VARCHAR2);
パラメータ
| パラメータ | 説明 |
|---|---|
|
アプリケーション・ユーザーの名前。 |
|
ユーザーに関連付けるデータベース・スキーマの名前。これを |
例
次の例は、HRスキーマをユーザーDJONESに関連付けます。
BEGIN
SYS.XS_PRINCIPAL.SET_USER_SCHEMA('DJONES','HR');
END;
SET_GUIDプロシージャは、プリンシパルのGUIDを設定します。プリンシパルは外部ユーザーまたはロールである必要があり、現在のGUIDはNULLである必要があります。
アプリケーション・ユーザーに対してこのプロシージャを実行するにはALTER USERシステム権限が必要です。アプリケーション・ロールに対してこのプロシージャを実行するにはALTER ANY ROLEシステム権限が必要です。
注意:
SET_GUIDが機能するためにはユーザーのexternal_source属性が設定されている必要があります。
構文
SET_GUID ( principal IN VARCHAR2, guid IN RAW);
パラメータ
| パラメータ | 説明 |
|---|---|
|
外部ユーザーまたはロールの名前。 |
|
外部ユーザーまたはロールのGUID。 |
例
次の例は、ユーザーAlexのGUIDを設定します。
BEGIN
SYS.XS_PRINCIPAL.SET_GUID('ALEX','7b6cb3a98f8a4e20ac31a37419cc7fa3');
END;
SET_PROFILEプロシージャは、アプリケーション・ユーザーのプロファイルを設定します。プロファイルは、Real Application Securityアプリケーション・ユーザーのデータベース使用率やデータベース・インスタンス・リソースを制限する、一連のリソース制限およびパスワード・パラメータです。アプリケーション・ユーザーとプロファイルは両方とも、既存のエンティティである必要があります。
このプロシージャを実行するユーザーは、ALTER_USER権限を持っている必要があります。
アプリケーション・ユーザーに割り当てられているプロファイルがカスケード・オプションを使用して削除されると、そのユーザーのデフォルト・プロファイルが自動的に有効になります。
構文
SET_PROFILE ( user IN VARCHAR2, profile IN VARCHAR2);
パラメータ
| パラメータ | 説明 |
|---|---|
|
Real Application Securityアプリケーション・ユーザーの名前。既存のアプリケーション・ユーザーである必要があります。 |
|
プロファイルの名前。 |
例
次の例では、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プロシージャは、アプリケーション・ユーザー・アカウントのステータスを設定または変更します。
アプリケーション・ユーザーに対してこのプロシージャを実行するにはALTER_USER権限が必要です。
構文
SET_USER_STATUS ( user IN VARCHAR2, status IN PLS_INTEGER);
パラメータ
| パラメータ | 説明 |
|---|---|
|
ステータスを設定または更新する必要のあるユーザー・アカウントの名前。 |
|
Real Application Securityユーザー・アカウントの新規ステータス。ステータスの値は複数のクラスに分けることができます。
パラメータ |
例
次の例は、ユーザーDJONESのユーザー・ステータスをLOCKEDに設定します。
BEGIN
SYS.XS_PRINCIPAL.SET_USER_STATUS('DJONES',XS_PRINCIPAL.LOCKED);
END;
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);
パラメータ
| パラメータ | 説明 |
|---|---|
|
パスワードを設定するアプリケーション・ユーザー・アカウントの名前。 |
|
設定するパスワード。 |
|
パスワードに使用する検索機能のタイプ。デフォルト値は
|
|
旧パスワード。Real Application Securityユーザーが自分のパスワードを変更する場合、このパラメータが必要です。指定されていない場合、ユーザーは自分のパスワードを変更するのに必要な権限を持っている必要があります。 |
例
次の例は、アプリケーション・ユーザーSMAVRISのパスワードを設定します。パスワードのXS_SHA512検証機能タイプも指定します。
BEGIN
SYS.XS_PRINCIPAL.SET_PASSWORD('SMAVRIS','2Hrd2Guess',XS_PRINCIPAL.XS_SHA512);
END;
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);
パラメータ
| パラメータ | 説明 |
|---|---|
|
検証機能の設定対象のアプリケーション・ユーザーの名前。 |
|
検証機能として使用する文字列。 |
|
使用する検索機能のタイプ。これは、次の中のいずれか1つです:
|
例
次の例は、ユーザーSMAVRISの検証機能を設定します。
BEGIN
SYS.XS_PRINCIPAL.SET_VERIFIER('SMAVRIS','6DFF060084ECE67F',XS_PRINCIPAL.XS_SHA512);
END;
SET_DESCRIPTIONプロシージャを使用して、アプリケーション・プリンシパルの説明を設定します。
アプリケーション・ユーザーに対してこのプロシージャを実行するにはALTER USERシステム権限が必要です。アプリケーション・ロールに対してこのプロシージャを実行するにはALTER ANY ROLEシステム権限が必要です。
構文
SET_DESCRIPTION ( principal IN VARCHAR2, description IN VARCHAR2);
パラメータ
| パラメータ | 説明 |
|---|---|
|
説明を設定するプリンシパルの名前。 |
|
プリンシパルに関する説明文字列。 |
例
次の例は、アプリケーション・ロールHRREPの説明を設定します。
BEGIN
SYS.XS_PRINCIPAL.SET_DESCRIPTION('HRREP','HR Representative role');
END;
DELETE_PRINCIPALプロシージャは、アプリケーション・ユーザーまたはアプリケーション・ロールを削除します。
アプリケーション・ユーザーに対してこのプロシージャを実行するにはDROP USERシステム権限が必要です。アプリケーション・ロールに対してこのプロシージャを実行するにはDROP ANY ROLEシステム権限が必要です。
構文
delete_principal ( principal IN VARCHAR2, delete_option IN PLS_INTEGER:=XS_ADMIN_UTIL.DEFAULT_OPTION);
パラメータ
| パラメータ | 説明 |
|---|---|
|
削除するアプリケーション・ユーザーまたはアプリケーション・ロールの名前。 |
|
使用する削除オプション。次のオプションがあります。
|
例
次の例は、DEFAULT_OPTIONを使用してユーザーSMAVRISを削除します。
BEGIN
SYS.XS_PRINCIPAL.DELETE_PRINCIPAL('SMAVRIS');
END;
表11-11 XS_SECURITY_CLASSサブプログラムの要約
| サブプログラム | 説明 |
|---|---|
新規セキュリティ・クラスを作成します。 |
|
指定されたセキュリティ・クラスに1つ以上の親セキュリティ・クラスを追加します。 |
|
指定されたセキュリティ・クラスの1つ以上の親セキュリティ・クラスを削除します。 |
|
指定されたセキュリティ・クラスに1つ以上の権限を追加します。 |
|
指定されたセキュリティ・クラスの1つ以上の権限を削除します。 |
|
指定された集約権限に1つ以上の暗黙の権限を追加します。 |
|
集約権限から1つ以上の暗黙の権限を削除します。 |
|
指定されたセキュリティ・クラスの説明文字列を設定します。 |
|
指定されたセキュリティ・クラスを削除します。 |
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);
パラメータ
| パラメータ | 説明 |
|---|---|
|
作成するセキュリティ・クラスの名前。 名前は、 |
|
セキュリティ・クラスに含める権限のリスト。 |
|
セキュリティ・クラスが継承される親セキュリティ・クラスのリスト。これはオプションです。 |
|
セキュリティ・クラスのオプションの説明。 |
例
次の例は、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;
構文
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);
パラメータ
| パラメータ | 説明 |
|---|---|
|
親クラスが追加されるセキュリティ・クラスの名前。 名前は、 |
|
追加される親セキュリティ・クラスの名前。 |
|
追加する親クラスのリスト。 |
例
次の例は、親セキュリティ・クラスGENPRIVSをHRPRIVSセキュリティ・クラスに追加します。
BEGIN
SYS.XS_SECURITY_CLASS.ADD_PARENTS('HRPRIVS','GENPRIVS');
END;
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);
パラメータ
| パラメータ | 説明 |
|---|---|
|
親クラスが削除されるセキュリティ・クラスの名前。 名前は、 |
|
削除する親セキュリティ・クラス。 |
|
削除する親セキュリティ・クラスのリスト。 |
例
次の例は、親セキュリティ・クラスGENPRIVSをHRPRIVSセキュリティ・クラスから削除します。
BEGIN
SYS.XS_SECURITY_CLASS.REMOVE_PARENTS('HRPRIVS','GENPRIVS');
END;
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);
パラメータ
| パラメータ | 説明 |
|---|---|
|
権限が追加されるセキュリティ・クラスの名前。 名前は、 |
|
追加する権限の名前。 |
|
追加する権限のリスト。 |
|
追加される暗黙の権限のオプションのリスト。 |
|
追加される権限のオプションの説明。 |
例
次の例は、UPDATE_INFOという集約権限をHRPRIVSセキュリティ・クラスに追加します。集約権限には、暗黙の権限UPDATE、DELETEおよび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プロシージャは、指定されたセキュリティ・クラスから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);
パラメータ
| パラメータ | 説明 |
|---|---|
|
権限が削除されるセキュリティ・クラスの名前。 名前は、 |
|
削除する権限の名前。 |
|
削除する権限のリスト。 |
例
次の例は、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プロシージャは、集約権限に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);
パラメータ
| パラメータ | 説明 |
|---|---|
|
権限が追加されるセキュリティ・クラスの名前。 名前は、 |
|
暗黙の権限が追加される集約権限の名前。 |
|
追加する暗黙の権限。 |
|
集約権限に追加する暗黙の権限のリスト。 |
例
次の例は、集約権限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プロシージャは、集約権限から指定された暗黙の権限を削除します。権限が指定されていない場合は、すべての暗黙の権限が集約権限から削除されます。
構文
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);
パラメータ
| パラメータ | 説明 |
|---|---|
|
権限が削除されるセキュリティ・クラスの名前。 名前は、 |
|
暗黙の権限が削除される集約権限の名前。 |
|
集約権限から削除する暗黙の権限。 |
|
集約権限から削除する暗黙の権限のリスト。 |
例
次の例は、集約権限UPDATE_INFOの暗黙の権限DELETEをHRPRIVSセキュリティ・クラスから削除します。
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;
構文
XS_SECURITY_CLASS.SET_DESCRIPTION ( sec_class IN VARCHAR2, description IN VARCHAR2);
パラメータ
| パラメータ | 説明 |
|---|---|
|
説明を設定するセキュリティ・クラスの名前。 名前は、 |
|
指定されたセキュリティ・クラスの説明文字列。 |
例
次の例は、HRPRIVSセキュリティ・クラスの説明文字列を設定します。
BEGIN
SYS.XS_SECURITY_CLASS.SET_DESCRIPTION(
'HRPRIVS','Contains privileges required to manage HR data');
END;
DELETE_SECURITY_CLASSプロシージャは、指定されたセキュリティ・クラスを削除します。
構文
XS_SECURITY_CLASS.DELETE_SECURITY_CLASS ( sec_class IN VARCHAR2, delete_option IN NUMBER:=XS_ADMIN_UTIL.DEFAULT_OPTION);
パラメータ
| パラメータ | 説明 |
|---|---|
|
削除するセキュリティ・クラスの名前。 名前は、 |
|
使用する削除オプション。次のオプションがあります。
|
例
次の例は、デフォルト・オプションを使用してHRPRIVSセキュリティ・クラスを削除します。
BEGIN
SYS.XS_SECURITY_CLASS.DELETE_SECURITY_CLASS('HRPRIVS',XS_ADMIN_UTIL.DEFAULT_OPTION);
END;