DBMS_REDACTパッケージのadd_policyで作成したredactionのポリシーはalter_policyで変更することが出来ます。
すでに定義した列の修正や、別の列に定義を追加することが可能です。
BEGIN
DBMS_REDACT.alter_policy (
object_schema => 'test',
object_name => 'payment_details',
policy_name => 'redact_card_info',
action => DBMS_REDACT.modify_column,
column_name => 'card_no',
function_type => DBMS_REDACT.partial,
function_parameters => '1,1,12'
);
END;
/
ALTER SESSION SET nls_date_format='DD-MON-YYYY';
COLUMN card_no FORMAT 9999999999999999
SET linesize 300
SELECT *
FROM payment_details
ORDER BY id;
ID CUSTOMER_ID CARD_NO CARD_STRING EXPIRY_DATE SEC_CODE VALID_DATE
---------- ----------- ----------------- ------------------- ---------------- ---------- ----------------
1 4000 1111111111111234 1234-1234-1234-1234 06-7月 -2017 123
2 4001 1111111111112345 2345-2345-2345-2345 06-7月 -2017 234
3 4002 1111111111113456 3456-3456-3456-3456 06-7月 -2017 345
4 4003 1111111111114567 4567-4567-4567-4567 06-7月 -2017 456
5 4004 1111111111115678 5678-5678-5678-5678 06-7月 -2017 567
既にポリシーが定義された列の定義を修正しています。
「function_parameters => '1,1,12'」→1文字目から12文字目を1という数字に置き換えます。
BEGIN
DBMS_REDACT.alter_policy (
object_schema => 'test',
object_name => 'payment_details',
policy_name => 'redact_card_info',
action => DBMS_REDACT.add_column,
column_name => 'card_string',
function_type => DBMS_REDACT.partial,
function_parameters => 'VVVVFVVVVFVVVVFVVVV,VVVV-VVVV-VVVV-VVVV,#,1,12'
);
END;
/
ALTER SESSION SET nls_date_format='DD-MON-YYYY';
COLUMN card_no FORMAT 9999999999999999
SET linesize 300
SELECT *
FROM payment_details
ORDER BY id;
ID CUSTOMER_ID CARD_NO CARD_STRING EXPIRY_DATE SEC_CODE VALID_DATE
---------- ----------- ----------------- ------------------- ---------------- ---------- ----------------
1 4000 1111111111111234 ####-####-####-1234 06-7月 -2017 123
2 4001 1111111111112345 ####-####-####-2345 06-7月 -2017 234
3 4002 1111111111113456 ####-####-####-3456 06-7月 -2017 345
4 4003 1111111111114567 ####-####-####-4567 06-7月 -2017 456
5 4004 1111111111115678 ####-####-####-5678 06-7月 -2017 567
新たにcard_string列に定義を追加しています。
「 function_parameters => 'VVVVFVVVVFVVVVFVVVV,VVVV-VVVV-VVVV-VVVV,#,1,12'」→数字の部分の1文字目から12文字目を#に置き換えています。
BEGIN
DBMS_REDACT.alter_policy (
object_schema => 'test',
object_name => 'payment_details',
policy_name => 'redact_card_info',
action => DBMS_REDACT.add_column,
column_name => 'expiry_Date',
function_type => DBMS_REDACT.partial,
function_parameters => 'm1d1Y'
);
END;
/
ALTER SESSION SET nls_date_format='DD-MON-YYYY';
COLUMN card_no FORMAT 9999999999999999
SET linesize 300
SELECT *
FROM payment_details
ORDER BY id;
ID CUSTOMER_ID CARD_NO CARD_STRING EXPIRY_DATE SEC_CODE VALID_DATE
---------- ----------- ----------------- ------------------- ---------------- ---------- ----------------
1 4000 1111111111111234 ####-####-####-1234 01-1月 -2017 123
2 4001 1111111111112345 ####-####-####-2345 01-1月 -2017 234
3 4002 1111111111113456 ####-####-####-3456 01-1月 -2017 345
4 4003 1111111111114567 ####-####-####-4567 01-1月 -2017 456
5 4004 1111111111115678 ####-####-####-5678 01-1月 -2017 567
上記の例ではexpiry_dateに記載されている日付を同年の1月1日に置き換えています。
すでに定義した列の修正や、別の列に定義を追加することが可能です。
BEGIN
DBMS_REDACT.alter_policy (
object_schema => 'test',
object_name => 'payment_details',
policy_name => 'redact_card_info',
action => DBMS_REDACT.modify_column,
column_name => 'card_no',
function_type => DBMS_REDACT.partial,
function_parameters => '1,1,12'
);
END;
/
ALTER SESSION SET nls_date_format='DD-MON-YYYY';
COLUMN card_no FORMAT 9999999999999999
SET linesize 300
SELECT *
FROM payment_details
ORDER BY id;
ID CUSTOMER_ID CARD_NO CARD_STRING EXPIRY_DATE SEC_CODE VALID_DATE
---------- ----------- ----------------- ------------------- ---------------- ---------- ----------------
1 4000 1111111111111234 1234-1234-1234-1234 06-7月 -2017 123
2 4001 1111111111112345 2345-2345-2345-2345 06-7月 -2017 234
3 4002 1111111111113456 3456-3456-3456-3456 06-7月 -2017 345
4 4003 1111111111114567 4567-4567-4567-4567 06-7月 -2017 456
5 4004 1111111111115678 5678-5678-5678-5678 06-7月 -2017 567
既にポリシーが定義された列の定義を修正しています。
「function_parameters => '1,1,12'」→1文字目から12文字目を1という数字に置き換えます。
BEGIN
DBMS_REDACT.alter_policy (
object_schema => 'test',
object_name => 'payment_details',
policy_name => 'redact_card_info',
action => DBMS_REDACT.add_column,
column_name => 'card_string',
function_type => DBMS_REDACT.partial,
function_parameters => 'VVVVFVVVVFVVVVFVVVV,VVVV-VVVV-VVVV-VVVV,#,1,12'
);
END;
/
ALTER SESSION SET nls_date_format='DD-MON-YYYY';
COLUMN card_no FORMAT 9999999999999999
SET linesize 300
SELECT *
FROM payment_details
ORDER BY id;
ID CUSTOMER_ID CARD_NO CARD_STRING EXPIRY_DATE SEC_CODE VALID_DATE
---------- ----------- ----------------- ------------------- ---------------- ---------- ----------------
1 4000 1111111111111234 ####-####-####-1234 06-7月 -2017 123
2 4001 1111111111112345 ####-####-####-2345 06-7月 -2017 234
3 4002 1111111111113456 ####-####-####-3456 06-7月 -2017 345
4 4003 1111111111114567 ####-####-####-4567 06-7月 -2017 456
5 4004 1111111111115678 ####-####-####-5678 06-7月 -2017 567
新たにcard_string列に定義を追加しています。
「 function_parameters => 'VVVVFVVVVFVVVVFVVVV,VVVV-VVVV-VVVV-VVVV,#,1,12'」→数字の部分の1文字目から12文字目を#に置き換えています。
BEGIN
DBMS_REDACT.alter_policy (
object_schema => 'test',
object_name => 'payment_details',
policy_name => 'redact_card_info',
action => DBMS_REDACT.add_column,
column_name => 'expiry_Date',
function_type => DBMS_REDACT.partial,
function_parameters => 'm1d1Y'
);
END;
/
ALTER SESSION SET nls_date_format='DD-MON-YYYY';
COLUMN card_no FORMAT 9999999999999999
SET linesize 300
SELECT *
FROM payment_details
ORDER BY id;
ID CUSTOMER_ID CARD_NO CARD_STRING EXPIRY_DATE SEC_CODE VALID_DATE
---------- ----------- ----------------- ------------------- ---------------- ---------- ----------------
1 4000 1111111111111234 ####-####-####-1234 01-1月 -2017 123
2 4001 1111111111112345 ####-####-####-2345 01-1月 -2017 234
3 4002 1111111111113456 ####-####-####-3456 01-1月 -2017 345
4 4003 1111111111114567 ####-####-####-4567 01-1月 -2017 456
5 4004 1111111111115678 ####-####-####-5678 01-1月 -2017 567
上記の例ではexpiry_dateに記載されている日付を同年の1月1日に置き換えています。

コメント