3.7 完全データ・ポリシーの作成と完全リダクション値の変更

完全リダクション・ポリシーを作成して、データ列のすべての内容をリダクションできます。また、必要に応じて、デフォルトの完全リダクション値を変更できます。

3.7.1 完全リダクション・ポリシーの作成

完全データ・リダクション・ポリシーでは、データ列のすべての内容がリダクションされます。

3.7.1.1 完全データ・リダクション・ポリシーの作成について

列のすべてのデータをリダクションするリダクション・ポリシーを設定するには、function_typeパラメータをDBMS_REDACT.FULLに設定する必要があります。

デフォルトでは、NUMBERデータ型の列はゼロ(0)に置き換えられ、文字データ型の列は空白1つ( )に置き換えられます。DBMS_REDACT.UPDATE_FULL_REDACTION_VALUESプロシージャを使用することにより、このデフォルトを変更できます。

3.7.1.2 完全リダクション・ポリシーを作成する構文

DBMS_REDACT.ADD_POLICYプロシージャでは、完全リダクション・ポリシーを作成できます。

完全データ・リダクション・ポリシーを作成する場合のDBMS_REDACT.ADD_POLICYフィールドは次のとおりです。

DBMS_REDACT.ADD_POLICY (
   object_schema           IN VARCHAR2 := NULL, 
   object_name             IN VARCHAR2,
   column_name             IN VARCHAR2 := NULL,
   policy_name             IN VARCHAR2,
   function_type           IN BINARY_INTEGER := NULL,
   expression              IN VARCHAR2,
   enable                  IN BOOLEAN := TRUE);

ここでは次のように指定します:

3.7.1.3 例: 完全リダクション・ポリシー

DBMS_REDACT.ADD_POLICY PL/SQLプロシージャを使用して、完全リダクション・ポリシーを作成できます。

例3-1に、HR.EMPLOYEES表のCOMMISSION_PCT列にあるすべての値に対して完全リダクションを使用する方法を示します。この例の式パラメータは常にTRUEに評価されるため、EXEMPT REDACTION POLICYシステムまたはスキーマ権限が付与されているか、SYSDBA管理権限が付与されているユーザー以外は、表の問合せを行うすべてのユーザーに対してデータ・リダクション・ポリシーが適用されます。

例3-1 完全データ・リダクション・ポリシー

BEGIN
 DBMS_REDACT.ADD_POLICY(
   object_schema    => 'hr', 
   object_name      => 'employees', 
   column_name      => 'commission_pct',
   policy_name      => 'redact_com_pct', 
   function_type    => DBMS_REDACT.FULL,
   expression       => '1=1');
END;
/

問合せおよびリダクションされた結果:

SELECT COMMISSION_PCT FROM HR.EMPLOYEES;

COMMISSION_PCT
--------------
0
0
0

3.7.1.4 例: 完全にリダクションされた文字値

DBMS_REDACT.ADD_POLICY PL/SQLプロシージャを使用して、文字値を完全にリダクションするポリシーを作成できます。

例3-2では、mavis.cust_info表にあるuser_id列のユーザーIDを完全にリダクションする方法を示します。user_id列は、VARCHAR2データ型です。出力は単一の空白です。expression設定により、MGRロールのあるユーザーは、ユーザーIDを表示できます。

例3-2 完全にリダクションされる文字値

BEGIN
 DBMS_REDACT.ADD_POLICY(
   object_schema   => 'mavis', 
   object_name     => 'cust_info', 
   column_name     => 'user_id',
   policy_name     => 'redact_cust_user_ids', 
   function_type   => DBMS_REDACT.FULL,
   expression      => 'SYS_CONTEXT(''SYS_SESSION_ROLES'',''MGR'') = ''FALSE''');
END;
/

問合せおよびリダクションされた結果:

SELECT user_id FROM mavis.cust_info;

USER_ID
------------
0
0
0

3.7.2 デフォルトの完全データ・リダクション値の変更

DBMS_REDACT.UPDATE_FULL_REDACTION_VALUESプロシージャは、デフォルトの完全データ・リダクション値を変更します。

3.7.2.1 デフォルトの完全データ・リダクション値の変更について

完全データ・リダクション・ポリシーで表示されるデフォルトの値を変更できます。

Oracle DatabaseがNUMBERデータ型の列に完全リダクション(DBMS_REDACT.FULL)を実行する場合、デフォルトでは0がリダクションされた値です。これを他の値(たとえば、7)に変更する場合、DBMS_REDACT.UPDATE_FULL_REDACTION_VALUESプロシージャを実行すると、この値を変更できます。この変更は、現在のデータベース・インスタンスのすべてのデータ・リダクション・ポリシーに適用されます。値を有効にするには、変更した後に、データベースを再起動する必要があります。現在の値を検索するには、REDACTION_VALUES_FOR_TYPE_FULLデータ・ディクショナリ・ビューを問い合せます。

この変更は、完全なデータ・リダクションを使用するデータベースのすべてのデータ・リダクション・ポリシーに影響することに注意してください。デフォルトの完全データ・リダクション値を変更する前に、既存の完全データ・リダクション・ポリシーにこの変更が及ぼす影響を確認してください。

3.7.2.2 DBMS_REDACT.UPDATE_FULL_REDACTION_VALUESプロシージャの構文

DBMS_REDACT.UPDATE_FULL_REDACTION_VALUESプロシージャでは、サポートされている標準のOracle Databaseデータ型を使用できます。

構文は以下のとおりです。

DBMS_REDACT.UPDATE_FULL_REDACTION_VALUES (
 number_val       IN NUMBER                    NULL,
 binfloat_val     IN BINARY_FLOAT              NULL,
 bindouble_val    IN BINARY_DOUBLE             NULL,
 char_val         IN CHAR                      NULL,
 varchar_val      IN VARCHAR2                  NULL,
 nchar_val        IN NCHAR                     NULL,
 nvarchar_val     IN NVARCHAR2                 NULL,
 date_val         IN DATE                      NULL,
 ts_val           IN TIMESTAMP                 NULL,
 tswtz_val        IN TIMESTAMP WITH TIME ZONE  NULL,
 blob_val         IN BLOB                      NULL,
 clob_val         IN CLOB                      NULL,
 nclob_val        IN NCLOB                     NULL,
 boolean_val      IN BOOLEAN                   NULL);

ここでは次のように指定します:

  • number_valは、NUMBERデータ型の列のデフォルトの値を変更します。

  • binfloat_valは、BINARY_FLOATデータ型の列のデフォルトの値を変更します。

  • bindouble_valは、BINARY_DOUBLEデータ型の列のデフォルトの値を変更します。

  • char_valは、CHARデータ型の列のデフォルトの値を変更します。

  • varchar_valは、VARCHAR2データ型の列のデフォルトの値を変更します。

  • nchar_valは、NCHARデータ型の列のデフォルトの値を変更します。

  • nvarchar_valは、NVARCHAR2データ型の列のデフォルトの値を変更します。

  • date_valは、DATEデータ型の列のデフォルトの値を変更します。

  • ts_valは、TIMESTAMPデータ型の列のデフォルトの値を変更します。

  • tswtz_valは、TIMESTAMP WITH TIME ZONEデータ型の列のデフォルトの値を変更します。

  • blob_valは、BLOBデータ型の列のデフォルトの値を変更します。

  • clob_valは、CLOBデータ型の列のデフォルトの値を変更します。

  • nclobは、NCLOBデータ型の列のデフォルトの値を変更します。

  • boolean_valは、BOOLEANデータ型の列のデフォルトの値を変更します。

    COMPATIBLEデータベース初期化パラメータを23以上に設定した後、DBMS_REDACT.UPDATE_FULL_REDACTION_VALUESboolean_valパラメータにNULL以外の値を指定して初めて呼び出すと、REDACTION_VALUES_FOR_TYPE_FULLのカタログ・ビューにBOOLEAN_VALUE列が表示され、BOOLCOL列がSYS.RADM_FPTM$データ・ディクショナリ表に表示されます。

3.7.2.3 デフォルトの完全データ・リダクション値の変更

デフォルトの完全データ・リダクション値を変更するには、DBMS_REDACT.UPDATE_FULL_REDACTION_VALUESプロシージャを使用します。

  1. DBMS_REDACT PL/SQLパッケージに対するEXECUTE権限と、ADMINISTER REDACTION POLICYシステムまたはスキーマ権限があるユーザーでPDBに接続します。
  2. 変更する値を確認します。
    たとえば、NUMBERデータ型を使用する列の現在の値を確認します。
    SELECT NUMBER_VALUE FROM REDACTION_VALUES_FOR_TYPE_FULL;
    
    NUMBER_VALUE
    ------------
               0
    
  3. DBMS_REDACT.UPDATE_FULL_REDACTION_VALUESプロシージャを実行して値を変更します。
    例:
    EXEC DBMS_REDACT.UPDATE_FULL_REDACTION_VALUES (number_val => 7);
    
  4. PDBをクローズしてから再度オープンします。
    ALTER PLUGGABLE DATABASE pdb_name CLOSE IMMEDIATE;
    ALTER PLUGGABLE DATABASE pdb_name OPEN;
  5. 変更した値を確認します。
    SELECT NUMBER_VALUE FROM REDACTION_VALUES_FOR_TYPE_FULL;
    
    NUMBER_VALUE
    –-----------
               7