3.18 チュートリアル: SQL式を使用したリダクションされた値を含むレポートの作成

SQL式を使用して、Oracle Data Redactionポリシーが定義された列に基づくレポートを作成できます。

  1. DBMS_REDACT PL/SQLパッケージに対するEXECUTE権限と、ADMINISTER REDACTION POLICYシステムまたはスキーマ権限があるユーザーでPDBに接続します。
  2. HR.EMPLOYEES表に対して次のようなデータ・リダクション・ポリシーを作成します。
    このポリシーにより9という数値を持つSALARY列の最初の4桁の値およびCOMMISSION_PCT列の最初の1桁の値が9に置換されます。
    BEGIN
     DBMS_REDACT.ADD_POLICY(
       object_schema          => 'HR', 
       object_name            => 'EMPLOYEES', 
       column_name            => 'SALARY',
       column_description     => 'Employees salary column shows employee salary',
       policy_name            => 'redact_emp_sal_comm', 
       policy_description     => 'Partially redacts the employee salary column',
       function_type          => DBMS_REDACT.PARTIAL,
       function_parameters    => '9,1,4',
       expression             => '1=1');
    END;
    /
    BEGIN
     DBMS_REDACT.ALTER_POLICY(
       object_schema          => 'HR',
       object_name            => 'EMPLOYEES',
       policy_name            => 'redact_emp_sal_comm',
       action                 => DBMS_REDACT.ADD_COLUMN,
       column_name            => 'COMMISSION_PCT',
       function_type          => DBMS_REDACT.PARTIAL,
       function_parameters    => '9,1,1',
       expression             => '1=1');
    END;
    /
    
  3. HRユーザーとして接続してから、次のレポートを実行します。
    このレポートでは、SQL式(SALARY + COMMISSION_PCT)を使用して、従業員の給料と歩合を組み合せます。
    SELECT (SALARY + COMMISSION_PCT) total_emp_compensation
    FROM HR.EMPLOYEES
    WHERE DEPARTMENT_ID = 80;
    
    TOTAL_EMP_COMPENSATION
    ----------------------
                    0
                    0
                    0
    ...
    
  4. レポートには、連結などのSQL式を使用します。
    例:
    SELECT 'Employee ID '          || EMPLOYEE_ID ||
           ' has a salary of '     || SALARY || 
           ' and a commission of ' || COMMISSION_PCT || '.' detailed_emp_compensation
    FROM HR.EMPLOYEES
    WHERE DEPARTMENT_ID = 80
    ORDER BY EMPLOYEE_ID;
    
    DETAILED_EMP_COMPENSATION
    -------------------------------------------------------------
    Employee ID 150 has a salary of 99990 and a commission of .95.
    Employee ID 151 has a salary of 9999 and a commission of .95.
    Employee ID 152 has a salary of 9999 and a commission of .9.
    ...
  5. redact_emp_sal_commデータ・リダクション・ポリシーを作成したユーザーとして接続します。
  6. 次の文を実行して、ポリシーを削除します。
    BEGIN
      DBMS_REDACT.DROP_POLICY (
        object_schema => 'HR',
        object_name   => 'EMPLOYEES',
        policy_name   => 'redact_emp_sal_comm');
    END;
    /