CREATE TABLE kart_bilgileri (
id NUMBER NOT NULL,
musteri_id NUMBER NOT NULL,
kart_no NUMBER NOT NULL,
kart_string VARCHAR2(19) NOT NULL,
bitis_tarihi DATE NOT NULL,
guvenlik_no NUMBER NOT NULL,
gecerlilik_tarihi DATE
);
INSERT INTO kart_bilgileri VALUES (1, 1000, 2013201320132013, '2013-2013-2013-2013', TRUNC(ADD_MONTHS(SYSDATE,12)), 123, NULL);
INSERT INTO kart_bilgileri VALUES (2, 1001, 1989198919891989, '1989-1989-1989-1989', TRUNC(ADD_MONTHS(SYSDATE,12)), 234, NULL);
INSERT INTO kart_bilgileri VALUES (3, 1002, 2018201820182018, '2018-2018-2018-2018', TRUNC(ADD_MONTHS(SYSDATE,12)), 345, NULL);
INSERT INTO kart_bilgileri VALUES (4, 1003, 1453145314531453, '1453-1453-1453-1453', TRUNC(ADD_MONTHS(SYSDATE,12)), 456, NULL);
INSERT INTO kart_bilgileri VALUES (5, 1004, 5710571057105710, '5710-5710-5710-5710', TRUNC(ADD_MONTHS(SYSDATE,12)), 567, NULL);
COMMIT;
--expression:用來做權限控制,套用policy給誰,
--1=1即除了sys、system等系統帳號外,全部套用,
--可以透過'SYS_CONTEXT(''SYS_SESSION_ROLES'',''MASK_ROLE'') = ''TRUE'''
BEGIN
DBMS_REDACT.add_policy(
object_schema => 'SP101369',
object_name => 'kart_bilgileri',
column_name => 'kart_no',
policy_name => 'redact_kart_info',
function_type => DBMS_REDACT.full,
expression => '1=1'
);
END;
/
select * from kart_bilgileri;
#Sample 1:
--部分遮罩
--遮罩參數,不同data type參數不同,字串:5個,數字:3個,日期:使用日期專用子函數
--字串的輸入參數說明:
--ex: ' VVVVFVVVVFVVVV,VVVV-VVVV-VVVV,*,3,10 '
-- 前兩個參數:
-- V:代表輸入字符串中可以編輯的每個字符。
-- F:代表輸入字符串中可以被視為分隔符的每個字符。
-- *:遮罩字符
-- 3:指定密文V字符的起始位置。
-- 10:指定密文 V 字符的結束位置。
BEGIN
DBMS_REDACT.alter_policy (
object_schema => 'SP101369',
object_name => 'kart_bilgileri',
policy_name => 'redact_kart_info',
action => DBMS_REDACT.modify_column,
column_name => 'kart_no',
function_type => DBMS_REDACT.partial,
function_parameters => '1,1,12'
);
END;
/
#Sample 2:
BEGIN
DBMS_REDACT.alter_policy (
object_schema => 'SP101369',
object_name => 'kart_bilgileri',
policy_name => 'redact_kart_info',
action => DBMS_REDACT.modify_column,
column_name => 'kart_no',
function_type => DBMS_REDACT.RANDOM
);
END;
/
#跟Redaction 有關的系統視圖
REDACTION_COLUMNS:
描述數據庫中的所有編輯列,提供列所在的表或視圖的所有者、
對象名稱、列名稱、編輯函數的類型、編輯函數的參數(如果有),以及編輯政策的描述。
如果已創建策略表達式,則顯示默認的對象範圍策略表達式的 SQL 表達式。
REDACTION_EXPRESSIONS:
顯示現有策略表達式的名稱及其 SQL 表達式
REDACTION_POLICIES:
描述數據庫中的所有數據編輯策略。
它包括有關對象所有者、對象名稱、策略名稱、策略表達式、
策略是否啟用以及數據編輯策略的描述的信息。
REDACTION_VALUES_FOR_TYPE_FULL:
顯示使用完全密文的數據密文策略的當前密文值。
要注意的是,當啟用REDACTION動態遮罩功能後,所有的Create Table As SELECT (CTAS)的功能將會被禁止,
只有sys 帳號才能使用。