數據脫敏背景及介紹git
1.1數據庫脫敏背景github
伴隨着互聯網大數據、雲服務等新興技術的飛速發展和普及,業務上雲、數據集中存儲、數據共享等數據應用方式已成爲將來發展的趨勢,雲數據庫和雲計算服務具備易部署、低成本、高效率、高可靠的優點,使得愈來愈多的消費者更傾向於將我的數據存儲在雲上而非我的移動硬盤中。實際上,因爲數據使用場景越發複雜,我的隱私數據泄露、被竊取的風險愈來愈高,僅近年來就發生數起重大數據庫信息泄露事件,這對數據庫安全提出了更高的要求。sql
數據脫敏,顧名思義就是將敏感數據經過變形、屏蔽等方式處理,其目的是保護隱私數據信息,防止數據泄露和惡意窺探。當企業或者機構收集用戶我的身份數據、手機、銀行卡號等敏感信息,而後將數據經過導出(非生產環境)或直接查詢(結合生產環境)的方式投入使用時,按照隱私保護相關法律法規需將數據進行「脫敏」處理。數據庫
1.2 數據脫敏介紹安全
數據脫敏主要分爲靜態脫敏和動態脫敏,靜態數據脫敏(Static Data Masking)採用「先脫敏-後分發」的方式,通常是將生產環境數據拷貝到測試或開發庫中,導出後的數據已經改變了原始數據的內容,使得脫敏後的數據成爲了測試開發源數據。而動態數據脫敏(Dynamic Data Masking)是與生產環境緊密關聯的,訪問敏感數據時實時地進行脫敏,主要用於直接訪問生產數據的場景,在屏蔽敏感信息的同時也保證了源數據的一致性和有效性。微信
圖1:靜態脫敏與動態脫敏架構
動態數據脫敏和靜態數據脫敏適用於不一樣的場景,二者之間沒有優劣之分,主要是以使用場景來選擇合適的脫敏模式。openGauss最新版本已正式對外支持動態數據脫敏特性,下面的章節將圍繞openGauss動態數據脫敏機制進行闡述。運維
目前主流的動態數據脫敏技術路線分爲「結果集解析」和「語句改寫」兩條路徑:dom
結果集解析:不改寫發給數據庫的語句,須要提早獲悉數據表結構,待數據庫返回結果後再根據表結構判斷集合內哪些數據須要脫敏,並逐條改寫結果數據。svg
語句改寫:將包含敏感字段查詢的語句改寫,對於查詢中涉及的敏感字段(表列)經過外層嵌套函數的方式改寫,使得數據庫運行查詢語句時返回不包含敏感數據的結果集。
從性能上來講,結果集解析方法須要在數據庫返回結果集後再逐行字段解析、規則匹配、數據脫敏,須要逐個修改結果集中每一行數據,所以脫敏耗時與結果集容量線性相關,總體性能損耗較大;而語句改寫經過將較爲簡短的查詢語句進行解析並重寫的方式,對語句中的敏感列外嵌了一層脫敏函數,數據庫執行命令時將自動執行脫敏函數實現數據脫敏,返回的結果集即爲脫敏後的數據。該方式僅僅改寫一條查詢語句而不涉及結果集的解析,所以可以極大地下降性能損耗,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.數據準備
確認內置安全策略總開關是否開啓。
準備兩張包含敏感字段(creditcard、customername)的表。
2.策略配置
策略管理員(擁有poladmin權限)登陸數據庫,將兩張數據表的敏感字段分別添加到資源標籤「creditcard_label」、「customer_label」中去管理。
策略管理員建立兩個脫敏策略,其做用以下:
脫敏策略mask_card_pol:只有當用戶「user1」在‘10.11.12.13’ip上使用gsql訪問表時,標籤creditcard_label中的列將按照‘creditcardmasking’方式脫敏。
脫敏策略mask_name_pol:默認對於全部查詢用戶,標籤customer_label中的列將按照‘MASKALL’的方式脫敏。
2.2.2觸發脫敏策略
當系統接收到查詢命令時,security_plugin將在解析器中攔截語義分析生成的查詢樹(Query),首先根據用戶登陸信息(用戶名、客戶端、IP)篩選出知足用戶場景的脫敏策略。因爲脫敏策略是基於(僅包含表列的)資源標籤配置的,所以須要判斷查詢樹的目標節點是否屬於某個資源標籤,而後將識別到的資源標籤與脫敏策略相匹配,根據策略內容將查詢樹目標節點改寫,最終將查詢樹返還給解析器。
security_plugin模塊因爲內置查詢樹脫敏方式,數據訪問者不會感知內置安全策略重寫查詢樹的過程,如同執行普通查詢同樣去訪問數據,同時保護數據隱私。
圖2:openGauss動態數據脫敏架構
基於配置脫敏策略小節舉出的案例,咱們能夠經過查詢數據表來觸發脫敏策略。
觸發脫敏策略
用戶user1在知足mask_card_pol策略的狀況下使用gsql登陸數據查詢敏感數據,系統將返回脫敏後的數據結果。而用戶user2不知足該條策略,所以該用戶查詢的數據未作脫敏處理。
而不管對於user1仍是user2用戶,他們查詢order表時都會觸發脫敏策略mask_name_pol,所以customername字段將會被脫敏處理。
openGauss動態數據脫敏優點
openGauss動態數據脫敏關注訪問用戶身份識別問題,用戶過濾器(Masking Filter)的配置細化到指定用戶、客戶端工具、登陸IP,策略管理員能夠靈活地根據不一樣業務、不一樣用戶場景來制定不一樣的脫敏策略,賦予他們不一樣級別的敏感數據訪問能力以適用於各類複雜的生產環境。例如金融、醫療行業中前臺服務人員只容許看到身份證、銀行卡號部分信息,而運維管理員則能夠查詢並維護全部用戶信息。在保證脫敏場景多樣性的前提下,指定用戶過濾器時系統會進行嚴格的互斥校驗,避免同一用戶同時知足多個用戶過濾器而出現策略選擇的二義性。
圖3: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)等,以期支持更加靈活、豐富的隱私保護場景。
歡迎訪問openGauss官方網站
openGauss開源社區官方網站:
https://opengauss.org
openGauss組織倉庫:
https://gitee.com/opengauss
openGauss鏡像倉庫:
https://github.com/opengauss-mirror
掃碼關注咱們
微信公衆號|openGauss
微信社羣小助手|openGauss-bot
本文分享自微信公衆號 - openGauss(openGauss)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。