DBMS_REDACT包支持對查詢返回的數據進行脫敏或屏蔽,DBMS_REDACT包提供了創建策略、更改策略、啟用策略、禁用策略和刪除策略的存儲過程,您可以使用這些存儲過程實現自定義的數據混淆。
下表列出了DBMS_REDACT包中可以使用的存儲過程。
存儲過程 | 返回類型 | 描述 |
ADD_POLICY(object_schema, object_name, policy_name, policy_description, column_name, column_description, function_type, function_parameters, expression, enable, regexp_pattern, regexp_replace_string, regexp_position, regexp_occurence, regexp_match_parameter, custom_function_expression) | N/A | 在表或視圖上增加數據脫敏策略。 |
ALTER_POLICY(object_schema, object_name, policy_name, action, column_name, function_type, function_parameters, expression, regexp_pattern, regexp_replace_string, regexp_position, regexp_occurence, regexp_match_parameter, policy_description, column_description, custom_function_expression) | N/A | 修改數據脫敏策略。 |
DISABLE_POLICY(object_schema, object_name, policy_name) | N/A | 禁用現有的數據脫敏策略。 |
ENABLE_POLICY(object_schema, object_name, policy_name) | N/A | 啟用數據脫敏策略。 |
DROP_POLICY(object_schema, object_name, policy_name) | N/A | 刪除數據脫敏策略。 |
UPDATE_FULL_REDACTION_VALUES(number_val, binfloat_val, bindouble_val, char_val, varchar_val, nchar_val, nvarchar_val, datecol_val, ts_val, tswtz_val, blob_val, clob_val, nclob_val) | N/A | 變更完全脫敏下不同類型的默認顯示值。 |
存儲過程
ADD_POLICY
ADD_POLICY為表創建新的數據脫敏策略。
ADD_POLICY (
<object_schema> IN VARCHAR2 DEFAULT NULL,
<object_name> IN VARCHAR2,
<policy_name> IN VARCHAR2,
<policy_description> IN VARCHAR2 DEFAULT NULL,
<column_name> IN VARCHAR2 DEFAULT NULL,
<column_description> IN VARCHAR2 DEFAULT NULL,
<function_type> IN INTEGER DEFAULT DBMS_REDACT.FULL,
<function_parameters> IN VARCHAR2 DEFAULT NULL,
<expression> IN VARCHAR2,
<enable> IN BOOLEAN DEFAULT TRUE,
<regexp_pattern> IN VARCHAR2 DEFAULT NULL,
<regexp_replace_string> IN VARCHAR2 DEFAULT NULL,
<regexp_position> INTEGER DEFAULT DBMS_REDACT.RE_BEGINNING,
<regexp_occurrence> INTEGER DEFAULT DBMS_REDACT.RE_ALL,
<regexp_match_parameter> IN VARCHAR2 DEFAULT NULL,
<custom_function_expression> IN VARCHAR2 DEFAULT NULL
)
參數
參數名稱 | 描述 |
object_schema | 指定對象所在的模式名稱,不指定則是current_user的默認schema。 |
object_name | 創建數據脫敏策略的表的名稱。 |
policy_name | 需要添加的策略的名稱。每個表上策略名稱不可重復。 |
policy_description | 指定脫敏策略的描述。 |
column_name | 脫敏策略適用的列的名稱。 說明 如果需要脫敏多個列,請使用alter_policy存儲過程添加其他列。 |
column_description | 需要脫敏的列的描述。 說明 目前column_description暫不支持,當您指定列的描述時,將收到一條警告消息。 |
function_type | 要使用的脫敏函數的類型。可能的值如下:
|
function_parameters | 指定分區脫敏的函數參數,僅適用于部分脫敏。 |
expression | 指定表的布爾表達式并確定如何應用策略。如果此策略表達式的計算結果為true ,則會使用脫敏策略。 |
enable | 用于控制策略的啟用或禁用。默認為TRUE,取值如下:
|
regexp_pattern | 指定用于脫敏數據的正則表達式模式。如果regexp_pattern不匹配,則返回NULL。 |
regexp_replace_string | 指定替換字符串值。 |
regexp_position | 指定搜索必須開始的字符位置。默認情況下,函數參數是RE_BEGINNING 。 |
regexp_occurrence | 指定子字符串的替換出現。
|
regexp_match_parameter | 更改函數的默認匹配行為。regexp_match_parameter常量可能的取值如下:
|
custom_function_expression | 僅適用于脫敏的CUSTOM類型。custom_function_expression是一個函數表達式,即具有參數的模式限定函數,例如, |
ALTER_POLICY
ALTER_POLICY將修改表的現有數據脫敏策略。
ALTER_POLICY (
<object_schema> IN VARCHAR2 DEFAULT NULL,
<object_name> IN VARCHAR2,
<policy_name> IN VARCHAR2,
<action> IN INTEGER DEFAULT DBMS_REDACT.ADD_COLUMN,
<column_name> IN VARCHAR2 DEFAULT NULL,
<function_type> IN INTEGER DEFAULT DBMS_REDACT.FULL,
<function_parameters> IN VARCHAR2 DEFAULT NULL,
<expression> IN VARCHAR2 DEFAULT NULL,
<regexp_pattern> IN VARCHAR2 DEFAULT NULL,
<regexp_replace_string> IN VARCHAR2 DEFAULT NULL,
<regexp_position> IN INTEGER DEFAULT DBMS_REDACT.RE_BEGINNING,
<regexp_occurrence> IN INTEGER DEFAULT DBMS_REDACT.RE_ALL,
<regexp_match_parameter> IN VARCHAR2 DEFAULT NULL,
<policy_description> IN VARCHAR2 DEFAULT NULL,
<column_description> IN VARCHAR2 DEFAULT NULL,
<custom_function_expression> IN VARCHAR2 DEFAULT NULL
)
參數
參數名稱 | 描述 |
object_schema | 指定對象所在的模式名稱,以及在該對象上的策略所在的模式名稱。不指定則是current_user的默認schema。 |
object_name | 需要更改數據脫敏策略的表的名稱。 |
policy_name | 需要更改的策略的名稱。 |
action | 需要執行的操作。 |
column_name | 脫敏策略適用的列的名稱。 |
function_type | 需要使用的脫敏函數的類型。可能的值如下:
|
function_parameters | 指定脫敏函數的函數參數。 |
expression | 指定表的布爾表達式并確定如何應用策略。如果此策略表達式的計算結果為TRUE,則會發生脫敏策略. |
regexp_pattern | 允許使用正則表達式來脫敏數據。如果regexp_pattern與數據不匹配,則 返回NULL。 |
regexp_replace_string | 指定替換字符串值。 |
regexp_position | 指定搜索必須開始的字符位置。默認情況下,函數參數是RE_BEGINNING。 |
regexp_occurence | 指定子字符串的替換出現。
|
regexp_match_parameter | 更改函數的默認匹配行為。regexp_match_parameter可能的常量如下:
|
policy_description | 指定脫敏策略的描述。 |
column_description | 需要脫敏的列的描述。 說明 目前column_description暫不支持,如果您指定列的描述,您將收到一條警告消息。 |
custom_function_expression | custom_function_expression僅適用于脫敏CUSTOM類型。custom_function_expression是一個函數表達式,即具有參數的模式限定函數,例如, |
DISABLE_POLICY
DISABLE_POLICY禁用現有的數據脫敏策略。
DISABLE_POLICY (
<object_schema> IN VARCHAR2 DEFAULT NULL,
<object_name> IN VARCHAR2,
<policy_name> IN VARCHAR2
)
參數
參數名稱 | 描述 |
object_schema | 指定對象所在的模式名稱,以及該對象上的策略所在的模式名稱。不指定則是current_user的默認schema。 |
object_name | 需要禁用數據脫敏策略的表的名稱。 |
policy_name | 需要禁用的策略的名稱。 |
ENABLE_POLICY
ENABLE_POLICY啟用先前禁用的數據脫敏策略。
ENABLE_POLICY (
<object_schema> IN VARCHAR2 DEFAULT NULL,
<object_name> IN VARCHAR2,
<policy_name> IN VARCHAR2
)
參數
參數名稱 | 描述 |
object_schema | 指定對象所在的模式名稱,以及該對象上的策略所在的模式名稱。不指定則是current_user的默認schema。 |
object_name | 需要對其啟用數據脫敏策略的表的名稱。 |
policy_name | 需要啟用的策略的名稱。 |
DROP_POLICY
DROP_POLICY通過從表中刪除屏蔽策略來刪除數據脫敏策略。
DROP_POLICY(
<object_schema> IN VARCHAR2 DEFAULT NULL,
<object_name> IN VARCHAR2,
<policy_name> IN VARCHAR2
)
參數
參數名稱 | 描述 |
object_schema | 指定對象所在的schema名稱,以及將應用數據脫敏策略的schema名稱。不指定則是current_user的默認schema。 |
object_name | 需要從表中刪除數據脫敏策略的表的名稱。 |
policy_name | 需要刪除的策略的名稱。 |
UPDATE_FULL_REDACTION_VALUES
UPDATE_FULL_REDACTION_VALUES更新數據脫敏策略的默認顯示值,并且可以通過redaction_values_for_type_full視圖查看這些默認值。
UPDATE_FULL_REDACTION_VALUES (
<number_val> IN NUMBER DEFAULT NULL,
<binfloat_val> IN FLOAT4 DEFAULT NULL,
<bindouble_val> IN FLOAT8 DEFAULT NULL,
<char_val> IN CHAR DEFAULT NULL,
<varchar_val> IN VARCHAR2 DEFAULT NULL,
<nchar_val> IN NCHAR DEFAULT NULL,
<nvarchar_val> IN NVARCHAR2 DEFAULT NULL,
<datecol_val> IN DATE DEFAULT NULL,
<ts_val> IN TIMESTAMP DEFAULT NULL,
<tswtz_val> IN TIMESTAMPTZ DEFAULT NULL,
<blob_val> IN BLOB DEFAULT NULL,
<clob_val> IN CLOB DEFAULT NULL,
<nclob_val> IN CLOB DEFAULT NULL
)
參數
參數名稱 | 描述 |
number_val | 更新NUMBER數據類型的默認值。 |
binfloat_val | 更新的值可以是FLOAT4數據類型的任意值。目前暫不支持二進制浮點數據類型。 |
bindouble_val | 更新的值可以是FLOAT8數據類型的任意值。目前暫不支持二進制雙精度數據類型。 |
char_val | 更新CHAR數據類型的默認值。 |
varchar_val | 更新VARCHAR2數據類型的默認值。 |
nchar_val | nchar_val映射到CHAR數據類型并返回CHAR值。 |
nvarchar_val | nvarchar_val映射到VARCHAR2數據類型并返回VARCHAR值。 |
datecol_val | 更新DATE數據類型的默認值。 |
ts_val | 更新TIMESTAMP數據類型的默認值。 |
tswtz_val | 更新TIMESTAMPTZ數據類型的默認值。 |
blob_val | 更新BLOB數據類型的默認值。 |
clob_val | 更新CLOB數據類型的默認值。 |
nclob_val | nclob_val映射到CLOB數據類型并返回CLOB值。 |
示例
ADD_POLICY
通過對表添加策略,使得其他用戶訪問該表時數據發生混淆。
準備測試數據,創建測試表格payment_details_tab與測試用戶redact_user。
---創建測試表格payment_details_tab CREATE TABLE payment_details_tab ( customer_id NUMBER NOT NULL, card_string VARCHAR2(19) NOT NULL); INSERT INTO payment_details_tab VALUES (4001,'2345-2345-2345-2345'); ---創建測試用戶redact_user并授權 CREATE USER redact_user PASSWORD '1234'; GRANT SELECT ON payment_details_tab TO redact_user;
執行如下語句,對測試表格payment_details_tab添加策略。
CALL DBMS_REDACT.add_policy( object_schema => 'public', object_name => 'payment_details_tab', policy_name => 'redactPolicy_001', policy_description => 'redactPolicy_001 for payment_details_tab table', column_name => 'customer_id', function_type => DBMS_REDACT.full, expression => '1=1', enable => TRUE );
執行如下語句,切換至測試用戶redact_user,并查詢表格。
---切換連接數據庫用戶 \c - redact_user ---執行如下查詢語句 SELECT customer_id from payment_details_tab order by 1;
查詢語句返回結果如下:
customer_id ------------- 0 (1 row)
ALTER_POLICY
通過變更policy的定義,對要顯示的字符串數據進行脫敏處理。
執行如下語句,變更測試表格payment_details_tab策略的定義。
CALL DBMS_REDACT.alter_policy( object_schema => 'public', object_name => 'payment_details_tab', policy_name => 'redactPolicy_001', action => DBMS_REDACT.ADD_COLUMN, column_name => 'card_string', function_type => DBMS_REDACT.partial, function_parameters => DBMS_REDACT.REDACT_CCN16_F12 );
執行如下語句,切換至測試用戶redact_user,并查詢表格。
---切換連接數據庫用戶 \c - redact_user ---執行如下查詢語句 SELECT * FROM payment_details_tab;
查詢語句返回結果如下:
customer_id | card_string -------------+--------------------- 0 | ****-****-****-2345 (1 row)
DISABLE_POLICY
通過關閉policy,使得其他用戶可以查看正常的表數據。
執行如下語句,關閉測試表格payment_details_tab上的策略。
CALL DBMS_REDACT.disable_policy( object_schema => 'public', object_name => 'payment_details_tab', policy_name => 'redactPolicy_001' );
執行如下語句,切換至測試用戶redact_user,并查詢表格。
---切換連接數據庫用戶 \c - redact_user ---執行如下查詢語句 SELECT * FROM payment_details_tab;
查詢語句返回結果如下:
customer_id | card_string -------------+--------------------- 4001 | 2345-2345-2345-2345 (1 row)
ENABLE_POLICY
通過重新啟用policy,使得policy對其他用戶生效。
執行如下語句,重新啟用測試表格payment_details_tab上的策略。
CALL DBMS_REDACT.enable_policy( object_schema => 'public', object_name => 'payment_details_tab', policy_name => 'redactPolicy_001' );
執行如下語句,切換至測試用戶redact_user,并查詢表格。
---切換連接數據庫用戶 \c - redact_user ---執行如下查詢語句 SELECT * FROM payment_details_tab;
查詢語句返回結果如下:
customer_id | card_string -------------+--------------------- 0 | ****-****-****-2345 (1 row)
DROP_POLICY
通過DROP_POLICY,移除表上的脫敏策略。
執行如下語句,刪除測試表格payment_details_tab上的策略。
CALL DBMS_REDACT.drop_policy( object_schema => 'public', object_name => 'payment_details_tab', policy_name => 'redactPolicy_001' );
執行如下語句,切換至測試用戶redact_user,并查詢表格。
---切換連接數據庫用戶 \c - redact_user ---執行如下查詢語句 SELECT * FROM payment_details_tab;
查詢語句返回結果如下:
customer_id | card_string -------------+--------------------- 4001 | 2345-2345-2345-2345 (1 row)
UPDATE_FULL_REDACTION_VALUES
通過變更某一類型的脫敏值,來替換將要混淆的數據。例如,將混淆數據由0變為9999999。
以下操作需要使用超級用戶執行,如您有相應場景,請聯系我們處理。
執行如下語句,變更測試表格payment_details_tab上的脫敏值,用于替換將要混淆的數據。
CALL DBMS_REDACT.update_full_redaction_values ( number_val => 9999999, char_val => 'Z', varchar_val => 'V', datecol_val => to_date('17/10/2023', 'DD/MM/YYYY'), ts_val => to_timestamp('17/10/2023 11:12:13', 'DD/MM/YYYY HH24:MI:SS'), tswtz_val => NULL, blob_val => 'NEW REDACTED VALUE', clob_val => 'NEW REDACTED VALUE' );
執行如下語句,切換至測試用戶redact_user,并查詢表格。
---切換連接數據庫用戶 \c - redact_user ---執行如下查詢語句 SELECT * FROM payment_details_tab;
查詢語句返回結果如下:
customer_id | card_string -------------+--------------------- 9999999 | 2345-2345-2345-2345 (1 row)