149 DBMS_RLS
DBMS_RLSパッケージには、ファイングレイン・アクセス・コントロールの管理インタフェースが含まれ、これを使用してVirtual Private Database (VPD)を実装します。 
               
DBMS_RLSは、Enterprise Editionでのみ使用できます。
               
参照:
DBMS_RLSの使用方法については、『Oracle Databaseセキュリティ・ガイド』を参照してください。
この章のトピックは、次のとおりです:
149.1 DBMS_RLSの概要
ファイングレイン・アクセス・コントロールをサポートする機能は、動的な述語に基づいています。セキュリティ・ルールはビューに埋め込まれていませんが、元表またはビューがDML文で参照される、文の解析時に取得されます。
表、ビューまたはシノニムに対する動的な述語はPL/SQLファンクションが生成し、PL/SQLインタフェースを介してセキュリティ・ポリシーに関連付けられます。たとえば:
DBMS_RLS.ADD_POLICY ( 'hr', 'employees', 'emp_policy', 'hr', 'emp_sec', 'select', 'user_ctx', 'time');
HRスキーマの下にあるEMPLOYEES表が問合せまたは副問合せ(SELECT)で参照されるたびに、サーバーは、EMP_SECファンクション(HRスキーマの下にある)をコールします。このファンクションは、EMP_POLICYポリシーについて、現行のスキーマに固有の述語を戻します。ポリシー・ファンクションは、ファンクション・コール時に使用可能なセッション環境変数に基づいて述語を生成できます。これらの変数は通常、アプリケーション・コンテキストのフォームで表示されます。ポリシーでは、セキュリティ関連の列と、INDEX、SELECT、INSERT、UPDATE、DELETEなどの文を自由に組み合せて指定できます。
                     
次に、サーバーは、テキストがある一時ビューを作成します。
SELECT * FROM hr.employees WHERE P1
ここで、P1(SAL > 10000や副問合せなど)は、EMP_SECファンクションから戻された述語です。サーバーは、EMPLOYEES表をビューとして処理し、ビューのテキストをデータ・ディクショナリからではなく一時ビューから取得すること以外は、通常のビューと同様にビューの展開を行います。 
                     
述語に副問合せがある場合は、ポリシー・ファンクションの所有者(定義者)を使用して副問合せ内のオブジェクトを解決し、そのオブジェクトのセキュリティをチェックします。つまり、ポリシー保護されたオブジェクトへのアクセス権限を持つユーザーには、ポリシーについての知識は不要です。このユーザーには、基礎となるセキュリティ・ポリシーに対するオブジェクト権限の付与は不要です。さらに、サーバーはファンクション定義者の権限でコールを行うため、このユーザーにはポリシー・ファンクションでのEXECUTE権限は不要です。 
                     
ノート:
一時ビューは、単一表または述語のみを持つビュー(つまり、JOIN、ORDER BY、GROUP BYなどがない)から導出されるため、親オブジェクトの更新可能性を保持できます。 
                        
DBMS_RLSは、セキュリティ・ポリシーを削除するか使用可能にするためのインタフェースも提供します。たとえば、EMP_POLICYを削除したり、使用可能にしたりする場合は、次のPL/SQL文を使用します。 
                     
DBMS_RLS.DROP_POLICY('hr', 'employees', 'emp_policy'); 
DBMS_RLS.ENABLE_POLICY('hr', 'employees', 'emp_policy', TRUE);149.2 DBMS_RLSのセキュリティ・モデル
一時ビューが副問合せを使用して作成されると、セキュリティ・チェックが実行されます。ポリシー・ファンクションを持ち、動的な述語を生成するスキーマは、セキュリティ・チェックおよびオブジェクト検索を行う一時ビューの定義者です。
149.3 DBMS_RLSの定数
DBMS_RLSパッケージには、パラメータ値の指定に使用できる定数が含まれます。
                  
表149-1 DBMS_RLSの定数
| 定数 | タイプ | 値 | 説明 | 
|---|---|---|---|
| 
 | 
 | 1 | 
 | 
| 
 | 
 | 2 | 
 | 
149.4 DBMS_RLSの操作上のノート
DBMS_RLSプロシージャは、現行のDMLトランザクションがある場合は、操作前にコミットします。ただし、プロシージャがDDLイベント・トリガーの内部にある場合、プロシージャは最初にコミットを実行しません。DDLトランザクションでは、DBMS_RLSプロシージャはDDLトランザクションの一部となります。 
                  
149.5 DBMS_RLSのルールおよび制限
VPDでは、長い識別子の使用がサポートされています。オブジェクト(表名、ポリシー名およびサブプログラム名)とビューに適用される、object_schema、object_name、policy_nameなどの引数の最大長は、128バイトです。 
                  
149.6 DBMS_RLSサブプログラムの要約
この表では、DBMS_RLSで使用可能なサブプログラムをリストし、簡単に説明します。
                  
表149-2 DBMS_RLSパッケージのサブプログラム
| サブプログラム | 説明 | 
|---|---|
| ポリシー・グループに関連付けられたポリシーを追加します。 | |
| ファイングレイン・アクセス・コントロールのポリシーを表、ビューまたはシノニムに追加します。 | |
| アクティブなアプリケーションのコンテキストを追加します。 | |
| アプリケーション・コンテキスト属性をVPDポリシーに関連付けます。 | |
| アプリケーション・コンテキスト関連の変更を追加します。 | |
| ポリシー・グループを作成します。 | |
| ポリシー・グループを削除します。 | |
| 行レベルのグループ・セキュリティ・ポリシーを使用禁止にします。 | |
| ポリシー・グループに関連付けられたポリシーを削除します。 | |
| ファイングレイン・アクセス・コントロールのポリシーを表、ビューまたはシノニムから削除します。 | |
| 駆動コンテキストが1つ少なくなるように、オブジェクトから駆動コンテキストを削除します。 | |
| 行レベルのグループ・セキュリティ・ポリシーを使用可能または使用禁止にします。 | |
| ファイングレイン・アクセス・コントロールのポリシーを使用可能または使用禁止にします。 | |
| リフレッシュ・ポリシーに関連付けられたSQL文を再解析します。 | |
| ポリシーに関連付けられているすべてのキャッシュ済の文を再解析します。 | 
149.6.1 ADD_GROUPED_POLICYプロシージャ
このプロシージャは、ポリシー・グループに関連付けられたポリシーを追加します。
構文
DBMS_RLS.ADD_GROUPED_POLICY( object_schema IN VARCHAR2 DEFAULT NULL, object_name IN VARCHAR2, policy_group IN VARCHAR2 DEFAULT 'SYS_DEFAULT', policy_name IN VARCHAR2, function_schema IN VARCHAR2 DEFAULT NULL, policy_function IN VARCHAR2, statement_types IN VARCHAR2 DEFAULT NULL, update_check IN BOOLEAN DEFAULT FALSE, enable IN BOOLEAN DEFAULT TRUE, static_policy IN BOOLEAN DEFAULT FALSE, policy_type IN BINARY_INTEGER DEFAULT NULL, long_predicate IN BOOLEAN DEFAULT FALSE, sec_relevant_cols IN VARCHAR2, sec_relevant_cols_opt IN BINARY_INTEGER DEFAULT NULL, namespace IN VARCHAR2 DEFAULT NULL, attribute IN VARCHAR2 DEFAULT NULL);
パラメータ
表149-3 ADD_GROUPED_POLICYプロシージャのパラメータ
| パラメータ | 説明 | 
|---|---|
| 
 | 表、ビューまたはシノニムを含んでいるスキーマ。 | 
| 
 | ポリシーを追加する表、ビューまたはシノニムの名前。 | 
| 
 | ポリシーが属するポリシー・グループの名前。 | 
| 
 | ポリシーの名前。同一の表またはビューで一意である必要があります。 | 
| 
 | ポリシー・ファンクションを所有するスキーマ。 | 
| 
 | ポリシーの述語を生成するファンクションの名前。ファンクションがパッケージ内で定義されている場合、パッケージ名は必ず存在する必要があります。 | 
| 
 | ポリシーを適用する文タイプ。 | 
| 
 | 
 チェックは、ポリシー定義に含まれているセキュリティ関連の列にのみ適用されます。つまり、ポリシーで定義されているセキュリティ関連の列が | 
| 
 | ポリシーの追加時に、そのポリシーを使用可能にするかどうかを示します。デフォルトは | 
| 
 | デフォルトは | 
| 
 | デフォルト値の | 
| 
 | デフォルト値の | 
| 
 | 列レベルのVirtual Private Database (VPD)を使用可能にします(このVPDによって、機密情報を保持している列が問合せで参照されたときにセキュリティ・ポリシーが実行されます)。表およびビューに適用されますが、シノニムには適用されません。ポリシーで保護されたオブジェクトについて、カンマ区切りまたはスペース区切りの有効な列名のリストを指定します。このポリシーが実行されるのは、ユーザーのSQL文またはその基礎となるビュー定義の中で、指定した列が参照されたとき(あるいは抽象データ・タイプの列の場合は、その属性が参照されたとき)のみです。デフォルトは、オブジェクトのユーザー定義列のすべてです。 | 
| 
 | アプリケーション・コンテキスト・ネームスペースを決定する名前。 | 
| 
 | アプリケーション・コンテキスト属性名を決定する属性。 | 
使用上のノート
- 
                              このプロシージャでは、指定した表、ビューまたはシノニムにポリシーが追加され、指定したポリシー・グループにそのポリシーが関連付けられます。 
- 
                              ポリシー・グループは、CREATE_POLICY_GROUPプロシージャを使用して作成する必要があります。 
- 
                              ポリシー名は、指定したオブジェクトのポリシー・グループ内で一意である必要があります。 
- 
                              デフォルトのポリシー・グループ( SYS_DEFAULT)のポリシーは、アクティブなポリシー・グループに関係なく常に実行されます。ただし、ファイングレイン・アクセス・コントロールのポリシーは、EXEMPT ACCESS POLICYシステム権限を持つユーザーには適用されません。
149.6.2 ADD_POLICYプロシージャ
このプロシージャは、ファイングレイン・アクセス・コントロールのポリシーを表、ビューまたはシノニムに追加します。
トランザクションがある場合、その現行のトランザクションはプロシージャによって操作の実行前にコミットを実行します。ただし、トランザクションがDDLイベント・トリガー内にある場合は、最初にコミットを実行しません。
参照:
コミットは、操作の最後にも実行されます。 
                        
構文
DBMS_RLS.ADD_POLICY ( object_schema IN VARCHAR2 DEFAULT NULL, object_name IN VARCHAR2, policy_name IN VARCHAR2, function_schema IN VARCHAR2 DEFAULT NULL, policy_function IN VARCHAR2, statement_types IN VARCHAR2 DEFAULT NULL, update_check IN BOOLEAN DEFAULT FALSE, enable IN BOOLEAN DEFAULT TRUE, static_policy IN BOOLEAN DEFAULT FALSE, policy_type IN BINARY_INTEGER DEFAULT NULL, long_predicate IN BOOLEAN DEFAULT FALSE, sec_relevant_cols IN VARCHAR2 DEFAULT NULL, sec_relevant_cols_opt IN BINARY_INTEGER DEFAULT NULL, namespace IN VARCHAR2 DEFAULT NULL, attribute IN VARCHAR2 DEFAULT NULL);
パラメータ
表149-4 ADD_POLICYプロシージャのパラメータ
| パラメータ | 説明 | 
|---|---|
| 
 | 表、ビューまたはシノニムを含んでいるスキーマ。 | 
| 
 | ポリシーを追加する表、ビューまたはシノニムの名前。 | 
| 
 | 追加するポリシーの名前。同じ表またはビューでは固有の名前である必要があります。空白やカンマなどの特殊文字を入力しないでください。ポリシー名に特殊文字を使用する場合は、名前を引用符で囲みます。 | 
| 
 | ポリシー・ファンクションを所有するスキーマ。 | 
| 
 | ポリシーの述語を生成するファンクションの名前。ファンクションがパッケージ内で定義されている場合、パッケージ名は必ず存在する必要があります。 | 
| 
 | ポリシーを適用する文タイプ。 | 
| 
 | 文タイプ チェックは、ポリシー定義に含まれているセキュリティ関連の列にのみ適用されます。つまり、ポリシーで定義されているセキュリティ関連の列が | 
| 
 | ポリシーの追加時に、そのポリシーを使用可能にするかどうかを示します。デフォルトは | 
| 
 | デフォルトは | 
| 
 | デフォルト値の | 
| 
 | デフォルト値の | 
| 
 | 列レベルのVirtual Private Database (VPD)を使用可能にします(このVPDによって、機密情報を保持している列が問合せで参照されたときにセキュリティ・ポリシーが実行されます)。表およびビューに適用されますが、シノニムには適用されません。ポリシーで保護されたオブジェクトについて、カンマ区切りまたはスペース区切りの有効な列名のリストを指定します。このポリシーが実行されるのは、ユーザーのSQL文またはその基礎となるビュー定義の中で、指定した列が参照されたとき(あるいは抽象データ・タイプの列の場合は、その属性が参照されたとき)のみです。デフォルトは、オブジェクトのユーザー定義列のすべてです。 | 
| 
 | 
 | 
| 
 | アプリケーション・コンテキスト・ネームスペースを決定する名前。 | 
| 
 | アプリケーション・コンテキスト属性名を決定する属性。 | 
表149-5 DBMS_RLS.ADD_POLICYのポリシー・タイプ
| ポリシー・タイプ | 説明 | 
|---|---|
| 
 | ランタイム環境にかかわらず、述語は同じになります。静的ポリシーの関数は一度だけ実行されてSGAにキャッシュされます。同じオブジェクトにアクセスする文の場合、ポリシー関数が再度実行されることはありません。ただし同じカーソルの実行ごとに、 | 
| 
 | 同じポリシー・タイプの同一のポリシー・ファンクションにより生成されたキャッシュ済の述語が、最初にサーバーによって検索される点を除き、 | 
| 
 | 最後にカーソルが使用されてからコンテキストが変更されていることが検出された場合、サーバーは文の実行時にポリシー・ファンクションを再評価します。複数のクライアントが1つのデータベース・セッションを共有するセッション・プーリングの場合、クライアント切り替え時に中間層でコンテキストをリセットする必要があります。サーバーは、このポリシー・タイプの関数により戻された値をキャッシュしません。サーバーは文の解析時にポリシー関数を実行します。1つのオブジェクトのみに適用されます。 | 
| 
 | 同じデータベース・セッション内で、同じポリシー・タイプの同一のポリシー・ファンクションによって生成されたキャッシュ済の述語がサーバーにより最初に検索される点を除いて、 | 
| 
 | デフォルトのポリシー・タイプ。サーバーでは、どのようなシステム環境やセッション環境においても常になんらかの影響が述語にはあることを想定しているため、文の解析や実行のたびに必ずポリシー・ファンクションを再実行します。1つのオブジェクトのみに適用されます。 | 
使用上のノート
- 
                              SYSは、セキュリティ・ポリシーの制約を受けません。
- 
                              ポリシー・ファンクションは、サーバーがコールします。次の例は、ファンクションのインタフェースを示します。 
    FUNCTION policy_function (object_schema IN VARCHAR2, object_name VARCHAR2) 
        RETURN VARCHAR2 
    --- object_schema is the schema owning the table or view.
    --- object_name is the name of table, view, or synonym to which the policy applies. 
- 
                              ポリシー・ファンクションには、 WNDS(データベースへの書込み禁止状態)の純正レベルが必要です。参照: RESTRICT_REFERENCESプラグマの詳細は、『Oracle Database開発ガイド』を参照してください。
- 
                              同じオブジェクトにある複数のVPDポリシーから生成された述語は、全述語の論理積( AND条件)の結合効果があります。
- 
                              セキュリティ・チェックおよびオブジェクト検索は、動的な述語の副問合せで、オブジェクトのポリシー・ファンクションの所有者に対して実行されます。 
- 
                              ファンクションが長さ0(ゼロ)の述語を戻す場合は、ポリシーについて現行のユーザーに適用する制限はないと解釈されます。 
- 
                              述語で表の別名が必要な場合(たとえば、親オブジェクトが表タイプの場合)は、表またはビューの名前自体を別名として使用する必要があります。サーバーは次のような一時ビューを構成します。 "select c1, c2, ... from tab tab where <predicate>" 
- 
                              実行時にファンクションの妥当性チェックを行う目的は、インストールを容易にするため、およびインポート/エクスポート中に起こるその他の依存する問題を軽減するためです。 
- 
                              列レベルのVPD列マスクの動作( sec_relevant_cols_opt => dbms_rls.ALL_ROWSで指定)は、行のサブセットのみを戻す他のすべてのVPDポリシーとは根本的に異なります。列マスクの動作では、ユーザーの問合せで指定されたすべての行を戻しますが、機密情報の列の値はNULLと表示されます。このオプションには次の制約があります。- 
                                    SELECT文にのみ適用されます。
- 
                                    通常のVPD述語とは異なり、このポリシー・ファンクションで生成するマスク条件は、単純なブール式にする必要があります。 
- 
                                    アプリケーションで計算処理を実行し、また、計算結果に NULL値を想定しない場合は、列レベルのVPDのデフォルト動作を使用する必要があります。これはsec_relevant_colsパラメータで指定します。
- 
                                    このオプションとともに UPDATE AS SELECTを使用すると、表示を許可されている列の値のみが更新されます。
- 
                                    このオプションを使用すると表示されない行があります。たとえば: SELECT * FROM employees WHERE salary = 10 列マスクのオプションが設定されているため、 salary列からNULL値が戻された場合、この問合せでは行が戻らない可能性があります。
 
- 
                                    
- 
                              シノニムにVPDポリシーを追加すると、そのシノニムのすべての依存オブジェクト(シノニムを参照するポリシー・ファンクションを含む)が INVALIDとマークされます。
- 
                              グローバル・アプリケーション・コンテキストを状況依存ポリシーまたは共有の状況依存ポリシーに関連付けることはできません。 
- 
                              1つのオブジェクトに作成できるポリシーの最大数は255です。 
例
2つの例の最初のものとして、次によってhr.employee表に適用されるポリシーが作成されます。これは列レベルのVPDポリシーで、SELECT文またはINDEX文が表のsalary、birthdateまたはSSN列を明示的に参照するか、ビューを使用して暗黙的に参照した場合にのみ実行されます。また、CONTEXT_SENSITIVEポリシーでもあるため、サーバーは、解析時にポリシー・ファンクションhr.hrfunを起動します。namespaceおよびattributeアプリケーション・コンテキスト・パラメータは、アプリケーション・コンテキスト値が変更された場合にのみ、ポリシー評価を制限します。実行中にファンクションが起動されるのは、いずれかのセッションのプライベート・コンテキストが文カーソルの最終使用時とは変わっている場合のみです。long_predicateパラメータはコールから除外されるため、ポリシー・ファンクションによって生成された述語が4000バイト(デフォルトの長さ制限)を超えないようにしてください。
                        
BEGIN
   DBMS_RLS.ADD_POLICY(
      object_schema      => 'hr',
      object_name        => 'employee',
      policy_name        => 'hr_policy',
      function_schema    => 'hr',
      policy_function    => 'hrfun',
      statement_types    => 'select,index',
      policy_type        => DBMS_RLS.CONTEXT_SENSITIVE,
      sec_relevant_cols  => 'salary,birthdate,ssn',
      namespace          => 'empno_ctx',
      attribute          => 'emp_id');
END;
2番目の例では、次のコマンドによってホスティング用の同じオブジェクトに適用される別のポリシーが作成されるため、ユーザーは各自のサブスクライバIDに基づくデータのみにアクセスできます。これはSHARED_STATICポリシー・タイプとして定義されるため、サーバーはまずSGAキャッシュ内で述語の検索を試みます。検索できなかった場合、サーバーはポリシー・ファンクションsubfunの起動のみを行います。
                        
BEGIN
   DBMS_RLS.ADD_POLICY(
      object_schema      => 'hr',
      object_name        => 'employee',
      policy_name        => 'hosting_policy',
      function_schema    => 'hr',
      policy_function    => 'subfun',
      policy_type        => dbms_rls.SHARED_STATIC);
END;149.6.3 ADD_POLICY_CONTEXTプロシージャ
このプロシージャは、アクティブなアプリケーションのコンテキストを追加します。
構文
DBMS_RLS.ADD_POLICY_CONTEXT ( object_schema IN VARCHAR2 NULL, object_name IN VARCHAR2, namespace IN VARCHAR2, attribute IN VARCHAR2);
パラメータ
表149-6 ADD_POLICY_CONTEXTプロシージャのパラメータ
| パラメータ | 説明 | 
|---|---|
| 
 | 表、ビューまたはシノニムを含んでいるスキーマ。 | 
| 
 | ポリシーを追加する表、ビューまたはシノニムの名前。 | 
| 
 | アプリケーション・コンテキスト・ネームスペースを決定する名前。 | 
| 
 | アプリケーション・コンテキスト属性名を決定する属性。 | 
使用上のノート
次の点に注意してください。
- 
                              このプロシージャでは、ポリシーを実施するアプリケーション・コンテキストが示されます。このコンテキストは、実行するアプリケーションを決定します。 
- 
                              駆動コンテキストはセッションにもグローバルにもできます。 
- 
                              実行時、サーバーはこのコンテキストの値からアクティブなポリシー・グループの名前を取り出します。 
- 
                              ファイングレイン・アクセス・コントロールのポリシーを持つ各オブジェクトには、それぞれ少なくとも1つの駆動コンテキストを定義する必要があります。定義しない場合は、そのオブジェクトのすべてのポリシーが実行されます。 
- 
                              複数のコンテキストを同一のオブジェクトに追加すると、複数のポリシー・グループのポリシーが施行されます。 
- 
                              駆動コンテキストが NULLの場合は、すべてのポリシー・グループのポリシーが使用されます。
- 
                              ポリシーを所有するポリシー・グループが駆動コンテキストである場合、そのポリシー・グループ内の使用可能なすべてのポリシーが、 SYS_DEFAULTポリシー・グループの全ポリシーとともに適用されます。
- 
                              ポリシーを access_control_groupグループのHR.EMPLOYEES表に追加するには、次のコマンドを発行します。DBMS_RLS.ADD_GROUPED_POLICY('hr','employees','access_control_group','policy1','SYS', 'HR.ACCESS');
149.6.4 ALTER_POLICYプロシージャ
このプロシージャは、アプリケーション・コンテキスト属性をVPDポリシーに関連付けます。
構文
DBMS_RLS.ALTER_POLICY ( object_schema IN VARCHAR2 DEFAULT NULL, object_name IN VARCHAR2, policy_name IN VARCHAR2, alter_option IN NUMBER, namespace IN VARCHAR2 DEFAULT NULL, attribute IN VARCHAR2 DEFAULT NULL);
パラメータ
表149-7 ALTER_POLICYプロシージャのパラメータ
| パラメータ | 説明 | 
|---|---|
| 
 | 表、ビューまたはシノニムを含んでいるスキーマ。 | 
| 
 | ポリシーを追加する表、ビューまたはシノニムの名前。 | 
| 
 | ポリシーの名前。同一の表またはビューで一意です。 | 
| 
 | アプリケーション・コンテキストをOracle Virtual Private Databaseポリシーに追加するか、またはOracle Virtual Private Databaseポリシーから削除するかを指定するために使用されます。 | 
| 
 | アプリケーション・コンテキスト・ネームスペースを決定する名前。 | 
| 
 | アプリケーション・コンテキスト属性名を決定する属性。 | 
使用上のノート
次の点に注意してください。
- 
                              このプロシージャは、アプリケーション・コンテキスト・ネームスペースとアプリケーション・コンテキスト属性を、状況依存ポリシーまたは共有の状況依存ポリシーにのみ関連付けます。 DYNAMIC、STATICまたはSHARED_STATICポリシーでアプリケーション・コンテキスト・ネームスペースとアプリケーション・コンテキスト属性を指定すると、エラーが発生します。namespaceを指定した場合、プロシージャ・コールでattributeも指定する必要があります。
- 
                              グローバル・アプリケーション・コンテキストを状況依存ポリシーまたは共有の状況依存ポリシーに関連付けることはできません。 
- 
                              共有の状況依存VPDポリシーを変更する ALTER_POLICYをコールすると、同一のVPDポリシー・ファンクションを持つすべての共有の状況依存VPDポリシーが影響を受けます。
- 
                              駆動コンテキストはセッションにもグローバルにもできます。 
- 
                              実行時、サーバーはこのコンテキストの値からアクティブなポリシー・グループの名前を取り出します。 
- 
                              ファイングレイン・アクセス・コントロールのポリシーを持つ各オブジェクトには、それぞれ少なくとも1つの駆動コンテキストを定義する必要があります。定義しない場合は、そのオブジェクトのすべてのポリシーが実行されます。 
- 
                              複数のコンテキストを同一のオブジェクトに追加すると、複数のポリシー・グループのポリシーが施行されます。 
- 
                              駆動コンテキストが NULLの場合は、すべてのポリシー・グループのポリシーが使用されます。
- 
                              ポリシーを所有するポリシー・グループが駆動コンテキストである場合、そのポリシー・グループ内の使用可能なすべてのポリシーが、 SYS_DEFAULTポリシー・グループの全ポリシーとともに適用されます。
- 
                              ポリシーを access_control_groupグループのhr.employees表に追加するには、次のコマンドを発行します。DBMS_RLS.ADD_GROUPED_POLICY( 'hr','employees','access_control_group','policy1','SYS', 'HR.ACCESS'); 
149.6.5 ALTER_GROUPED_POLICYプロシージャ
このプロシージャは、アプリケーション・コンテキスト関連の変更を追加します。
構文
DBMS_RLS.ALTER_GROUPED_POLICY ( object_schema IN VARCHAR2 DEFAULT NULL, object_name IN VARCHAR2, policy_group IN VARCHAR2 DEFAULT SYS_DEFAULT, policy_name IN VARCHAR2, alter_option IN NUMBER, namespace IN VARCHAR2 DEFAULT NULL, attribute IN VARCHAR2 DEFAULT NULL);
パラメータ
表149-8 ALTER_GROUPED_POLICYプロシージャのパラメータ
| パラメータ | 説明 | 
|---|---|
| 
 | 表、ビューまたはシノニムを含んでいるスキーマ。 | 
| 
 | ポリシーを追加する表、ビューまたはシノニムの名前。 | 
| 
 | ポリシーが属するポリシー・グループの名前。同一の表またはビューで一意である必要があります。 | 
| 
 | ポリシーの名前。同一の表またはビューで一意です。 | 
| 
 | アプリケーション・コンテキストをOracle Virtual Private Databaseポリシーに追加するか、またはOracle Virtual Private Databaseポリシーから削除するかを指定するために使用されます。 | 
| 
 | アプリケーション・コンテキスト・ネームスペースを決定する名前。 | 
| 
 | アプリケーション・コンテキスト属性名を決定する属性。 | 
使用上のノート
次の点に注意してください。
- 
                              このプロシージャは、アプリケーション・コンテキスト・ネームスペースとアプリケーション・コンテキスト属性を、状況依存ポリシーまたは共有の状況依存ポリシーにのみ関連付けます。 DYNAMIC、STATICまたはSHARED_STATICポリシーでアプリケーション・コンテキスト・ネームスペースとアプリケーション・コンテキスト属性を指定すると、エラーが発生します。namespaceを指定した場合、プロシージャ・コールでattributeも指定する必要があります。
- 
                              グローバル・アプリケーション・コンテキストを状況依存ポリシーまたは共有の状況依存ポリシーに関連付けることはできません。 
- 
                              共有の状況依存VPDポリシーを変更する ALTER_GROUPED_POLICYをコールすると、同一のVPDポリシー・ファンクションを持つすべての共有の状況依存VPDポリシーが影響を受けます。
- 
                              駆動コンテキストはセッションにもグローバルにもできます。 
- 
                              実行時、サーバーはこのコンテキストの値からアクティブなポリシー・グループの名前を取り出します。 
- 
                              ファイングレイン・アクセス・コントロールのポリシーを持つ各オブジェクトには、それぞれ少なくとも1つの駆動コンテキストを定義する必要があります。定義しない場合は、そのオブジェクトのすべてのポリシーが実行されます。 
- 
                              複数のコンテキストを同一のオブジェクトに追加すると、複数のポリシー・グループのポリシーが施行されます。 
- 
                              駆動コンテキストが NULLの場合は、すべてのポリシー・グループのポリシーが使用されます。
- 
                              ポリシーを所有するポリシー・グループが駆動コンテキストである場合、そのポリシー・グループ内の使用可能なすべてのポリシーが、 SYS_DEFAULTポリシー・グループの全ポリシーとともに適用されます。
- 
                              ポリシーを access_control_groupグループのhr.employees表に追加するには、次のコマンドを発行します。DBMS_RLS.ADD_GROUPED_POLICY ( 'hr','employees','access_control_group','policy1','SYS', 'HR.ACCESS'); 
149.6.6 CREATE_POLICY_GROUPプロシージャ
このプロシージャはポリシー・グループを作成します。
構文
DBMS_RLS.CREATE_POLICY_GROUP ( object_schema IN VARCHAR2 NULL, object_name IN VARCHAR2, policy_group IN VARCHAR2);
パラメータ
表149-9 CREATE_POLICY_GROUPプロシージャのパラメータ
| パラメータ | 説明 | 
|---|---|
| 
 | 表、ビューまたはシノニムを含んでいるスキーマ。 | 
| 
 | ポリシーを追加する表、ビューまたはシノニムの名前。 | 
| 
 | ポリシーが属するポリシー・グループの名前 | 
使用上のノート
グループは、各表または各ビューで一意である必要があります。
149.6.7 DELETE_POLICY_GROUPプロシージャ
このプロシージャはポリシー・グループを削除します。
構文
DBMS_RLS.DELETE_POLICY_GROUP ( object_schema IN VARCHAR2 NULL, object_name IN VARCHAR2, policy_group IN VARCHAR2);
パラメータ
表149-10 DELETE_POLICY_GROUPプロシージャのパラメータ
| パラメータ | 説明 | 
|---|---|
| 
 | 表、ビューまたはシノニムを含んでいるスキーマ。 | 
| 
 | ポリシーを追加する表、ビューまたはシノニムの名前。 | 
| 
 | ポリシーが属するポリシー・グループの名前 | 
使用上のノート
次の点に注意してください。
- 
                              このプロシージャでは、指定した表、ビューまたはシノニムのポリシー・グループが削除されます。 
- 
                              ポリシー・グループ内にポリシーを残さないでください。 
149.6.8 DISABLE_GROUPED_POLICYプロシージャ
このプロシージャは、行レベルのグループ・セキュリティ・ポリシーを使用禁止にします。
構文
DBMS_RLS.DISABLE_GROUPED_POLICY ( object_schema IN VARCHAR2 NULL, object_name IN VARCHAR2, group_name IN VARCHAR2, policy_name IN VARCHAR2);
パラメータ
表149-11 DISABLE_GROUPED_POLICYプロシージャのパラメータ
| パラメータ | 説明 | 
|---|---|
| 
 | 表、ビューまたはシノニムを含んでいるスキーマ。 | 
| 
 | ポリシーを関連付ける表、ビューまたはシノニムの名前。 | 
| 
 | ポリシー・グループの名前。 | 
| 
 | 使用可能または使用禁止にするポリシーの名前。 | 
使用上のノート
- 
                              トランザクションがある場合、その現行のトランザクションはプロシージャによって操作の実行前にコミットを実行します。 
- 
                              コミットは、操作の最後に実行されます。 
- 
                              このプロシージャを実行するか、enableパラメータを FALSEに設定したENABLE_GROUPED_POLICYプロシージャを実行すると、ポリシーが使用禁止になります。
149.6.9 DROP_GROUPED_POLICYプロシージャ
ポリシー・グループに対応付けられたポリシーを削除します。
構文
DBMS_RLS.DROP_GROUPED_POLICY ( object_schema IN VARCHAR2 NULL, object_name IN VARCHAR2, policy_group IN VARCHAR2 'SYS_DEFAULT', policy_name IN VARCHAR2);
パラメータ
表149-12 DROP_GROUPED_POLICYプロシージャのパラメータ
| パラメータ | 説明 | 
|---|---|
| 
 | 表、ビューまたはシノニムを含んでいるスキーマ。 | 
| 
 | ポリシーを削除する表、ビューまたはシノニムの名前。 | 
| 
 | ポリシーが属するポリシー・グループの名前。 | 
| 
 | ポリシー名 | 
149.6.10 DROP_POLICYプロシージャ
このプロシージャは、ファイングレイン・アクセス・コントロールのポリシーを表、ビューまたはシノニムから削除します。
トランザクションがある場合、その現行のトランザクションはプロシージャによって操作の実行前にコミットを実行します。ただし、トランザクションがDDLイベント・トリガー内にある場合は、最初にコミットを実行しません。
参照:
コミットは、操作の最後にも実行されます。
構文
DBMS_RLS.DROP_POLICY ( object_schema IN VARCHAR2 NULL, object_name IN VARCHAR2, policy_name IN VARCHAR2);
パラメータ
表149-13 DROP_POLICYプロシージャのパラメータ
| パラメータ | 説明 | 
|---|---|
| 
 | 表、ビューまたはシノニムを含んでいるスキーマ。 | 
| 
 | ポリシーを削除する表、ビューまたはシノニムの名前。 | 
| 
 | 表、ビューまたはシノニムから削除するポリシーの名前。 | 
使用上のノート
- 
                              シノニムからVPDポリシーを削除すると、そのシノニムのすべての依存オブジェクト(シノニムを参照するポリシー・ファンクションを含む)が INVALIDとマークされます。
149.6.11 DROP_POLICY_CONTEXTプロシージャ
このプロシージャは、駆動コンテキストが1つ少なくなるように、オブジェクトから駆動コンテキストを削除します。
構文
DBMS_RLS.DROP_POLICY_CONTEXT ( object_schema IN VARCHAR2 NULL, object_name IN VARCHAR2, namespace IN VARCHAR2, attribute IN VARCHAR2);
パラメータ
表149-14 DROP_POLICY_CONTEXTプロシージャのパラメータ
| パラメータ | 説明 | 
|---|---|
| 
 | 表、ビューまたはシノニムを含んでいるスキーマ。 | 
| 
 | ポリシーを削除する表、ビューまたはシノニムの名前。 | 
| 
 | 駆動コンテキストのネームスペース | 
| 
 | 駆動コンテキストの属性 | 
149.6.12 ENABLE_GROUPED_POLICYプロシージャ
このプロシージャは、行レベルのグループ・セキュリティ・ポリシーを使用可能または使用禁止にします。
構文
DBMS_RLS.ENABLE_GROUPED_POLICY ( object_schema IN VARCHAR2 NULL, object_name IN VARCHAR2, group_name IN VARCHAR2, policy_name IN VARCHAR2, enable IN BOOLEAN TRUE);
パラメータ
表149-15 ENABLE_GROUPED_POLICYプロシージャのパラメータ
| パラメータ | 説明 | 
|---|---|
| 
 | 表、ビューまたはシノニムを含んでいるスキーマ。 | 
| 
 | ポリシーを関連付ける表、ビューまたはシノニムの名前。 | 
| 
 | ポリシー・グループの名前。 | 
| 
 | 使用可能または使用禁止にするポリシーの名前。 | 
| 
 | 
 | 
使用上のノート
- 
                              トランザクションがある場合、その現行のトランザクションはプロシージャによって操作の実行前にコミットを実行します。 
- 
                              コミットは、操作の最後に実行されます。 
- 
                              ポリシーは、その作成時に使用可能になっています。 
149.6.13 ENABLE_POLICYプロシージャ
このプロシージャは、ファイングレイン・アクセス・コントロールのポリシーを使用可能または使用禁止にします。ポリシーは、その作成時に使用可能になっています。
トランザクションがある場合、その現行のトランザクションはプロシージャによって操作の実行前にコミットを実行します。ただし、トランザクションがDDLイベント・トリガー内にある場合は、最初にコミットを実行しません。
参照:
コミットは、操作の最後にも実行されます。 
                        
構文
DBMS_RLS.ENABLE_POLICY ( object_schema IN VARCHAR2 NULL, object_name IN VARCHAR2, policy_name IN VARCHAR2, enable IN BOOLEAN TRUE);
パラメータ
表149-16 ENABLE_POLICYプロシージャのパラメータ
| パラメータ | 説明 | 
|---|---|
| 
 | 表、ビューまたはシノニムを含んでいるスキーマ。 | 
| 
 | ポリシーを関連付ける表、ビューまたはシノニムの名前。 | 
| 
 | 使用可能または使用禁止にするポリシーの名前。 | 
| 
 | ポリシーを使用可能にする場合は | 
149.6.14 REFRESH_GROUPED_POLICYプロシージャ
このプロシージャは、リフレッシュ・ポリシーに関連付けられたSQL文を再解析します。
構文
DBMS_RLS.REFRESH_GROUPED_POLICY ( object_schema IN VARCHAR2 NULL, object_name IN VARCHAR2 NULL, group_name IN VARCHAR2 NULL, policy_name IN VARCHAR2 NULL);
パラメータ
表149-17 REFRESH_GROUPED_POLICYプロシージャのパラメータ
| パラメータ | 説明 | 
|---|---|
| 
 | 表、ビューまたはシノニムを含んでいるスキーマ。 | 
| 
 | ポリシーを関連付ける表、ビューまたはシノニムの名前。 | 
| 
 | ポリシー・グループの名前。 | 
| 
 | ポリシー名 | 
使用上のノート
- 
                              このプロシージャは、ポリシーに関連付けられたすべてのキャッシュ済の文を再解析します。これにより、ポリシーへの最新の変更内容がプロシージャの実行直後に有効になります。 
- 
                              トランザクションがある場合、その現行のトランザクションはプロシージャによって操作の実行前にコミットを実行します。 
- 
                              コミットは、操作の最後に実行されます。 
- 
                              使用禁止になっているポリシーをリフレッシュしようとすると、プロシージャはエラーを戻します。 
- 
                              このプロシージャは、状況依存VPDポリシーと共有のVPDポリシーのキャッシュされた結果を削除します。 
149.6.15 REFRESH_POLICYプロシージャ
このプロシージャは、ポリシーに関連付けられたすべてのキャッシュ済の文を再解析します。これにより、ポリシーへの最新の変更内容がプロシージャの実行直後に有効になります。
トランザクションがある場合、その現行のトランザクションはプロシージャによって操作の実行前にコミットを実行します。ただし、トランザクションがDDLイベント・トリガー内にある場合は、最初にコミットを実行しません。
参照:
コミットは、操作の最後にも実行されます。 
                        
構文
DBMS_RLS.REFRESH_POLICY ( object_schema IN VARCHAR2 NULL, object_name IN VARCHAR2 NULL, policy_name IN VARCHAR2 NULL);
パラメータ
表149-18 REFRESH_POLICYプロシージャのパラメータ
| パラメータ | 説明 | 
|---|---|
| 
 | 表、ビューまたはシノニムを含んでいるスキーマ。 | 
| 
 | ポリシーを関連付ける表、ビューまたはシノニムの名前。 | 
| 
 | リフレッシュするポリシーの名前 | 
使用上のノート
- 
                              使用禁止になっているポリシーをリフレッシュしようとすると、プロシージャはエラーを戻します。 
- 
                              このプロシージャは、状況依存VPDポリシーと共有のVPDポリシーのキャッシュされた結果を削除します。