12cの新機能Data Redactioのうち、列内容を部分的に変換する部分リダクションは、複数の列にリダクションを設定することが出来ます。
また、それぞれの列に異なるリダクション方式を指定できます。
BEGIN
DBMS_REDACT.ADD_POLICY(
policy_name => 'EMP_P',
object_schema => 'SCOTT',
object_name => 'EMP',
column_name => 'HIREDATE',
expression => '1=1',
function_type => DBMS_REDACT.PARTIAL,
function_parameters => 'Md1YHMS');
END;
/
まずは、scottスキマーのemp表hiredate列に対して、日付を「1」にリダクションするポリシーを作成します。
SQL> SELECT EMPNO,ENAME,HIREDATE,SAL FROM EMP;
EMPNO ENAME HIREDATE SAL
---------- ---------- -------- ----------
7369 SMITH 80-12-01 800
7499 ALLEN 81-02-01 1600
7521 WARD 81-02-01 1250
7566 JONES 81-04-01 2975
7654 MARTIN 81-09-01 1250
7698 BLAKE 81-05-01 2850
7782 CLARK 81-06-01 2450
7839 KING 81-11-01 5000
7844 TURNER 81-09-01 1500
7900 JAMES 81-12-01 950
7902 FORD 81-12-01 3000
EMPNO ENAME HIREDATE SAL
---------- ---------- -------- ----------
7934 MILLER 82-01-01 1300
12行が選択されました。
その時点での表のSELECT結果です。
HIREDATE列がリダクションされてます。
BEGIN
DBMS_REDACT.ALTER_POLICY(
policy_name => 'EMP_P',
object_schema => 'SCOTT',
object_name => 'EMP',
action => DBMS_REDACT.ADD_COLUMN,
column_name => 'SAL',
function_type => DBMS_REDACT.PARTIAL,
function_parameters => '7,1,3');
END;
/
ALTER_POLICYでポリシーを追加します。
同じEMP表SAL列に対して、先頭の1桁目から3桁目を7にリダクションするポリシーです。
SQL> SELECT EMPNO,ENAME,HIREDATE,SAL FROM EMP;
EMPNO ENAME HIREDATE SAL
---------- ---------- -------- ----------
7369 SMITH 80-12-01 777
7499 ALLEN 81-02-01 7770
7521 WARD 81-02-01 7770
7566 JONES 81-04-01 7775
7654 MARTIN 81-09-01 7770
7698 BLAKE 81-05-01 7770
7782 CLARK 81-06-01 7770
7839 KING 81-11-01 7770
7844 TURNER 81-09-01 7770
7900 JAMES 81-12-01 777
7902 FORD 81-12-01 7770
EMPNO ENAME HIREDATE SAL
---------- ---------- -------- ----------
7934 MILLER 82-01-01 7770
12行が選択されました。
HIREDATEとSALの両方がリダクションされました。
また、それぞれの列に異なるリダクション方式を指定できます。
BEGIN
DBMS_REDACT.ADD_POLICY(
policy_name => 'EMP_P',
object_schema => 'SCOTT',
object_name => 'EMP',
column_name => 'HIREDATE',
expression => '1=1',
function_type => DBMS_REDACT.PARTIAL,
function_parameters => 'Md1YHMS');
END;
/
まずは、scottスキマーのemp表hiredate列に対して、日付を「1」にリダクションするポリシーを作成します。
SQL> SELECT EMPNO,ENAME,HIREDATE,SAL FROM EMP;
EMPNO ENAME HIREDATE SAL
---------- ---------- -------- ----------
7369 SMITH 80-12-01 800
7499 ALLEN 81-02-01 1600
7521 WARD 81-02-01 1250
7566 JONES 81-04-01 2975
7654 MARTIN 81-09-01 1250
7698 BLAKE 81-05-01 2850
7782 CLARK 81-06-01 2450
7839 KING 81-11-01 5000
7844 TURNER 81-09-01 1500
7900 JAMES 81-12-01 950
7902 FORD 81-12-01 3000
EMPNO ENAME HIREDATE SAL
---------- ---------- -------- ----------
7934 MILLER 82-01-01 1300
12行が選択されました。
その時点での表のSELECT結果です。
HIREDATE列がリダクションされてます。
BEGIN
DBMS_REDACT.ALTER_POLICY(
policy_name => 'EMP_P',
object_schema => 'SCOTT',
object_name => 'EMP',
action => DBMS_REDACT.ADD_COLUMN,
column_name => 'SAL',
function_type => DBMS_REDACT.PARTIAL,
function_parameters => '7,1,3');
END;
/
ALTER_POLICYでポリシーを追加します。
同じEMP表SAL列に対して、先頭の1桁目から3桁目を7にリダクションするポリシーです。
SQL> SELECT EMPNO,ENAME,HIREDATE,SAL FROM EMP;
EMPNO ENAME HIREDATE SAL
---------- ---------- -------- ----------
7369 SMITH 80-12-01 777
7499 ALLEN 81-02-01 7770
7521 WARD 81-02-01 7770
7566 JONES 81-04-01 7775
7654 MARTIN 81-09-01 7770
7698 BLAKE 81-05-01 7770
7782 CLARK 81-06-01 7770
7839 KING 81-11-01 7770
7844 TURNER 81-09-01 7770
7900 JAMES 81-12-01 777
7902 FORD 81-12-01 7770
EMPNO ENAME HIREDATE SAL
---------- ---------- -------- ----------
7934 MILLER 82-01-01 7770
12行が選択されました。
HIREDATEとSALの両方がリダクションされました。

コメント