すべてのプロダクト
Search
ドキュメントセンター

PolarDB:DBMS_RLS

最終更新日:Jun 05, 2024

DBMS_RLSパッケージを使用すると、特定のPolarDBデータベースオブジェクトで仮想プライベートデータベース (VPD) を実行できます。

表1. DBMS RLS関数とストアドプロシージャ
関数またはストアドプロシージャデータ型戻り値タイプ説明
ADD POLICY (オブジェクトスキーマ、オブジェクト名、ポリシー名、関数スキーマ、ポリシー関数 [, statement types [, update check [, enable [, static policy [, policy type [, long predicate [, sec relevant cols [, sec relevant cols opt ]]]]]]]]))ストアドプロシージャN/Aデータベースオブジェクトにセキュリティポリシーを追加します。
DROP_POLICY(object_schema, object_name, policy_name)ストアドプロシージャN/Aデータベースオブジェクトからセキュリティポリシーを削除します。
ENABLE_POLICY(object_schema, object_name, policy_name, enable)ストアドプロシージャN/Aセキュリティポリシーを有効または無効にします。

PolarDBのDBMS_RLSパッケージは、Oracleが提供するパッケージと比較して部分的に実装されています。 PolarDBは、前の表に示した関数とストアドプロシージャのみをサポートします。

Virtual Private Database は、セキュリティポリシーを使用するきめの細かいアクセス制御を採用しています。 Virtual Private Databaseのきめ細かいアクセス制御とは、特定の行までデータへのアクセスを制御できることを意味します。

セキュリティポリシーをエンコードするルールは、ポリシー関数で定義されます。 このポリシー関数は、特定の入力パラメーターと戻り値を持つ SPL 関数です。 セキュリティポリシーは、ポリシー関数を特定のデータベースオブジェクト (通常はテーブル) に関連付けることです。

説明
  • PolarDBでは、PolarDBでサポートされているすべての言語でポリシー関数を記述できます。 たとえば、Oracle互換のSPL言語とは別に、SQLおよびPL/pgSQL言語を使用することもできます。
  • PolarDB Virtual Private databaseでサポートされているデータベースオブジェクトはテーブルです。 ポリシーはビューまたはシノニムには適用することができません。
次のリストでは、仮想プライベートデータベースを使用する利点について説明します。
  • Virtual Private Database は、きめ細かいレベルのセキュリティを提供しています。 GRANT文によって与えられるデータベースオブジェクトレベルの特権は、データベースオブジェクトのインスタンス全体に対するアクセス特権を決定する。 対照的に、Virtual Private Database は、データベースオブジェクトインスタンスの個々の行に対するアクセスを制御できます。
  • INSERT、UPDATE、DELETE、SELECTなど、SQL文の種類に基づいて異なるセキュリティポリシーを適用できます。
  • セキュリティポリシーは動的であり、データベースオブジェクトに影響を与える適用可能なSQL文ごとに異なる場合があります。 セキュリティポリシーは、データベースオブジェクトにアクセスするアプリケーションのセッションユーザーなど、複数の要因によって決定されます。
  • セキュリティポリシーの呼び出しは、データベースオブジェクトにアクセスするすべてのアプリケーションに対して透過的です。 したがって、セキュリティポリシーを適用するために個々のアプリケーションを変更する必要はありません。
  • セキュリティポリシーを有効にすると、以下の注記に記載されているシステム権限を除いて、アプリケーション (新しいアプリケーションを含む) がセキュリティポリシーを回避することはできません。
  • スーパーユーザーでさえ、ノートに記載されているシステム権限以外のセキュリティポリシーを回避することはできません。
説明 セキュリティポリシーを回避する唯一の方法は、ユーザーに EXEMPT ACCESS POLICY システム権限を付与することです。 EXEMPT ACCESS POLICY権限を付与する場合は注意してください。 この権限を持つユーザーは、データベース内のすべてのポリシーから免除されます。

DBMS_RLS パッケージは、ポリシーを作成、削除、有効化、および無効化するためのストアドプロシージャを提供しています。

次のプロセスに基づいて仮想プライベートデータベースを実装します。
  • ポリシー関数を作成します。 この関数には、VARCHAR2 の型の 2 つの入力パラメーターが必要です。 最初の入力パラメーターは、ポリシーが適用されるデータベースオブジェクトを含むスキーマに使用されます。 2 番目の入力パラメーターは、データベースオブジェクトの名前に使用されます。 この関数の戻り値の型は VARCHAR2 である必要があります。 この関数は、WHERE 句の述語の形式で文字列を返す必要があります。 この述語は、データベースオブジェクトに作用するSQLステートメントにAND条件として動的に追加されます。 ポリシー関数の述語を満たさない行は、SQL文の結果セットから除外されます。
  • ADD_POLICY ストアドプロシージャを使用して、ポリシー関数をデータベースオブジェクトに関連付ける新しいポリシーを定義します。 ADD_POLICYストアドプロシージャを使用して、ポリシーを適用するSQL文の種類 (INSERT、UPDATE、DELETE、またはSELECT) を指定できます。 作成時にポリシーを有効にするかどうかを指定することができます。 新しく挿入された行と更新された行の変更されたイメージにポリシーを適用できるかどうかを指定することもできます。
  • ENABLE_POLICY ストアドプロシージャを使用して、既存のポリシーを無効または有効にします。
  • DROP_POLICY ストアドプロシージャを使用して、既存のポリシーを削除します。 DROP_POLICY ストアドプロシージャは、ポリシー関数または関連するデータベースオブジェクトを削除しません。

ポリシーを作成すると、Oracle データベースと互換性のあるカタログビューで表示することができます。

SYS_CONTEXT 関数は、DBMS_RLS パッケージでよく使用されます。 構文:
SYS_CONTEXT(namespace, attribute)
  • namespaceはVARCHAR2データ型です。 有効な値は USERENV のみです。 このパラメーターに別の値が指定されている場合には、関数は NULL を返します。
  • 属性はVARCHAR2データ型です。 下表に、属性パラメーターで使用可能な値を示します。
    パラメーター値等価値
    SESSION_USERpg_catalog.session_user
    CURRENT_USERpg_catalog.current_user
    CURRENT_SCHEMApg_catalog.current_schema
    HOSTpg_catalog.inet_host
    IP_ADDRESSpg_catalog.inet_client_addr
    SERVER_HOSTpg_catalog.inet_server_addr
説明 DBMS_RLSパッケージの例では、PolarDBで提供されるサンプルempテーブルの変更されたコピーを使用します。 salesmgr という名前のロールには、テーブルに対するすべての権限が付与されます。 次の例に示すように、vpempという名前のempテーブルとsalesmgrロールの変更されたコピーを作成できます。
CREATE TABLE public.vpemp AS SELECT empno, ename, job, sal, comm, deptno FROM emp;
ALTER TABLE vpemp ADD authid VARCHAR2(12);
UPDATE vpemp SET authid = 'researchmgr' WHERE deptno = 20;
UPDATE vpemp SET authid = 'salesmgr' WHERE deptno = 30;
SELECT * からvpemp;

empno | ename | job | sal | comm | deptno | autid
------- -------- ----------- -------------------------------------------------------
  7782 | CLARK  | MANAGER   | 2450.00 |         |     10 | 
  7839 | KING   | PRESIDENT | 5000.00 |         |     10 | 
  7934 | MILLER | CLERK     | 1300.00 |         |     10 | 
  7369 | SMITH  | CLERK     |  800.00 |         |     20 | researchmgr
  7566 | JONES  | MANAGER   | 2975.00 |         |     20 | researchmgr
  7788 | SCOTT  | ANALYST   | 3000.00 |         |     20 | researchmgr
  7876 | ADAMS  | CLERK     | 1100.00 |         |     20 | researchmgr
  7902 | FORD   | ANALYST   | 3000.00 |         |     20 | researchmgr
  7499 | ALLEN  | SALESMAN  | 1600.00 |  300.00 |     30 | salesmgr
  7521 | WARD   | SALESMAN  | 1250.00 |  500.00 |     30 | salesmgr
  7654 | MARTIN | SALESMAN  | 1250.00 | 1400.00 |     30 | salesmgr
  7698 | BLAKE  | MANAGER   | 2850.00 |         |     30 | salesmgr
  7844 | TURNER | SALESMAN  | 1500.00 |    0.00 |     30 | salesmgr
  7900 | ジェームズ | CLERK | 950.00 | | 30 | salesmgr
(14行)

LOGIN PASSWORD「パスワード」でROLE salesmgrを作成します。vpempですべてをsalesmgrに付与します。

ADD_POLICY

ADD_POLICYストアドプロシージャは、ポリシー関数をデータベースオブジェクトに関連付けることによってポリシーを作成するために使用されます。

ADD_POLICY ストアドプロシージャを呼び出すには、スーパーユーザーである必要があります。

ADD_POLICY(object_schema VARCHAR2、object_name VARCHAR2、
  policy_name VARCHAR2, function_schema VARCHAR2,
  policy_function VARCHAR2
  [, statement_types VARCHAR2
  [, update_check BOOLEAN
  [, enable BOOLEAN
  [, static_policy BOOLEAN
  [, policy_type INTEGER
  [, long_predicate BOOLEAN
  [, sec_relevant_cols VARCHAR2
  [, sec_relevant_cols_opt INTEGER ]]]]) 

Parameters

パラメーター説明
object_schemaポリシーが適用されるデータベースオブジェクトを含むスキーマの名前です。
object_nameポリシーが適用されるデータベースオブジェクトの名前です。 データベースオブジェクトには、複数のポリシーを適用することができます。
policy_nameポリシーに割り当てられた名前。 データベースオブジェクト (object_schemaobject_nameで識別) とポリシー名の組み合わせは、データベース内で一意である必要があります。
function_schemaポリシー関数を含むスキーマの名前です。
説明 ポリシー関数はパッケージに属している場合があります。 この場合、function_schemaには、パッケージが定義されているスキーマの名前を含める必要があります。
policy_functionセキュリティポリシーのルールを定義するSPL関数の名前。 同じ関数を複数のポリシーで指定することができます。
説明 ポリシー関数はパッケージに属している場合があります。 この場合、policy_functionにはパッケージ名もドット表記で含める必要があります (package_name. function_name) 。
statement_typesポリシーが適用されるSQL文のコンマ区切りのリスト。 有効なSQL文は、INSERT、UPDATE、DELETE、およびSELECTです。 デフォルト値: INSERT,UPDATE,DELETE,SELECT
説明 PolarDBは、INDEX型のステートメントを受け入れますが無視します。 ポリシーは、PolarDBのインデックス操作には適用できません。
update_checkupdate_checkは、INSERTおよびupdate SQL文にのみ適用されます。
  • update_checkがTRUEに設定されている場合、ポリシーは新しく挿入された行と、更新された行の変更されたイメージに適用されます。 新しい行または変更された行がポリシー関数の述語に基づいて修飾されない場合、INSERTまたはUPDATEステートメントは例外をスローし、行は挿入または変更されません。
  • update_checkがFALSEに設定されている場合、ポリシーは新しく挿入された行または更新された行の変更されたイメージには適用されません。 したがって、同じポリシーを呼び出す後続のSQLステートメントの結果セットに、新しく挿入された行が表示されない場合があります。 同様に、UPDATEステートメントの前にポリシーに基づいて修飾された行は、同じポリシーを呼び出す後続のSQLステートメントの結果セットに表示されない場合があります。
enable
  • enableがTRUEに設定されている場合、ポリシーは有効になり、statement_typesパラメーターで指定されたSQLステートメントに適用されます。 デフォルト値は TRUE です。
  • enableがFALSEに設定されている場合、ポリシーは無効になり、SQL文には適用されません。 ENABLE_POLICY ストアドプロシージャを使用してポリシーを有効にすることができます。
static_policy
  • Oracleでは、static_policyがTRUEに設定されている場合、ポリシーは静的です。 ポリシー関数は、データベースオブジェクトのポリシーによって初めて呼び出されたときに、データベースオブジェクトごとに 1 回評価されます。 ポリシー関数の結果の述語文字列はメモリに保存されます。 この場合、述語文字列は、データベースサーバーインスタンスの実行中にそのデータベースオブジェクトに対するポリシーのすべての呼び出しで再利用することができます。
  • Oracleでは、static_policyがFALSEに設定されている場合、ポリシーは動的です。 ポリシー関数が再評価され、ポリシー関数の述語文字列が、ポリシーのすべての呼び出しに対して再生成されます。 デフォルト値は FALSE です。
説明
  • Oracle 10gでは、policy_typeパラメーターが導入されました。これは、static_policyパラメーターを置き換えるためのものです。 Oracleでは、policy_typeパラメーターがデフォルト値のNULLに設定されていない場合、policy_typeパラメーター値はstatic_policy値をオーバーライドします。
  • PolarDBは動的ポリシーのみを実装し、static_policyパラメーターの値を無視します。
policy_typeOracleでは、policy_typeはポリシー関数の再評価を決定します。 デフォルト値は NULL です。
説明 PolarDBは動的ポリシーのみを実装し、policy_typeパラメーターの値を無視します。
longpredicateOracleでは、long_predicateがTRUEに設定されている場合、述語の長さは最大32 KBになります。 それ以外の場合、述語の長さは 4 KB に制限されます。 デフォルト値は FALSE です。
説明 PolarDBは、longpredicateパラメーターの値を無視します。 PolarDBポリシー関数は、すべての実用的な目的で無制限の長さの述語を返すことができます。
sec_relevant_colssec_related_colsは、object_nameの列のコンマ区切りリストです。 このパラメーターは、リストされた列に列レベルの Virtual Private Database を提供します。 リストされた列がstatement_typesで指定された型のSQLステートメントで参照されている場合、ポリシーが適用されます。 そのような列が参照されていない場合には、ポリシーは適用されません。

デフォルト値は NULL です。 データベースオブジェクトのすべての列がsec_related_colsに含まれている場合も、同じ効果が得られます。

sec_relevant_cols_optOracleでは、sec_relevant_cols_optDBMS_RLS.ALL_ROWS (値1のINTEGER定数) に設定されている場合、sec_related_colsにリストされている列は、適用されたポリシー述語がfalseのすべての行でNULLを返します。 sec_relevant_cols_optDBMS_RLS.ALL_ROWSに設定されていない場合、これらの行は結果セットで返されません。 デフォルト値は NULL です。
説明 PolarDBDBMS_RLS.ALL_ROWS機能をサポートしていません。 sec_relevant_cols_optDBMS_RLS.ALL_ROWS (INTEGER値1) に設定されている場合、PolarDBはエラーをスローします。

CREATE OR REPLACE FUNCTION verify_session_user ()
    p_schema        VARCHAR2,
    p_object VARCHAR2
)
戻りVARCHAR2
IS
開始
    RETURN 'authid = SYS_CONTEXT(''USERENV'' 、''SESSION_USER'')';
エンド; 

この関数は、ADD_POLICYストアドプロシージャで指定された型の各SQLステートメントのWHERE句に追加される述語authid = SYS_CONTEXT('USERENV', 'SESSION_USER') を生成します。

これにより、SQL文の効果は、authid列の内容がセッションユーザーと同じ行に制限されます。

説明 この例では、SYS_CONTEXT関数を使用してログオンユーザー名を返します。 Oracle では、SYS_CONTEXT 関数はアプリケーションコンテキストの属性を返します。 SYS_CONTEXT 関数の最初のパラメーターは、アプリケーションコンテキストの名前です。 2 番目のパラメーターは、アプリケーションコンテキスト内で設定された属性の名前です。 USERENV は、現在のセッションを記述する特別な組み込み名前空間です。 PolarDBは、SYS_CONTEXT関数の特別な使用をサポートしていますが、アプリケーションコンテキストはサポートしていません。

次の匿名ブロックは、ADD_POLICYストアドプロシージャを呼び出して、secure_updateという名前のポリシーを作成します。 このポリシーは、vpempテーブルを参照するときにINSERT、UPDATE、またはDELETE SQL文が提供されているかどうかに関係なく、verify_session_user関数を使用してvpempテーブルに適用されます。

DECLARE
    v_object_schema         VARCHAR2(30) := 'public';
    v_object_name           VARCHAR2(30) := 'vpemp';
    v_policy_name           VARCHAR2(30) := 'secure_update';
    v_function_schema VARCHAR2(30) := 'polardb';
    v_policy_function       VARCHAR2(30) := 'verify_session_user';
    v_statement_types       VARCHAR2(30) := 'INSERT,UPDATE,DELETE';
    v_update_check          BOOLEAN      := TRUE;
    v_enable BOOLEAN := TRUE;
開始
    DBMS_RLS.ADD_POLICY(
        v_object_schema,
        v_object_name,
        v_policy_name,
        v_function_schema,
        v_policy_function,
        v_statement_types,
        v_update_check,
        v_enable
    );
エンド; 

ポリシーが作成された後、salesmgr ユーザーによってターミナルセッションが開始されます。 以下のクエリは、vpemp テーブルの内容を示しています。

\c polardb salesmgr
ユーザーsalesmgrのパスワード:
これで、ユーザー「salesmgr」としてデータベース「polardb」に接続されます。
SELECT * FROM vpemp;
 empno | ename | job | sal | comm | deptno | autid
------- -------- ----------- -------------------------------------------------------
  7782 | CLARK  | MANAGER   | 2450.00 |         |     10 | 
  7839 | KING   | PRESIDENT | 5000.00 |         |     10 | 
  7934 | MILLER | CLERK     | 1300.00 |         |     10 | 
  7369 | SMITH  | CLERK     |  800.00 |         |     20 | researchmgr
  7566 | JONES  | MANAGER   | 2975.00 |         |     20 | researchmgr
  7788 | SCOTT  | ANALYST   | 3000.00 |         |     20 | researchmgr
  7876 | ADAMS  | CLERK     | 1100.00 |         |     20 | researchmgr
  7902 | FORD   | ANALYST   | 3000.00 |         |     20 | researchmgr
  7499 | ALLEN  | SALESMAN  | 1600.00 |  300.00 |     30 | salesmgr
  7521 | WARD   | SALESMAN  | 1250.00 |  500.00 |     30 | salesmgr
  7654 | MARTIN | SALESMAN  | 1250.00 | 1400.00 |     30 | salesmgr
  7698 | BLAKE  | MANAGER   | 2850.00 |         |     30 | salesmgr
  7844 | TURNER | SALESMAN  | 1500.00 |    0.00 |     30 | salesmgr
  7900 | ジェームズ | CLERK | 950.00 | | 30 | salesmgr
(14行) 

修飾されていないUPDATEステートメント (WHERE句なし) がsalesmgrユーザーによって発行されます。

UPDATE vpemp SET comm = sal * .75;
更新6 

ポリシーは、テーブルのすべての行を更新する代わりに、更新の影響を authid 列に salesmgr 値が含まれる行に制限します。 salesmgr値は、ポリシー関数述語authid = SYS_CONTEXT('USERENV', 'SESSION_USER') によって指定されます。

以下のクエリは、authid に salesmgr が含まれている行の comm 列が変更されたことを示しています。 他のすべての行は変更されません。

SELECT * からvpemp;
 empno | ename | job | sal | comm | deptno | autid
------- -------- ----------- -------------------------------------------------------
  7782 | CLARK  | MANAGER   | 2450.00 |         |     10 | 
  7839 | KING   | PRESIDENT | 5000.00 |         |     10 | 
  7934 | MILLER | CLERK     | 1300.00 |         |     10 | 
  7369 | SMITH  | CLERK     |  800.00 |         |     20 | researchmgr
  7566 | JONES  | MANAGER   | 2975.00 |         |     20 | researchmgr
  7788 | SCOTT  | ANALYST   | 3000.00 |         |     20 | researchmgr
  7876 | ADAMS  | CLERK     | 1100.00 |         |     20 | researchmgr
  7902 | FORD   | ANALYST   | 3000.00 |         |     20 | researchmgr
  7499 | ALLEN  | SALESMAN  | 1600.00 | 1200.00 |     30 | salesmgr
  7521 | WARD   | SALESMAN  | 1250.00 |  937.50 |     30 | salesmgr
  7654 | MARTIN | SALESMAN  | 1250.00 |  937.50 |     30 | salesmgr
  7698 | BLAKE  | MANAGER   | 2850.00 | 2137.50 |     30 | salesmgr
  7844 | TURNER | SALESMAN  | 1500.00 | 1125.00 |     30 | salesmgr
  7900 | ジェームズ | CLERK | 950.00 | 712.50 | 30 | salesmgr
(14行) 

ADD_POLICYストアドプロシージャでupdate_checkパラメーターがTRUEに設定されているため、次のINSERTステートメントは例外をスローします。 authid列に指定したresearchmgr値がsalesmgrセッションユーザーと一致しないため、ポリシーは無効です。

INSERT INTO vpemp VALUES (9001、'SMITH' 、'ANALYST' 、3200.00、NULL、20、'researchmgr');
エラー: チェックオプション違反のポリシー
詳細: ポリシー述語は、更新された値
でFALSEに評価されました

update_checkがFALSEに設定されている場合、前述のINSERTステートメントが有効になります。

次の例では、sec_related_colsパラメーターを使用して、SQL文で特定の列が参照されている場合にのみポリシーを適用します。 この例では、次のポリシー関数を使用して、従業員の給与値が2000未満の行を選択します。

関数の作成または置き換えsal_lt_2000 (
    p_schema        VARCHAR2,
    p_object VARCHAR2
)
戻りVARCHAR2
IS
開始
    RETURN 'sal < 2000 ';
エンド; 

ポリシーは、SELECTステートメントにsalまたはcomm列が含まれている場合にのみ適用されるように作成されます。

DECLARE
    v_object_schema         VARCHAR2(30) := 'public';
    v_object_name           VARCHAR2(30) := 'vpemp';
    v_policy_name           VARCHAR2(30) := 'secure_salary';
    v_function_schema VARCHAR2(30) := 'polardb';
    v_policy_function       VARCHAR2(30) := 'sal_lt_2000';
    v_statement_types       VARCHAR2(30) := 'SELECT';
    v_sec_relevant_cols VARCHAR2(30) := 'sal、comm';
開始
    DBMS_RLS.ADD_POLICY(
        v_object_schema,
        v_object_name,
        v_policy_name,
        v_function_schema,
        v_policy_function,
        v_statement_types,
        sec_relevant_cols => v_sec_relevant_cols
    );
エンド; 

クエリが sal または comm 列を参照しない場合には、ポリシーは適用されません。 以下のクエリは、vpemp テーブルの 14 行すべてを返します。

SELECT empno、ename、job、deptno、authid FROM vpemp;
 empno | ename | job | deptno | autid
------- ------- -----------------------------------------
  7782 | CLARK  | MANAGER   |     10 | 
  7839 | KING   | PRESIDENT |     10 | 
  7934 | MILLER | CLERK     |     10 | 
  7369 | SMITH  | CLERK     |     20 | researchmgr
  7566 | JONES  | MANAGER   |     20 | researchmgr
  7788 | SCOTT  | ANALYST   |     20 | researchmgr
  7876 | ADAMS  | CLERK     |     20 | researchmgr
  7902 | FORD   | ANALYST   |     20 | researchmgr
  7499 | ALLEN  | SALESMAN  |     30 | salesmgr
  7521 | WARD   | SALESMAN  |     30 | salesmgr
  7654 | MARTIN | SALESMAN  |     30 | salesmgr
  7698 | BLAKE  | MANAGER   |     30 | salesmgr
  7844 | TURNER | SALESMAN  |     30 | salesmgr
  7900 | ジェームズ | CLERK | 30 | salesmgr
(14行) 

クエリが sal または comm 列を参照する場合には、ポリシーがクエリに適用されます。 このクエリは、salが2000以上の行を削除します。同様の出力が表示されます。

SELECT empno、ename、job、sal、comm、deptno、authid FROM vpemp;
 empno | ename | job | sal | comm | deptno | autid
------- -------- ---------- -------------------------------------------------------
  7934 | MILLER | CLERK    | 1300.00 |         |     10 | 
  7369 | SMITH  | CLERK    |  800.00 |         |     20 | researchmgr
  7876 | ADAMS  | CLERK    | 1100.00 |         |     20 | researchmgr
  7499 | ALLEN  | SALESMAN | 1600.00 | 1200.00 |     30 | salesmgr
  7521 | WARD   | SALESMAN | 1250.00 |  937.50 |     30 | salesmgr
  7654 | MARTIN | SALESMAN | 1250.00 |  937.50 |     30 | salesmgr
  7844 | TURNER | SALESMAN | 1500.00 | 1125.00 |     30 | salesmgr
  7900 | ジェームズ | CLERK | 950.00 | 712.50 | 30 | salesmgr
(8行) 

DROP_POLICY

DROP_POLICYストアドプロシージャは、既存のポリシーを削除するために使用されます。 ただし、DROP_POLICY ストアドプロシージャは、ポリシー関数およびポリシーに関連付けられたデータベースオブジェクトを削除することはできません。
説明 DROP_POLICY ストアドプロシージャを実行するには、スーパーユーザーである必要があります。
DROP_POLICY(object_schema VARCHAR2、object_name VARCHAR2、

  policy_name VARCHAR2) 

Parameters

パラメーター説明
object_schemaポリシーが適用されるデータベースオブジェクトのスキーマ名。
object_nameポリシーが適用されるデータベースオブジェクトの名前です。
policy_name削除するポリシーの名前です。

以下の例では、public.vpemp テーブルの secure_update ポリシーを無効にします。

DECLARE
    v_object_schema         VARCHAR2(30) := 'public';
    v_object_name           VARCHAR2(30) := 'vpemp';
    v_policy_name VARCHAR2(30) := 'secure_update';
開始
    DBMS_RLS.DROP_POLICY(
        v_object_schema,
        v_object_name,
        v_policy_name
    );
エンド; 

ENABLE_POLICY

ENABLE_POLICYストアドプロシージャは、指定されたデータベースオブジェクトの既存のポリシーを有効または無効にするために使用されます。
説明 ENABLE_POLICY ストアドプロシージャを実行するには、スーパーユーザーである必要があります。
ENABLE_POLICY(object_schema VARCHAR2、object_name VARCHAR2、
  policy_name VARCHAR2、BOOLEANを有効にします) 

Parameters

パラメーター説明
オブジェクトスキーマポリシーが適用されるデータベースオブジェクトのスキーマ名。
オブジェクト名ポリシーが適用されるデータベースオブジェクトの名前です。
ポリシー名有効または無効にするポリシーの名前です。
enableポリシーを有効または無効にします。
  • enable パラメーターを TRUE に設定すると、ポリシーが有効になります。
  • enable パラメーターが FALSE に設定されている場合には、ポリシーは無効になります。

以下の例では、public.vpemp テーブルの secure_update ポリシーを無効にします。

DECLARE
    v_object_schema         VARCHAR2(30) := 'public';
    v_object_name           VARCHAR2(30) := 'vpemp';
    v_policy_name           VARCHAR2(30) := 'secure_update';
    v_enable BOOLEAN := FALSE;
開始
    DBMS_RLS.ENABLE_POLICY(
        v_object_schema,
        v_object_name,
        v_policy_name,
        v_enable
    );
エンド;