openGauss動態資料脫敏功能介紹

資料脫敏背景及介紹

1.1資料庫脫敏背景

伴隨著網際網路大資料、雲服務等新興技術的飛速發展和普及,業務上雲、資料集中儲存、資料共享等資料應用方式已成為未來發展的趨勢,雲資料庫和雲計算服務具有易部署、低成本、高效率、高可靠的優勢,使得越來越多的消費者更傾向於將個人資料儲存在雲上而非個人行動硬碟中。實際上,由於資料使用場景愈加複雜,個人隱私資料洩露、被竊取的風險越來越高,僅近年來就發生數起重大資料庫資訊洩露事件,這對資料庫安全提出了更高的要求。

資料脫敏,顧名思義就是將敏感資料透過變形、遮蔽等方式處理,其目的是保護隱私資料資訊,防止資料洩露和惡意窺探。當企業或者機構收集使用者個人身份資料、手機、銀行卡號等敏感資訊,然後將資料透過匯出(非生產環境)或直接查詢(結合生產環境)的方式投入使用時,按照隱私保護相關法律法規需將資料進行“脫敏”處理。

1.2 資料脫敏介紹

資料脫敏主要分為靜態脫敏和動態脫敏,靜態資料脫敏(Static Data Masking)採用“先脫敏-後分發”的方式,一般是將生產環境資料複製到測試或開發庫中,匯出後的資料已經改變了原始資料的內容,使得脫敏後的資料成為了測試開發源資料。而動態資料脫敏(Dynamic Data Masking)是與生產環境緊密關聯的,訪問敏感資料時實時地進行脫敏,主要用於直接訪問生產資料的場景,在遮蔽敏感資訊的同時也保證了源資料的一致性和有效性。

openGauss動態資料脫敏功能介紹

圖1:靜態脫敏與動態脫敏

動態資料脫敏和靜態資料脫敏適用於不同的場景,兩者之間沒有優劣之分,主要是以使用場景來選擇合適的脫敏模式。openGauss最新版本已正式對外支援動態資料脫敏特性,下面的章節將圍繞openGauss動態資料脫敏機制進行闡述。

目前主流的動態資料脫敏技術路線分為“結果集解析”和“語句改寫”兩條路徑:

結果集解析:不改寫發給資料庫的語句,需要提前獲悉資料表結構,待資料庫返回結果後再根據表結構判斷集合內哪些資料需要脫敏,並逐條改寫結果資料。

語句改寫:將包含敏感欄位查詢的語句改寫,對於查詢中涉及的敏感欄位(表列)透過外層巢狀函式的方式改寫,使得資料庫執行查詢語句時返回不包含敏感資料的結果集。

從效能上來說,結果集解析方法需要在資料庫返回結果集後再逐行欄位解析、規則匹配、資料脫敏,需要逐個修改結果集中每一行資料,因此脫敏耗時與結果集容量線性相關,整體效能損耗較大;而語句改寫透過將較為簡短的查詢語句進行解析並重寫的方式,對語句中的敏感列外嵌了一層脫敏函式,資料庫執行命令時將自動執行脫敏函式實現資料脫敏,返回的結果集即為脫敏後的資料。該方式僅僅改寫一條查詢語句而不涉及結果集的解析,因此能夠極大地降低效能損耗,openGauss便是採用了語句改寫的方式,10萬條敏感資料脫敏的效能損耗低於5%。

另外,對於比較複雜的命令,查詢欄位一般包含大量同名欄位、表別名、巢狀查詢等,基於結果集解析首先需要將結果集與真實查詢列進行一一對應才可判斷出該欄位是否需要脫敏,查詢越複雜識別難度越高,匹配的準確率就越低,而基於語句的改寫可精確的對複雜查詢涉及的欄位巢狀脫敏函式。

綜上分析,基於語句改寫方法的資料脫敏無論對於效能還是準確性來說都是較為優秀的脫敏方案,openGauss基於語句改寫思想,在查詢解析獲取查詢樹後,根據使用者定義的脫敏策略識別查詢樹目標結點(Node),並對待脫敏結點進行改寫構造“脫敏查詢樹”,再交由資料庫核心執行最終返回脫敏後資料。

openGauss 動態資料脫敏解決方案

動態資料脫敏功能在工業界通常以中間外掛或資料脫敏系統(Data Masking System)的形態載入,透過在客戶端與服務端資料庫之間攔截命令或結果集來實現脫敏,而openGauss內建動態資料脫敏特性,使資料庫無需藉助外部外掛就可以實現資料脫敏,有效地降低資料中間傳輸而導致敏感資料洩漏的風險。

openGauss從1。1。0版本定義了一套完整的內建安全策略模型,基於該模型使用者可以定義資源標籤來標識敏感資料,針對不同的資源標籤類別和內容可定義相關的安全策略機制,而動態資料脫敏就是其中一種。

2.1 內建安全策略

內建安全策略(Security Policy)模型,是指透過配置一系列安全策略來對使用者行為進行識別和保護,提供了包括保護使用者敏感資料的能力。

資源標籤(Resource Label)是Security Policy的基礎,它的本質是一系列資料庫資源集合。為了能夠統一管理資料庫資源,資料管理者可以將多個數據庫資源新增到同一個資源標籤下,透過對資源標籤配置策略來實現批次地對資料庫資源進行管理的能力。

例如,多張資料表中均包含銀行卡號“creditcard”這種敏感資訊列,那麼可以將這些列統一地劃分到資源標籤“creditcard_label”中,隨後管理員便可以透過對“creditcard_label”配置脫敏策略以實現對所有相關敏感列的批次配置。

動態資料脫敏策略(Dynamic Data Masking)是Security Policy模型支援的一類安全策略,資料控制者對使用者表中的敏感資料識別後(敏感資料發現和識別不在該特性範圍內),對包含敏感列的資源標籤配置資料脫敏策略,並依據不同的應用場景來限制使用者對資料的訪問行為和資訊提取行為,以達到對敏感資訊保護的能力。

總的來說,資源標籤是用來歸類資料庫資源,並將這些資源統一地投入到各種安全策略中去管理。動態資料脫敏特性便是利用資源標籤去識別敏感資料,然後匹配脫敏策略,實現對敏感資料的遮蔽。

2.2 動態資料脫敏核心思路

openGauss中的動態資料脫敏是以內建安全外掛(security plugin)的方式與資料庫部署在一起的,業務方面無需額外適配就可使用,SQL的解析與脫敏策略匹配交由openGauss安全策略模組負責,業務在配置脫敏策略後即可生效。

2.2.1 配置脫敏策略

脫敏策略的配置主要包括三個方面——脫敏方式(Masking Function)、脫敏物件(Resource Label)、使用者過濾器(Masking Filter)。

脫敏方式,是指該脫敏策略使用何種方式對目標欄位進行脫敏,目前openGauss預置了7種脫敏方式:creditcardmasking、 basicemailmasking、fullemailmasking、alldigitsmasking、shufflemasking、randommasking、maskall。分別適用於不同的脫敏場景。

脫敏物件,是指脫敏策略生效時作用的物件集合(LABEL),若查詢目標欄位存在於LABEL中,則該欄位將會根據脫敏策略進行敏感資料脫敏,需要注意的是,openGauss動態資料脫敏特性支援對僅包含資料列的LABEL進行脫敏。

使用者過濾器,指出脫敏策略在何種使用者場景下生效,主要涉及USER(使用者名稱)、APP(使用者登入客戶端名稱)、IP(使用者所處的ip)。當查詢使用者同時滿足Masking Filter所指定的閾值時,資料脫敏策略才會生效。

以下案例演示了一個數據動態脫敏策略建立的基本過程。

1.資料準備

確認內建安全策略總開關是否開啟。

openGauss動態資料脫敏功能介紹

準備兩張包含敏感欄位(creditcard、customername)的表。

openGauss動態資料脫敏功能介紹

2.策略配置

策略管理員(擁有poladmin許可權)登入資料庫,將兩張資料表的敏感欄位分別新增到資源標籤“creditcard_label”、“customer_label”中去管理。

openGauss動態資料脫敏功能介紹

策略管理員建立兩個脫敏策略,其作用如下:

脫敏策略mask_card_pol:只有當用戶“user1”在‘10。11。12。13’ip上使用gsql訪問表時,標籤creditcard_label中的列將按照‘creditcardmasking’方式脫敏。

脫敏策略mask_name_pol:預設對於所有查詢使用者,標籤customer_label中的列將按照‘MASKALL’的方式脫敏。

openGauss動態資料脫敏功能介紹

2.2.2觸發脫敏策略

當系統接收到查詢命令時,security_plugin將在解析器中攔截語義分析生成的查詢樹(Query),首先根據使用者登入資訊(使用者名稱、客戶端、IP)篩選出滿足使用者場景的脫敏策略。由於脫敏策略是基於(僅包含表列的)資源標籤配置的,因此需要判斷查詢樹的目標節點是否屬於某個資源標籤,然後將識別到的資源標籤與脫敏策略相匹配,根據策略內容將查詢樹目標節點改寫,最終將查詢樹返還給解析器。

security_plugin模組由於內建查詢樹脫敏方式,資料訪問者不會感知內建安全策略重寫查詢樹的過程,如同執行普通查詢一樣去訪問資料,同時保護資料隱私。

openGauss動態資料脫敏功能介紹

圖2:openGauss動態資料脫敏架構

基於配置脫敏策略小節舉出的案例,我們可以透過查詢資料表來觸發脫敏策略。

觸發脫敏策略

使用者user1在滿足mask_card_pol策略的情況下使用gsql登入資料查詢敏感資料,系統將返回脫敏後的資料結果。而使用者user2不滿足該條策略,因此該使用者查詢的資料未做脫敏處理。

openGauss動態資料脫敏功能介紹

而無論對於user1還是user2使用者,他們查詢order表時都會觸發脫敏策略mask_name_pol,因此customername欄位將會被脫敏處理。

openGauss動態資料脫敏功能介紹

openGauss動態資料脫敏優勢

openGauss動態資料脫敏關注訪問使用者身份識別問題,使用者過濾器(Masking Filter)的配置細化到指定使用者、客戶端工具、登入IP,策略管理員可以靈活地根據不同業務、不同使用者場景來制定不同的脫敏策略,賦予他們不同級別的敏感資料訪問能力以適用於各種複雜的生產環境。例如金融、醫療行業中前臺服務人員只允許看到身份證、銀行卡號部分資訊,而運維管理員則可以查詢並維護所有使用者資訊。在保證脫敏場景多樣性的前提下,指定使用者過濾器時系統會進行嚴格的互斥校驗,避免同一使用者同時滿足多個使用者過濾器而出現策略選擇的二義性。

openGauss動態資料脫敏功能介紹

圖3:openGauss根據過濾條件脫敏

其次,openGauss動態資料脫敏更加註重資料庫資源的批次管理,在安全策略模型中,將需要管控的資料庫資源集中歸類劃分成標籤,對標籤的操作實際上就是對指定一簇資源的操作,極大的簡化管理流程,提高管理效率。在其他資料庫上的動態資料脫敏特性一般是基於單個列或單張表的,脫敏策略與資料庫資源是一一對應的,即使想要採用相同的脫敏方式,不同的資料庫資源也要配置多個對應的脫敏策略,這無疑是提高了策略配置成本,增加了後期運維、批次資源策略管理的難度。因此將需要批次管理的資料庫資源劃分到資源標籤中是openGauss動態資料脫敏的基礎,也是其優勢之一。

openGauss動態資料脫敏功能介紹

圖4:openGauss資源標籤批次配置策略

動態資料脫敏內建在openGauss核心中,能夠在一定程度上保證資料傳輸路徑上的安全性,而外部外掛存在繞過風險:當外部外掛將客戶端傳送的SQL或服務端返回的結果集改寫後,攻擊者依然可以繞過外掛直接向資料庫傳送SQL或擷取資料庫返回的源資料結果集,導致脫敏外掛失效。因此相較於外部外掛脫敏的方式,openGauss動態資料脫敏在一定程度上也能降低傳輸路徑上的敏感資料洩漏風險。

動態資料脫敏其目的是遮蔽結果集中的敏感資料,動態資料脫敏是與生產環境相結合,由業務方提供查詢介面,再由介面觸發資料脫敏,openGauss為了儘可能的保證敏感資料的安全性,在絕大多數場景包括帶有RETURNING的增刪改、Merge into、CTE、Subquery等場景也適配了脫敏策略,這樣能夠豐富業務方對敏感資料的操作介面而不單單隻能提供資料查詢介面。

openGauss為了提高易用性,提供了一套簡潔的策略配置語法,涵蓋了資源標籤以及脫敏策略的增刪改,使用者使用定義語法可以輕鬆地配置脫敏策略,簡化了管理員操作流程。

openGauss 動態資料脫敏的展望

openGauss動態資料脫敏特性提供了相對簡潔、靈活的策略配置方案,在一定程度上保使用者隱私資料不被洩漏,是openGauss多層級安全防禦架構中不可或缺的一環。

未來openGauss動態資料脫敏特性將開放更加靈活的策略配置手段包括UDF(User Defined Function)Masking以及條件脫敏(Conditional Masking)等,以期支援更加靈活、豐富的隱私保護場景。

更多內容請參考:

https://docs。opengauss。org/