openGauss 動態資料脫敏機制

奔跑的数据库發表於2024-03-30

動態資料脫敏機制

可獲得性

本特性自openGauss 1.1.0版本開始引入。

特性簡介

資料脫敏是行之有效的資料庫隱私保護方案之一,可以在一定程度上限制非授權使用者對隱私資料的窺探。動態資料脫敏機制是一種透過定製化制定脫敏策略從而實現對隱私資料保護的一種技術,可以有效地在保留原始資料的前提下解決非授權使用者對敏感資訊的訪問問題。當管理員指定待脫敏物件和定製資料脫敏策略後,使用者所查詢的資料庫資源如果關聯到對應的脫敏策略時,則會根據使用者身份和脫敏策略進行資料脫敏,從而限制非授權使用者對隱私資料的訪問。

客戶價值

資料隱私保護是資料庫安全所需要具備的安全能力之一,可以在一定程度上限制非授權使用者對隱私資料的訪問,保證隱私資料安全。動態資料脫敏機制可以透過配置脫敏策略實現對指定資料庫資源資訊的隱私保護,另一方面,脫敏策略的配置也具有一定的靈活性,可以僅針對特定使用者場景實現有針對性的隱私保護能力。

特性描述

動態資料脫敏機制基於資源標籤進行脫敏策略的定製化,可根據實際場景選擇特定的脫敏方式,也可以針對某些特定使用者制定脫敏策略。一個完整的脫敏策略建立的SQL語法如下所示:

CREATE RESOURCE LABEL label_for_creditcard ADD COLUMN(user1.table1.creditcard);
CREATE RESOURCE LABEL label_for_name ADD COLUMN(user1.table1.name);
CREATE MASKING POLICY msk_creditcard creditcardmasking ON LABEL(label_for_creditcard);
CREATE MASKING POLICY msk_name randommasking ON LABEL(label_for_name) FILTER ON IP(local), ROLES(dev);

其中,label_for_creditcard和msk_name為本輪計劃脫敏的資源標籤,分別包含了兩個列物件;creditcardmasking、randommasking為預置的脫敏函式;msk_creditcard定義了所有使用者對label_for_creditcard標籤所包含的資源訪問時做creditcardmasking的脫敏策略,不區分訪問源;msk_name定義了本地使用者dev對label_for_name標籤所包含的資源訪問時做randommasking的脫敏策略;當不指定FILTER物件時則表示對所有使用者生效,否則僅對標識場景的使用者生效。

當前,預置的脫敏函式包括:

脫敏函式名

示例

creditcardmasking

'4880-9898-4545-2525' 將會被脫敏為 'xxxx-xxxx-xxxx-2525',該函式僅對後4位之前的數字進行脫敏

basicemailmasking

'abcd@gmail.com' 將會被脫敏為'xxxx@gmail.com', 對出現第一個'@'之前的文字進行脫敏

fullemailmasking

'abcd@gmail.com' 將會被脫敏為 'xxxx@xxxxx.com',對出現最後一個'.'之前的文字(除'@'符外)進行脫敏

alldigitsmasking

'alex123alex' 將會被脫敏為 'alex000alex', 僅對文字中的數字進行脫敏

shufflemasking

'hello word' 將會被隨機打亂順序脫敏為 'hlwoeor dl', 該函式透過字元亂序排列的方式實現,屬於弱脫敏函式,語義較強的字串不建議使用該函式脫敏。

randommasking

'hello word' 將會被脫敏為 'ad5f5ghdf5',將文字按字元隨機脫敏

regexpmasking

需要使用者順序輸入四個引數,reg為被替換的字串,replace_text為替換後的字串,pos為目標字串開始替換的初始位置,為整數型別,reg_len為替換長度,為整數型別。reg、replace_text可以用正則表達,pos如果不指定則預設為0,reg_len如果不指定則預設為-1,即pos後所有字串。如果使用者輸入引數與引數型別不一致,則會使用maskall方式脫敏。

CREATE MASKING POLICY msk_creditcard regexpmasking('[\d+]', 'x', 5, 9 )  ON LABEL(label_for_creditcard);

'4880-9898-4545-2525' 將會被脫敏為 '4880-xxxx-xxxx-2525'

maskall

'4880-9898-4545-2525' 將會被脫敏為 'xxxxxxxxxxxxxxxxxxx'

每個脫敏函式規格如下:

脫敏函式名

支援的資料型別

creditcardmasking

BPCHAR, VARCHAR, NVARCHAR, TEXT(注:僅針對信用卡格式的文字類資料)

basicemailmasking

BPCHAR, VARCHAR, NVARCHAR, TEXT(注:僅針對email格式的文字型別資料)

fullemailmasking

BPCHAR, VARCHAR, NVARCHAR, TEXT(注:僅針對email格式的文字型別資料)

alldigitsmasking

BPCHAR, VARCHAR, NVARCHAR, TEXT(注:僅針對包含數字的文字型別資料)

shufflemasking

BPCHAR, VARCHAR, NVARCHAR, TEXT(注:僅針對文字型別資料)

randommasking

BPCHAR, VARCHAR, NVARCHAR, TEXT(注:僅針對文字型別資料)

maskall

BOOL, RELTIME, TIME, TIMETZ, INTERVAL, TIMESTAMP, TIMESTAMPTZ, SMALLDATETIME, ABSTIME,

TEXT, BPCHAR, VARCHAR, NVARCHAR2, NAME, INT8, INT4, INT2, INT1, NUMRIC, FLOAT4, FLOAT8, CASH

對於不支援的資料型別,預設使用maskall函式進行資料脫敏,若資料型別不屬於maskall支援的資料型別則全部使用數字0進行脫敏,如果脫敏列涉及隱式轉換,則結果以隱式轉換後的資料型別為基礎進行脫敏。另外需要說明的是,如果脫敏策略應用到資料列並生效,此時對該列資料的操作將以脫敏後的結果為基礎而進行。

動態資料脫敏適用於和實際業務緊密相關的場景,根據業務需要為使用者提供合理的脫敏查詢介面,以避免透過撞庫而獲取原始資料。

特性增強

無。

特性約束

  • 動態資料脫敏策略需要由具備POLADMIN或SYSADMIN屬性的使用者或初始使用者建立,普通使用者沒有訪問安全策略系統表和系統檢視的許可權。

  • 動態資料脫敏只在配置了脫敏策略的資料表上生效,而審計日誌不在脫敏策略的生效範圍內。

  • 在一個脫敏策略中,對於同一個資源標籤僅可指定一種脫敏方式,不可重複指定。

  • 不允許多個脫敏策略對同一個資源標籤進行脫敏,除以下脫敏場景外:使用FILTER指定策略生效的使用者場景,包含相同資源標籤的脫敏策略間FILTER生效場景無交集,此時可以根據使用者場景明確辨別資源標籤被哪種策略脫敏。

  • Filter中的APP項建議僅在同一信任域內使用,由於客戶端不可避免的可能出現偽造名稱的情況,該選項使用時需要與客戶端聯合形成一套安全機制,減少誤用風險。一般情況下不建議使用,使用時需要注意客戶端仿冒的風險。

  • 對於帶有query子句的INSERT或MERGE INTO操作,如果源表中包含脫敏列,則上述兩種操作中插入或更新的結果為脫敏後的值,且不可還原。

  • 在內建安全策略開關開啟的情況下,執行ALTER TABLE EXCHANGE PARTITION操作的源表若在脫敏列則執行失敗。

  • 對於設定了動態資料脫敏策略的表,需要謹慎授予其他使用者對該表的trigger許可權,以免其他使用者利用觸發器繞過脫敏策略。

  • 最多支援建立98個動態資料脫敏策略。

  • 僅支援使用上述七種預置脫敏策略。

  • 僅支援對只包含COLUMN屬性的資源標籤做脫敏。

  • 僅支援對基本表的列進行資料脫敏。

  • 僅支援對SELECT查詢到的資料進行脫敏。

  • FILTER中的IP地址以ipv4為例支援如下格式。

    ip地址格式

    示例

    單ip

    127.0.0.1

    掩碼錶示ip

    127.0.0.1|255.255.255.0

    cidr表示ip

    127.0.0.1/24

    ip區間

    127.0.0.1-127.0.0.5

依賴關係

無。

相關文章