ヘッダーをスキップ
Oracle® Database PL/SQLパッケージおよびタイプ・リファレンス
11g リリース2(11.2)
B56262-06
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

125 DBMS_RLS

DBMS_RLSパッケージには、ファイングレイン・アクセス・コントロールの管理インタフェースが含まれ、これを使用してVirtual Private Database (VPD)を実装します。DBMS_RLSは、Enterprise Editionでのみ使用できます。


関連項目:

DBMS_RLSの使用方法については、『Oracle Databaseセキュリティ・ガイド』を参照してください。

この章では、次の項目について説明します。


DBMS_RLSの使用方法


概要

ファイングレイン・アクセス・コントロールをサポートする機能は、動的な述語に基づいています。セキュリティ・ルールはビューに埋め込まれていませんが、元表またはビューがDML文で参照される、文の解析時に取得されます。

表、ビューまたはシノニムに対する動的な述語はPL/SQLファンクションが生成し、PL/SQLインタフェースを介してセキュリティ・ポリシーに関連付けられます。次に例を示します。

DBMS_RLS.ADD_POLICY (
   'hr', 'employees', 'emp_policy', 'hr', 'emp_sec', 'select');

HRスキーマの下にあるEMPLOYEES表が問合せまたは副問合せ(SELECT)で参照されるたびに、サーバーは、EMP_SECファンクション(HRスキーマの下にある)をコールします。このファンクションは、EMP_POLICYポリシーについて、現行のユーザーに固有の述語を戻します。ポリシー・ファンクションは、ファンクション・コール時に使用可能なセッション環境変数に基づいて述語を生成できます。これらの変数は通常、アプリケーション・コンテキストのフォームで表示されます。ポリシーでは、セキュリティ関連の列と、INDEXSELECT、INSERT、UPDATEDELETEなどの文を自由に組み合せて指定できます。

次に、サーバーは、テキストがある一時ビューを作成します。

SELECT * FROM hr.employees WHERE P1

ここで、P1(SAL > 10000や副問合せなど)は、EMP_SECファンクションから戻された述語です。サーバーは、EMPLOYEES表をビューとして処理し、ビューのテキストをデータ・ディクショナリからではなく一時ビューから取得すること以外は、通常のビューと同様にビューの展開を行います。

述語に副問合せがある場合は、ポリシー・ファンクションの所有者(定義者)を使用して副問合せ内のオブジェクトを解決し、そのオブジェクトのセキュリティをチェックします。つまり、ポリシー保護されたオブジェクトへのアクセス権限を持つユーザーには、ポリシーについての知識は不要です。このユーザーには、基礎となるセキュリティ・ポリシーに対するオブジェクト権限の付与は不要です。さらに、サーバーはファンクション定義者の権限でコールを行うため、このユーザーにはポリシー・ファンクションでのEXECUTE権限は不要です。


注意:

一時ビューは、単一表または述語のみを持つビュー(つまり、JOINORDER BYGROUP BYなどがない)から導出されるため、親オブジェクトの更新可能性を保持できます。

DBMS_RLSは、セキュリティ・ポリシーを削除するか使用可能にするためのインタフェースも提供します。たとえば、EMP_POLICYを削除したり、使用可能にしたりする場合は、次のPL/SQL文を使用します。

DBMS_RLS.DROP_POLICY('hr', 'employees', 'emp_policy'); 
DBMS_RLS.ENABLE_POLICY('hr', 'employees', 'emp_policy', TRUE);

セキュリティ・モデル

一時ビューが副問合せを使用して作成されると、セキュリティ・チェックが実行されます。ポリシー・ファンクションを持ち、動的な述語を生成するスキーマは、セキュリティ・チェックおよびオブジェクト検索を行う一時ビューの定義者です。


使用上の注意

DBMS_RLSプロシージャは、現行のDMLトランザクションがある場合は、操作前にコミットします。ただし、プロシージャがDDLイベント・トリガーの内部にある場合、プロシージャは最初にコミットを実行しません。DDLトランザクションでは、DBMS_RLSプロシージャはDDLトランザクションの一部となります。

たとえば、ユーザーはCREATE TABLEのトリガーを作成できます。トリガー内部で、ALTER TABLEを介して列を追加でき、DBMS_RLSを介してポリシーを追加できます。これらすべての操作は、それぞれがDDL文であっても、CREATE TABLEと同じトランザクション内にあります。CREATE TABLEは、トリガーが正常終了した場合のみ成功します。

現行のカーソルおよび対応する述語のビューはv$vpd_policiesから利用できます。

シノニムが参照できるのは、ビューまたは表のみです。


DBMS_RLSサブプログラムの要約

表125-1 DBMS_RLSパッケージのサブプログラム

サブプログラム 説明

ADD_GROUPED_POLICYプロシージャ


ポリシー・グループに関連付けられたポリシーを追加します。

ADD_POLICYプロシージャ


ファイングレイン・アクセス・コントロールのポリシーを表、ビューまたはシノニムに追加します。

ADD_POLICY_CONTEXTプロシージャ


アクティブなアプリケーションのコンテキストを追加します。

CREATE_POLICY_GROUPプロシージャ


ポリシー・グループを作成します。

DELETE_POLICY_GROUPプロシージャ


ポリシー・グループを削除します。

DISABLE_GROUPED_POLICYプロシージャ


行レベルのグループ・セキュリティ・ポリシーを使用禁止にします。

DROP_GROUPED_POLICYプロシージャ


ポリシー・グループに関連付けられたポリシーを削除します。

DROP_POLICYプロシージャ


ファイングレイン・アクセス・コントロールのポリシーを表、ビューまたはシノニムから削除します。

DROP_POLICY_CONTEXTプロシージャ


駆動コンテキストが1つ少なくなるように、オブジェクトから駆動コンテキストを削除します。

ENABLE_GROUPED_POLICYプロシージャ


行レベルのグループ・セキュリティ・ポリシーを使用可能または使用禁止にします。

ENABLE_POLICYプロシージャ


ファイングレイン・アクセス・コントロールのポリシーを使用可能または使用禁止にします。

REFRESH_GROUPED_POLICYプロシージャ


リフレッシュ・ポリシーに関連付けられたSQL文を再解析します。

REFRESH_POLICYプロシージャ


ポリシーに関連付けられているすべてのキャッシュ済の文を再解析します。



ADD_GROUPED_POLICYプロシージャ

このプロシージャは、ポリシー・グループに関連付けられたポリシーを追加します。

構文

DBMS_RLS.ADD_GROUPED_POLICY(
   object_schema         IN VARCHAR2 NULL,
   object_name           IN VARCHAR2,
   policy_group          IN VARCHAR2 'SYS_DEFAULT',
   policy_name           IN VARCHAR2,
   function_schema       IN VARCHAR2 NULL,
   policy_function       IN VARCHAR2,
   statement_types       IN VARCHAR2 NULL,
   update_check          IN BOOLEAN FALSE,
   enable                IN BOOLEAN TRUE,
   static_policy         IN BOOLEAN  FALSE,
   policy_type           IN BINARY_INTEGER NULL,
   long_predicate           BOOLEAN  FALSE,
   sec_relevant_cols     IN VARCHAR2,
   sec_relevant_cols_opt IN BINARY_INTEGER NULL);

パラメータ

表125-2 ADD_GROUPED_POLICYプロシージャのパラメータ

パラメータ 説明

object_schema

表、ビューまたはシノニムを含んでいるスキーマ。デフォルトはNULLで、現行のユーザー・スキーマがobject_schemaとして使用されていることを意味します。

object_name

ポリシーを追加する表、ビューまたはシノニムの名前。

policy_group

ポリシーが属するポリシー・グループの名前。

policy_name

ポリシーの名前。同一の表またはビューで一意である必要があります。

function_schema

ポリシー・ファンクションを所有するスキーマ。デフォルトはNULLで、現行のユーザー・スキーマがfunction_schemaとして使用されていることを意味します。

policy_function

ポリシーの述語を生成するファンクションの名前。ファンクションがパッケージ内で定義されている場合、パッケージ名は必ず存在する必要があります。

statement_types

ポリシーを適用する文タイプ。INDEXSELECTINSERTUPDATEまたはDELETEを任意に組み合せることができます。デフォルトでは、これらの中からINDEX以外のすべてのタイプが適用されます。

update_check

INSERT文およびUPDATE文の場合にかぎり、update_checkをTRUEに設定すると、サーバーでポリシーがINSERT後またはUPDATE後の値に対してチェックされます。

enable

ポリシーの追加時に、そのポリシーを使用可能にするかどうかを示します。デフォルトはTRUEです。

static_policy

デフォルトはFALSEです。TRUEに設定されている場合は、オブジェクトにアクセスするすべてのユーザー(ただし、SYSまたはEXEMPT ACCESS POLICY権限を持つ特権ユーザーを除く)に対して、静的ポリシーのポリシー・ファンクションが同一の述語文字列を生成するものとサーバーはみなします。

policy_type

デフォルト値のNULLは、policy_typestatic_policyの値によって決定されることを意味します。使用可能なポリシー・タイプは、表125-4のとおりです。この中から指定したポリシー・タイプは、static_policyの値よりも優先されます。

long_predicate

デフォルト値のFALSEは、ポリシー・ファンクションから最大4000バイト長の述語が戻されることを意味します。TRUEは、述語のテキスト文字列の長さが最大32KBになることを意味します、このパラメータを使用できる前から存在するポリシーには、32K制限が維持されます。

sec_relevant_cols

列レベルのVirtual Private Database (VPD)を使用可能にします(このVPDによって、機密情報を保持している列が問合せで参照されたときにセキュリティ・ポリシーが実行されます)。表およびビューに適用されますが、シノニムには適用されません。ポリシーで保護されたオブジェクトについて、カンマ区切りまたはスペース区切りの有効な列名のリストを指定します。このポリシーが実行されるのは、ユーザーのSQL文またはその基礎となるビュー定義の中で、指定した列が参照されたとき(あるいは抽象データ・タイプの列の場合は、その属性が参照されたとき)のみです。デフォルトは、オブジェクトのユーザー定義列のすべてです。

sec_relevant_cols_opt

sec_relevant_colsとともに使用して、列レベルのVPDでフィルタ処理をした問合せ(SELECTのみ)に関して、機密情報の列がNULLになっているすべての行を表示します。デフォルトではNULLに設定され、sec_relevant_colsで定義したフィルタが有効になります。dbms_rls.ALL_ROWSに設定するとすべての行が表示されますが、機密情報の列の値があると、列の値がsec_relevant_colsでフィルタ処理されるため、NULLが表示されます。このオプションに関する制限および追加情報は、使用上の注意に関する説明を参照してください。


使用上の注意

  • このプロシージャでは、指定した表、ビューまたはシノニムにポリシーが追加され、指定したポリシー・グループにそのポリシーが関連付けられます。

  • ポリシー・グループは、CREATE_POLICY_GROUPプロシージャを使用して作成する必要があります。

  • ポリシー名は、指定したオブジェクトのポリシー・グループ内で一意である必要があります。

  • デフォルトのポリシー・グループ(SYS_DEFAULT)のポリシーは、アクティブなポリシー・グループに関係なく常に実行されます。ただし、ファイングレイン・アクセス・コントロールのポリシーは、EXEMPT ACCESS POLICYシステム権限を持つユーザーには適用されません。

  • object_schemaが指定されていない場合は、現在のユーザーのスキーマと想定されます。

  • function_schemaが指定されていない場合は、現在のユーザーのスキーマと想定されます。


ADD_POLICYプロシージャ

このプロシージャは、ファイングレイン・アクセス・コントロールのポリシーを表、ビューまたはシノニムに追加します。

トランザクションがある場合、その現行のトランザクションはプロシージャによって操作の実行前にコミットを実行します。ただし、トランザクションがDDLイベント・トリガー内にある場合は、最初にコミットを実行しません。


関連項目:

使用上の注意

コミットは、操作の最後にも実行されます。

構文

DBMS_RLS.ADD_POLICY (
   object_schema            IN VARCHAR2 NULL,
   object_name              IN VARCHAR2,
   policy_name              IN VARCHAR2,
   function_schema          IN VARCHAR2 NULL,
   policy_function          IN VARCHAR2,
   statement_types          IN VARCHAR2 NULL,
   update_check             IN BOOLEAN  FALSE,
   enable                   IN BOOLEAN  TRUE,
   static_policy            IN BOOLEAN  FALSE,
   policy_type              IN BINARY_INTEGER NULL,
   long_predicate           IN BOOLEAN  FALSE,
   sec_relevant_cols        IN VARCHAR2 NULL,
   sec_relevant_cols_opt    IN BINARY_INTEGER NULL);

パラメータ

表125-3 ADD_POLICYプロシージャのパラメータ

パラメータ 説明

object_schema

表、ビューまたはシノニムを含んでいるスキーマ。object_schema指定されていない場合は、現在のユーザーのスキーマと想定されます。

object_name

ポリシーを追加する表、ビューまたはシノニムの名前。

policy_name

追加するポリシーの名前。同じ表またはビューでは固有の名前である必要があります。

function_schema

ポリシー・ファンクションのスキーマ(NULLの場合は現行のデフォルト・スキーマ)。function_schema指定されていない場合は、現在のユーザーのスキーマと想定されます。

policy_function

ポリシーの述語を生成するファンクションの名前。ファンクションがパッケージ内で定義されている場合、パッケージ名は必ず存在する必要があります。

statement_types

ポリシーを適用する文タイプ。INDEXSELECTINSERTUPDATEまたはDELETEを任意に組み合せることができます。デフォルトでは、これらの中からINDEX以外のすべてのタイプが適用されます。

update_check

文タイプINSERTまたはUPDATEに対するオプションの引数。デフォルトはFALSEです。update_checkTRUEに設定すると、サーバーは、挿入または更新後の値に対してもポリシーをチェックします。

enable

ポリシーの追加時に、そのポリシーを使用可能にするかどうかを示します。デフォルトはTRUEです。

static_policy

デフォルトはFALSEです。TRUEに設定されている場合、サーバーは、静的ポリシーのポリシー・ファンクションによって、オブジェクトにアクセスするすべてのユーザー(ただし、SYSまたはEXEMPT ACCESS POLICY権限を持つ特権ユーザーを除く)に対して同一の述語文字列が生成されるとみなします。

policy_type

デフォルト値のNULLは、policy_typestatic_policyの値によって決定されることを意味します。使用可能なポリシー・タイプは、表125-4のとおりです。この中から指定したポリシー・タイプは、static_policyの値よりも優先されます。

long_predicate

デフォルト値のFALSEは、ポリシー・ファンクションから最大4000バイト長の述語が戻されることを意味します。TRUEは、述語のテキスト文字列の長さが最大32KBになることを意味します、このパラメータを使用できる前から存在するポリシーには、32K制限が維持されます。

sec_relevant_cols

列レベルのVirtual Private Database (VPD)を使用可能にします(このVPDによって、機密情報を保持している列が問合せで参照されたときにセキュリティ・ポリシーが実行されます)。表およびビューに適用されますが、シノニムには適用されません。ポリシーで保護されたオブジェクトについて、カンマ区切りまたはスペース区切りの有効な列名のリストを指定します。このポリシーが実行されるのは、ユーザーのSQL文またはその基礎となるビュー定義の中で、指定した列が参照されたとき(あるいは抽象データ・タイプの列の場合は、その属性が参照されたとき)のみです。デフォルトは、オブジェクトのユーザー定義列のすべてです。

sec_relevant_cols_opt

sec_relevant_colsとともに使用して、列レベルのVPDでフィルタ処理をした問合せ(SELECTのみ)に関して、機密情報の列がNULLになっているすべての行を表示します。デフォルトではNULLに設定され、sec_relevant_colsで定義したフィルタが有効になります。dbms_rls.ALL_ROWSに設定するとすべての行が表示されますが、機密情報の列の値があると、列の値がsec_relevant_colsでフィルタ処理されるため、NULLが表示されます。このオプションに関する制限および追加情報は、使用上の注意に関する説明を参照してください。


表125-4 DBMS_RLS.ADD_POLICYのポリシー・タイプ

ポリシー・タイプ 説明

STATIC

ランタイム環境にかかわらず、述語は同じになります。静的ポリシーの関数は一度だけ実行されてSGAにキャッシュされます。同じオブジェクトにアクセスする文の場合、ポリシー関数が再度実行されることはありません。ただし同じカーソルの実行ごとに、SYS_CONTEXTまたはSYSDATEなどの属性に基づいて述語がデータを別々にフィルタリングする場合があるため、同じ述語であっても別の行セットが生成される場合があります。1つのオブジェクトのみに適用されます。

SHARED_STATIC

同じポリシー・タイプの同一のポリシー・ファンクションにより生成されたキャッシュ済の述語が、最初にサーバーによって検索される点を除き、STATICと同じです。複数のオブジェクトで共有されます。

CONTEXT_SENSITIVE

最後にカーソルが使用されてからコンテキストが変更されていることが検出された場合、サーバーは文の実行時にポリシー・ファンクションを再評価します。複数のクライアントが1つのデータベース・セッションを共有するセッション・プーリングの場合、クライアント切り替え時に中間層でコンテキストをリセットする必要があります。サーバーは、このポリシー・タイプの関数により戻された値をキャッシュしません。サーバーは文の解析時にポリシー関数を実行します。1つのオブジェクトのみに適用されます。

SHARED_CONTEXT_SENSITIVE

同じデータベース・セッション内で、同じポリシー・タイプの同一のポリシー・ファンクションによって生成されたキャッシュ済の述語がサーバーにより最初に検索される点を除いて、CONTEXT_SENSITIVEと同じです。セッション・メモリー内に述語が存在する場合、ポリシー関数は再実行されず、セッションのプライベート・アプリケーション・コンテキストが変更されるまで、キャッシュされている値が有効になります。複数のオブジェクトで共有されます。

DYNAMIC

デフォルトのポリシー・タイプ。サーバーでは、どのようなシステム環境やセッション環境においても常になんらかの影響が述語にはあることを想定しているため、文の解析や実行のたびに必ずポリシー・ファンクションを再実行します。1つのオブジェクトのみに適用されます。


使用上の注意

  • SYSは、セキュリティ・ポリシーの制約を受けません。

  • object_schemaが指定されていない場合は、現在のユーザーのスキーマと想定されます。

  • function_schemaが指定されていない場合は、現在のユーザーのスキーマと想定されます。

  • ポリシー・ファンクションは、サーバーがコールします。次の例は、ファンクションのインタフェースを示します。

    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とマークされます。

2つの例の最初のものとして、次によってhr.employee表に適用されるポリシーが作成されます。これは列レベルのVPDポリシーで、SELECT文またはINDEX文が表のsalarybirthdateまたはSSN列を明示的に参照するか、ビューを使用して暗黙的に参照した場合にのみ実行されます。また、CONTEXT_SENSITIVEポリシーでもあるため、サーバーは、解析時にポリシー・ファンクションhr.hrfunを起動します。実行中にファンクションが起動されるのは、いずれかのセッションのプライベート・コンテキストが文カーソルの最終使用時とは変わっている場合のみです。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');
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;
/

ADD_POLICY_CONTEXTプロシージャ

このプロシージャは、アクティブなアプリケーションのコンテキストを追加します。

構文

DBMS_RLS.ADD_POLICY_CONTEXT (
   object_schema   IN VARCHAR2 NULL,
   object_name     IN VARCHAR2,
   namespace       IN VARCHAR2,
   attribute       IN VARCHAR2); 

パラメータ

表125-5 ADD_POLICY_CONTEXTプロシージャのパラメータ

パラメータ 説明

object_schema

表、ビューまたはシノニムを含んでいるスキーマ。

object_name

ポリシーを追加する表、ビューまたはシノニムの名前。

namespace

駆動コンテキストのネームスペース。

attribute

駆動コンテキストの属性。


使用上の注意

次の点に注意してください。

  • このプロシージャでは、ポリシーを実施するアプリケーション・コンテキストが示されます。このコンテキストは、実行するアプリケーションを決定します。

  • object_schemaが指定されていない場合は、現在のユーザーのスキーマと想定されます。

  • 駆動コンテキストはセッションにもグローバルにもできます。

  • 実行時、サーバーはこのコンテキストの値からアクティブなポリシー・グループの名前を取り出します。

  • ファイングレイン・アクセス・コントロールのポリシーを持つ各オブジェクトには、それぞれ少なくとも1つの駆動コンテキストを定義する必要があります。定義しない場合は、そのオブジェクトのすべてのポリシーが実行されます。

  • 複数のコンテキストを同一のオブジェクトに追加すると、複数のポリシー・グループのポリシーが施行されます。

  • 駆動コンテキストがNULLの場合は、すべてのポリシー・グループのポリシーが使用されます。

  • ポリシーを所有するポリシー・グループが駆動コンテキストである場合、そのポリシー・グループ内の使用可能なすべてのポリシーが、SYS_DEFAULTポリシー・グループの全ポリシーとともに適用されます。

  • ポリシーをaccess_control_groupグループのhr.employees表に追加するには、次のコマンドを発行します。

    DBMS_RLS.ADD_GROUPED_POLICY('hr','employees','access_control_group','policy1','SYS', 'HR.ACCESS');
    

CREATE_POLICY_GROUPプロシージャ

このプロシージャはポリシー・グループを作成します。

構文

DBMS_RLS.CREATE_POLICY_GROUP (
   object_schema   IN VARCHAR2 NULL,
   object_name     IN VARCHAR2,
   policy_group    IN VARCHAR2); 

パラメータ

表125-6 CREATE_POLICY_GROUPプロシージャのパラメータ

パラメータ 説明

object_schema

表、ビューまたはシノニムを含んでいるスキーマ。

object_name

ポリシーを追加する表、ビューまたはシノニムの名前。

policy_group

ポリシーが属するポリシー・グループの名前。


使用上の注意

グループは、各表または各ビューで一意である必要があります。


DELETE_POLICY_GROUPプロシージャ

このプロシージャはポリシー・グループを削除します。

構文

DBMS_RLS.DELETE_POLICY_GROUP (
  object_schema   IN VARCHAR2 NULL,
  object_name     IN VARCHAR2,
  policy_group    IN VARCHAR2); 

パラメータ

表125-7 DELETE_POLICY_GROUPプロシージャのパラメータ

パラメータ 説明

object_schema

表、ビューまたはシノニムを含んでいるスキーマ。

object_name

ポリシーを追加する表、ビューまたはシノニムの名前。

policy_group

ポリシーが属するポリシー・グループの名前。


使用上の注意

次の点に注意してください。

  • このプロシージャでは、指定した表、ビューまたはシノニムのポリシー・グループが削除されます。

  • ポリシー・グループ内にポリシーを残さないでください。


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); 

パラメータ

表125-8 ENABLE_GROUPED_POLICYプロシージャのパラメータ

パラメータ 説明

object_schema

表、ビューまたはシノニムを含んでいるスキーマ。

object_name

ポリシーを関連付ける表、ビューまたはシノニムの名前。

group_name

ポリシーのグループの名前。

policy_name

使用可能または使用禁止にするポリシーの名前。


使用上の注意

  • トランザクションがある場合、その現行のトランザクションはプロシージャによって操作の実行前にコミットを実行します。

  • コミットは、操作の最後に実行されます。

  • このプロシージャを実行するか、enableパラメータをFALSEに設定したENABLE_GROUPED_POLICYプロシージャを実行すると、ポリシーが使用禁止になります。


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); 

パラメータ

表125-9 DROP_GROUPED_POLICYプロシージャのパラメータ

パラメータ 説明

object_schema

表、ビューまたはシノニムを含んでいるスキーマ。

object_name

ポリシーを削除する表、ビューまたはシノニムの名前。

policy_group

ポリシーが属するポリシー・グループの名前。

policy_name

ポリシー名。



DROP_POLICYプロシージャ

このプロシージャは、ファイングレイン・アクセス・コントロールのポリシーを表、ビューまたはシノニムから削除します。

トランザクションがある場合、その現行のトランザクションはプロシージャによって操作の実行前にコミットを実行します。ただし、トランザクションがDDLイベント・トリガー内にある場合は、最初にコミットを実行しません。


関連項目:

使用上の注意

コミットは、操作の最後にも実行されます。

構文

DBMS_RLS.DROP_POLICY (
   object_schema   IN VARCHAR2 NULL,
   object_name     IN VARCHAR2,
   policy_name     IN VARCHAR2); 

パラメータ

表125-10 DROP_GROUPED_POLICYプロシージャのパラメータ

パラメータ 説明

object_schema

表、ビューまたはシノニムを含んでいるスキーマ。object_schemaが指定されていない場合、またはNULLが指定された場合は、現在のユーザーのスキーマと想定されます。

object_name

ポリシーを削除する表、ビューまたはシノニムの名前。

policy_name

表、ビューまたはシノニムから削除するポリシーの名前。


使用上の注意

  • シノニムからVPDポリシーを削除すると、そのシノニムのすべての依存オブジェクト(シノニムを参照するポリシー・ファンクションを含む)がINVALIDとマークされます。


DROP_POLICY_CONTEXTプロシージャ

このプロシージャは、駆動コンテキストが1つ少なくなるように、オブジェクトから駆動コンテキストを削除します。

構文

DBMS_RLS.DROP_POLICY_CONTEXT (
   object_schema   IN VARCHAR2 NULL,
   object_name     IN VARCHAR2,
   namespace       IN VARCHAR2,
   attribute       IN VARCHAR2); 

パラメータ

表125-11 DROP_POLICY_CONTEXTプロシージャのパラメータ

パラメータ 説明

object_schema

表、ビューまたはシノニムを含んでいるスキーマ。object_schemaが指定されていない場合、またはNULLが指定された場合は、現在のユーザーのスキーマと想定されます。

object_name

ポリシーを削除する表、ビューまたはシノニムの名前。

namespace

駆動コンテキストのネームスペース。

attribute

駆動コンテキストの属性。



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); 

パラメータ

表125-12 ENABLE_GROUPED_POLICYプロシージャのパラメータ

パラメータ 説明

object_schema

表、ビューまたはシノニムを含んでいるスキーマ。object_schemaが指定されていない場合、またはNULLが指定された場合は、現在のユーザーのスキーマと想定されます。

object_name

ポリシーを関連付ける表、ビューまたはシノニムの名前。

group_name

ポリシーのグループの名前。

policy_name

使用可能または使用禁止にするポリシーの名前。

enable

TRUEに設定するとポリシーが使用可能になり、FALSEに設定すると使用禁止になります。


使用上の注意

  • トランザクションがある場合、その現行のトランザクションはプロシージャによって操作の実行前にコミットを実行します。

  • コミットは、操作の最後に実行されます。

  • ポリシーは、その作成時に使用可能になっています。


ENABLE_POLICYプロシージャ

このプロシージャは、ファイングレイン・アクセス・コントロールのポリシーを使用可能または使用禁止にします。ポリシーは、その作成時に使用可能になっています。

トランザクションがある場合、その現行のトランザクションはプロシージャによって操作の実行前にコミットを実行します。ただし、トランザクションがDDLイベント・トリガー内にある場合は、最初にコミットを実行しません。


関連項目:

使用上の注意

コミットは、操作の最後にも実行されます。

構文

DBMS_RLS.ENABLE_POLICY (
   object_schema IN VARCHAR2 NULL,
   object_name   IN VARCHAR2,
   policy_name   IN VARCHAR2,
   enable        IN BOOLEAN TRUE);

パラメータ

表125-13 ENABLE_POLICYプロシージャのパラメータ

パラメータ 説明

object_schema

表、ビューまたはシノニムを含んでいるスキーマ。object_schemaが指定されていない場合、またはNULLが指定された場合は、現在のユーザーのスキーマと想定されます。

object_name

ポリシーが関連付けられている表、ビューまたはシノニムの名前。

policy_name

使用可能または使用禁止にするポリシーの名前。

enable

ポリシーを使用可能にする場合はTRUE、使用禁止にする場合はFALSE



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); 

パラメータ

表125-14 REFRESH_GROUPED_POLICYプロシージャのパラメータ

パラメータ 説明

object_schema

表、ビューまたはシノニムを含んでいるスキーマ。object_schemaが指定されていない場合、またはNULLが指定された場合は、現在のユーザーのスキーマと想定されます。

object_name

ポリシーを関連付ける表、ビューまたはシノニムの名前。

group_name

ポリシーのグループの名前。

policy_name

ポリシー名。


使用上の注意

  • このプロシージャは、ポリシーに関連付けられたすべてのキャッシュ済の文を再解析します。これにより、ポリシーへの最新の変更内容がプロシージャの実行直後に有効になります。

  • トランザクションがある場合、その現行のトランザクションはプロシージャによって操作の実行前にコミットを実行します。

  • コミットは、操作の最後に実行されます。

  • 使用禁止になっているポリシーをリフレッシュしようとすると、プロシージャはエラーを戻します。


REFRESH_POLICYプロシージャ

このプロシージャは、ポリシーに関連付けられたすべてのキャッシュ済の文を再解析します。これにより、ポリシーへの最新の変更内容がプロシージャの実行直後に有効になります。

トランザクションがある場合、その現行のトランザクションはプロシージャによって操作の実行前にコミットを実行します。ただし、トランザクションがDDLイベント・トリガー内にある場合は、最初にコミットを実行しません。


関連項目:

使用上の注意

コミットは、操作の最後にも実行されます。

構文

DBMS_RLS.REFRESH_POLICY (
   object_schema IN VARCHAR2 NULL,
   object_name   IN VARCHAR2 NULL,
   policy_name   IN VARCHAR2 NULL); 

パラメータ

表125-15 REFRESH_POLICYプロシージャのパラメータ

パラメータ 説明

object_schema

表、ビューまたはシノニムを含んでいるスキーマ。object_schemaが指定されていない場合、またはNULLが指定された場合は、現在のユーザーのスキーマと想定されます。

object_name

ポリシーが関連付けられている表、ビューまたはシノニムの名前。

policy_name

リフレッシュするポリシーの名前。


使用上の注意

使用禁止になっているポリシーをリフレッシュしようとすると、プロシージャはエラーを戻します。