溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

數(shù)據(jù)脫敏的處理方法及查詢

發(fā)布時間:2020-06-07 16:27:06 來源:網(wǎng)絡(luò) 閱讀:1290 作者:raqsoft 欄目:大數(shù)據(jù)

1)、數(shù)據(jù)脫敏是“指對某些敏感信息通過脫敏規(guī)則進行數(shù)據(jù)的變形,實現(xiàn)敏感隱私數(shù)據(jù)的可靠保護。在涉及客戶安全數(shù)據(jù)或者一些商業(yè)性敏感數(shù)據(jù)的情況下,在不違反系統(tǒng)規(guī)則條件下,對真實數(shù)據(jù)進行改造并提供測試使用,如×××號、手機號、卡號、客戶號等個人信息都需要進行數(shù)據(jù)脫敏。是數(shù)據(jù)庫安全技術(shù)之一?!?br/>
2)、本文介紹的脫敏數(shù)據(jù)報表查詢將利用潤乾集算器編寫 SPL 腳本,對敏感信息字段 (如: 姓名、證件號、銀行賬戶、住址、電話號碼、企業(yè)名稱、工商注冊號、納稅人識別號) 等通過預(yù)定義的脫敏規(guī)則進行數(shù)據(jù)脫敏、變形,實現(xiàn)敏感隱私數(shù)據(jù)的保護。

3)、潤乾集算器能使脫敏工作變得的簡單易行,同時可以減少大量重復(fù)性工作。通過集算器 SPL 腳本實現(xiàn)的脫敏數(shù)據(jù),可直接作為報表數(shù)據(jù)集進行查詢分析,也可以作為開發(fā)、測試和其它非生產(chǎn)環(huán)境或外包環(huán)境下的真實數(shù)據(jù)集使用。

1.1  數(shù)據(jù)脫敏介紹

根據(jù)百度詞條的解釋,數(shù)據(jù)脫敏是“指對某些敏感信息通過脫敏規(guī)則進行數(shù)據(jù)的變形,實現(xiàn)敏感隱私數(shù)據(jù)的可靠保護。在涉及客戶安全數(shù)據(jù)或者一些商業(yè)性敏感數(shù)據(jù)的情況下,在不違反系統(tǒng)規(guī)則條件下,對真實數(shù)據(jù)進行改造并提供測試使用,如×××號、手機號、卡號、客戶號等個人信息都需要進行數(shù)據(jù)脫敏。是數(shù)據(jù)庫安全技術(shù)之一,數(shù)據(jù)庫安全技術(shù)主要包括:數(shù)據(jù)庫漏掃、數(shù)據(jù)庫加密、數(shù)據(jù)庫防火墻、數(shù)據(jù)脫敏、數(shù)據(jù)庫安全審計系統(tǒng)?!?/p>

隨著信息時代的發(fā)展,我們對數(shù)據(jù)信息的安全要求越來越重視,比如對非生產(chǎn)環(huán)境下的敏感數(shù)據(jù)的脫敏保護。在金融、運營商、政府、能源等部門,非生產(chǎn)環(huán)境下數(shù)據(jù)脫敏已列入監(jiān)管部門的法規(guī)要求。非生產(chǎn)環(huán)境數(shù)據(jù)多用于開發(fā)、測試、培訓(xùn)以及第三方數(shù)據(jù)分析、挖掘,如果不能有效實施敏感數(shù)據(jù)保護,極易造成敏感數(shù)據(jù)的泄露。所以,保證非生產(chǎn)數(shù)據(jù)的安全已經(jīng)成為一個重要的課題,要求我們能夠通過對敏感信息進行脫敏、變形,實現(xiàn)有效的數(shù)據(jù)保護。

1.2  對數(shù)據(jù)脫敏工具的要求

數(shù)據(jù)脫敏工具應(yīng)該具有對多種異構(gòu)數(shù)據(jù)源的支持,從而將一個脫敏規(guī)則應(yīng)用于不同的數(shù)據(jù)源,比如針對“客戶名稱”字段的修改,脫敏規(guī)則基本一致,所以應(yīng)該可以在 Excel、TXT、Oracle、MS SQLServer、MySQL、Hadoop 等數(shù)據(jù)源上直接引用。另外,工具還應(yīng)支持將脫敏數(shù)據(jù)完全不落地分發(fā),提供文件到文件、文件到數(shù)據(jù)庫、數(shù)據(jù)庫到數(shù)據(jù)庫、數(shù)據(jù)庫到文件等方式,并且不需要在生產(chǎn)系統(tǒng)或本地安裝任何客戶端。

本文介紹的脫敏數(shù)據(jù)報表查詢將利用潤乾集算器編寫 SPL 腳本,對敏感信息字段 ( 如: 姓名、證件號、銀行賬戶、住址、電話號碼、企業(yè)名稱、工商注冊號、納稅人識別號) 等通過預(yù)定義的脫敏規(guī)則進行數(shù)據(jù)脫敏、變形,實現(xiàn)敏感隱私數(shù)據(jù)的保護。

潤乾集算器能使脫敏工作變得的簡單易行,同時可以減少大量重復(fù)性工作。通過集算器 SPL 腳本實現(xiàn)的脫敏數(shù)據(jù),可直接作為報表數(shù)據(jù)集進行查詢分析,也可以作為開發(fā)、測試和其它非生產(chǎn)環(huán)境或外包環(huán)境下的真實數(shù)據(jù)集使用。

1.3  脫敏數(shù)據(jù)的特征

數(shù)據(jù)脫敏不僅要執(zhí)行數(shù)據(jù)漂白,抹去數(shù)據(jù)中的敏感內(nèi)容,同時也需要保持原有的數(shù)據(jù)特征、業(yè)務(wù)規(guī)則和數(shù)據(jù)關(guān)聯(lián)性,保證開發(fā)、測試、培訓(xùn)以及大數(shù)據(jù)類業(yè)務(wù)不會受到脫敏的影響,達成脫敏前后的數(shù)據(jù)一致性和有效性:

保持原有數(shù)據(jù)特征

數(shù)據(jù)脫敏前后必須保證數(shù)據(jù)特征的保持,例如:×××號碼由十七位數(shù)字本體碼和一位校驗碼組成,分別為區(qū)域地址碼(6 位)、出生日期(8 位)、順序碼(3 位)和校驗碼(1 位)。那么×××號碼的脫敏規(guī)就需要保證脫敏后依舊保持這些特征信息。

保持數(shù)據(jù)之間的一致性

在不同業(yè)務(wù)中,數(shù)據(jù)和數(shù)據(jù)之間具有一定的關(guān)聯(lián)性。例如:出生年月或年齡和出生日期之間的關(guān)系。同樣,×××信息脫敏后仍需要保證出生年月字段和×××中包含的出生日期之間的一致性。

保持業(yè)務(wù)規(guī)則的關(guān)聯(lián)性

保持數(shù)據(jù)業(yè)務(wù)規(guī)則的關(guān)聯(lián)性是指數(shù)據(jù)脫敏時數(shù)據(jù)關(guān)聯(lián)性以及業(yè)務(wù)語義等保持不變,其中數(shù)據(jù)關(guān)聯(lián)性包括:主、外鍵關(guān)聯(lián)性、關(guān)聯(lián)字段的業(yè)務(wù)語義關(guān)聯(lián)性等。特別是高度敏感的賬戶類主體數(shù)據(jù)往往會貫穿主體的所有關(guān)系和行為信息,因此需要特別注意保證所有相關(guān)主體信息的一致性。

多次脫敏之間的數(shù)據(jù)一致性

相同的數(shù)據(jù)進行多次脫敏,或者在不同的測試系統(tǒng)進行脫敏,需要確保每次脫敏的數(shù)據(jù)始終保持一致性,只有這樣才能保障業(yè)務(wù)系統(tǒng)數(shù)據(jù)變更的持續(xù)一致性以及廣義業(yè)務(wù)的持續(xù)一致性。

1.4  數(shù)據(jù)脫敏應(yīng)用場景

一般常見的數(shù)據(jù)脫敏場景,是將生產(chǎn)數(shù)據(jù)或是生產(chǎn)數(shù)據(jù)文件按照脫敏規(guī)則,將數(shù)據(jù)不落地脫敏至測試數(shù)據(jù)庫或是測試數(shù)據(jù)文件中,具體如下所示:

數(shù)據(jù)脫敏的處理方法及查詢

使用集算器的 SPL 可以按照業(yè)務(wù)場景要求自行定義和編寫脫敏規(guī)則,比如針對上面的人員信息:姓名、×××號、地址、電話號碼、卡號等進行不落地脫敏,滿足數(shù)據(jù)脫敏需要。

集算器是一個無框架,可快速部署開發(fā)的數(shù)據(jù)計算中間件工具,能夠直接運行編寫好的 SPL 數(shù)據(jù)脫敏腳本即時進行數(shù)據(jù)脫敏,支持各種常見的數(shù)據(jù)脫敏的處理方式,包括數(shù)據(jù)替換、無效化、隨機化、偏移和取整、掩碼屏蔽、靈活編碼等,本文介紹的數(shù)據(jù)脫敏方法都可以在實際應(yīng)用中混合替換使用。

本文中應(yīng)用場景的數(shù)據(jù)脫敏都是基于下表數(shù)據(jù)內(nèi)容進行的,數(shù)據(jù)存儲在“數(shù)據(jù)脫敏驗證表.txt”文件中。

數(shù)據(jù)脫敏的處理方法及查詢

1.4.1 數(shù)據(jù)替換

數(shù)據(jù)脫敏要求:用設(shè)置的固定虛構(gòu)值替換真值。例如將手機號碼統(tǒng)一替換為 13800013800。

使用集算器 SPL 編碼實現(xiàn)的腳本,如下:


A

B

1

=file("數(shù)據(jù)脫敏驗證表.txt").import@t()

/導(dǎo)入文本數(shù)據(jù)

2

=A1.run(mobile=13800013800)

/電話號碼數(shù)據(jù)替換

A1:導(dǎo)入“數(shù)據(jù)脫敏驗證表”的文本數(shù)據(jù)。手機號碼脫敏前的顯示值如下:

數(shù)據(jù)脫敏的處理方法及查詢

A2:將手機號碼統(tǒng)一數(shù)據(jù)替換。直接使用run()函數(shù)對 mobile 手機號碼字段數(shù)據(jù)進行賦值替換為13800013800。數(shù)據(jù)替換后,手機號碼脫敏后的顯示值如下:

數(shù)據(jù)脫敏的處理方法及查詢

1.4.2 無效化

數(shù)據(jù)脫敏要求:通過對數(shù)據(jù)值得截斷、加密、隱藏等方式使敏感數(shù)據(jù)脫敏,使其不再具有利用價值,例如將地址以 ****** 代替真值。數(shù)據(jù)無效化與數(shù)據(jù)替換所達成的效果基本類似。

使用集算器 SPL 編碼實現(xiàn)的腳本,如下:


A

B

1

=file("數(shù)據(jù)脫敏驗證表.txt").import@t()

/導(dǎo)入文本數(shù)據(jù)

2

=A1.run(address="******")

/地址隱藏式無效化

3

=A1.run(address=left(address,3)+"******")

/地址截斷無效化

A1:導(dǎo)入“數(shù)據(jù)脫敏驗證表”的文本數(shù)據(jù)。地址脫敏前顯示值如下:

數(shù)據(jù)脫敏的處理方法及查詢

A2:將地址進行數(shù)據(jù)隱藏式的無效化脫敏。直接使用run()函數(shù)對 address 地址字段數(shù)據(jù)進行無效化的 ****** 處理。數(shù)據(jù)無效化后,地址脫敏后的顯示值如下:

數(shù)據(jù)脫敏的處理方法及查詢

A3:將地址進行數(shù)據(jù)截斷式的無效化脫敏。使用left()函數(shù)對 address 地址源字符串的左邊三位字串加上 ****** 的截斷無效化處理。截斷無效化的地址脫敏后顯示值如下:

數(shù)據(jù)脫敏的處理方法及查詢

1.4.3 隨機化

數(shù)據(jù)脫敏要求:采用隨機數(shù)據(jù)代替真值,保持替換值的隨機性以模擬樣本的真實性。例如用隨機生成的姓和名代替真值。

使用集算器 SPL 編碼實現(xiàn)的腳本,如下:


A

B

C

1

=file("姓氏.txt").import@it()

=file("名字.txt").import@it()

/引入外部姓名字典表,用于隨機生成姓名信息

2

=file("數(shù)據(jù)脫敏驗證表.txt").import@t()

/導(dǎo)入文本數(shù)據(jù)

3

=A2.run(name=A1(rand(A1.len())+1)+B1(rand(B1.len())+1))

/姓名隨機化

A1:導(dǎo)入外部姓名字典表,用于隨機化替換姓名真值。此處需特別注意一下,由于“姓氏”和“名字”文本數(shù)據(jù)都是單列數(shù)據(jù)表,在使用import()函數(shù)時需要增加 @i 選項,@i 表示文本數(shù)據(jù)只有1列時返回成序列,在單元格 A3 中可以直接位置獲取隨機值。

A2:導(dǎo)入“數(shù)據(jù)脫敏驗證表”的文本數(shù)據(jù)。姓名脫敏前顯示值如下:

數(shù)據(jù)脫敏的處理方法及查詢

A3:將姓名進行隨機化脫敏。直接使用run()函數(shù)對 name 姓名進行隨機化,使用rand()函數(shù)從“姓氏.txt”和“名字.txt”外部字典表隨機化組合生成姓名。隨機化后姓名的顯示值如下:

數(shù)據(jù)脫敏的處理方法及查詢

【注意】這個例子中我們針對數(shù)據(jù)脫敏引入了外部字典表,實際情況中可以根據(jù)數(shù)據(jù)脫敏要求,隨時引入任意外部字典表,通過數(shù)據(jù)的隨機化組合,實現(xiàn)替換真值數(shù)據(jù)的脫敏處理。

1.4.4 偏移和取整

數(shù)據(jù)脫敏要求:通過隨機移位改變數(shù)字數(shù)據(jù),例如日期 2018-01-02 8:12:25 變?yōu)?2018-01-02 8:00:00,偏移取整在保持了數(shù)據(jù)的安全性的同時保證了范圍的大致真實性,此項功能在大數(shù)據(jù)利用環(huán)境中具有重大價值。

使用集算器 SPL 編碼實現(xiàn)的腳本,如下:


A

B


1

=file("數(shù)據(jù)脫敏驗證表.txt").import@t()

/導(dǎo)入文本數(shù)據(jù)

2

=A1.run(operatetime=string(operatetime,"yyyy-MM-dd   HH:00:00"))

/日期的偏移和取整

A1:導(dǎo)入“數(shù)據(jù)脫敏驗證表”的文本數(shù)據(jù)。操作日期脫敏前顯示值如下:

數(shù)據(jù)脫敏的處理方法及查詢

A2:將操作日期進行時間的偏移和取整脫敏。使用使用string()函數(shù)按照偏移和取整規(guī)則格式化成“yyyy-MM-dd HH:00:00”格式,操作時間脫敏后的顯示值如下:

數(shù)據(jù)脫敏的處理方法及查詢

【注意】脫敏后的日期時間保持了原有的數(shù)據(jù)特征,方便脫敏數(shù)據(jù)的后續(xù)使用。

1.4.5 掩碼屏蔽

數(shù)據(jù)脫敏要求:掩碼屏蔽是針對賬戶類數(shù)據(jù)的部分信息進行脫敏時的有力工具,比如銀行卡號或是×××號的脫敏。

使用集算器 SPL 編碼實現(xiàn)的腳本,如下:


A

B


1

=file("數(shù)據(jù)脫敏驗證表.txt").import@t()

/導(dǎo)入文本數(shù)據(jù)

2

=A1.run(idnumber=left(string(idnumber),6)+"********"+

right(string(idnumber),4))

/×××號掩碼屏蔽

A1:導(dǎo)入“數(shù)據(jù)脫敏驗證表”的文本數(shù)據(jù)?!痢痢撂柮撁羟帮@示值如下:

數(shù)據(jù)脫敏的處理方法及查詢

A2:將×××號的出生日期進行掩碼屏蔽脫敏。使用left()函數(shù)截取×××號的左邊 6 位 + 字符串 ********+right()函數(shù)截取×××號右邊 4 位替換源×××字符串,×××號碼脫敏后的顯示值如下:

數(shù)據(jù)脫敏的處理方法及查詢

1.4.6 靈活編碼

數(shù)據(jù)脫敏要求:在需要特殊脫敏規(guī)則時,可執(zhí)行靈活編碼以滿足各種可能的脫敏規(guī)則。比如用固定字母和固定位數(shù)的數(shù)字替代合同編號真值。

使用集算器 SPL 編碼實現(xiàn)的腳本,如下:


A

B


1

=file("數(shù)據(jù)脫敏驗證表.txt").import@t()

/導(dǎo)入文本數(shù)據(jù)

2

=A1.run(contractno="RAQA"+string(year(now()))+

mid(string(contractno),9,4)+string(#,"#000000000"))

/合同編號靈活編碼

A1:導(dǎo)入“數(shù)據(jù)脫敏驗證表”的文本數(shù)據(jù)。合同編號脫敏前顯示值如下:

數(shù)據(jù)脫敏的處理方法及查詢

A2:將合同編號進行自定義編碼脫敏。自定義編碼規(guī)則:4 位固定碼 + 當(dāng)前年份 + 源目標(biāo)字符串 4 位號碼 +9 位數(shù)值組成,使用的函數(shù)已有介紹,不再贅述,合同編號脫敏后顯示值如下:

數(shù)據(jù)脫敏的處理方法及查詢

1.4.7 脫敏數(shù)據(jù)的分發(fā)

集算器 SPL 支持文件到文件、文件到數(shù)據(jù)庫、數(shù)據(jù)庫到數(shù)據(jù)庫、數(shù)據(jù)庫到文件的脫敏數(shù)據(jù)分發(fā)。下面分別進行具體說明:

1.4.7.1    文本分發(fā)到文本

使用集算器 SPL 編碼實現(xiàn)的文本分發(fā)到文本的腳本如下:


A

B

C

1

=file("姓氏.txt").import@it()

=file("名字.txt").import@it()

/引入外部姓名字典表,用于隨機組合生成姓名信息

2

=file("數(shù)據(jù)脫敏驗證表.txt").cursor@t()

/導(dǎo)入大數(shù)據(jù)量文本數(shù)據(jù)


3

=A2.run(contractno="RAQA"+string(year(now()))+mid(string(contractno),9,4)+string(#,"#000000000"),name=A1(rand(A1.len())+1)  +B1(rand(B1.len())+1),address=left(address,3)+"******",mobile=13800013800,idnumber=left(string(idnumber),6)+"********"+right(string(idnumber),4),operatetime=string(operatetime,"yyyy-MM-dd   HH:00:00"))

/按照脫敏規(guī)則進行數(shù)據(jù)表脫敏

4

>file("脫敏數(shù)據(jù)結(jié)果表.txt").export@at(A3)

/直接導(dǎo)出到文本文件


A1-B1:引入外部字典表“姓氏”和“名字”的文本數(shù)據(jù),用于隨機組合生成姓名信息。

A2:使用游標(biāo)導(dǎo)入大數(shù)據(jù)量的“數(shù)據(jù)脫敏驗證表”文本數(shù)據(jù)。

A3:按照脫敏規(guī)則進行數(shù)據(jù)表脫敏。

A4:直接將脫敏的數(shù)據(jù)導(dǎo)出到文本文件。使用export()函數(shù)導(dǎo)出脫敏數(shù)據(jù),其中,其中 @t 指定將第一行記錄作為字段名, 如果不使用 @t 選項就會以 _1,_2,…作為字段名,@a表示追加寫, 不使用 @a 表示覆蓋,分發(fā)到文本的脫敏結(jié)果如下:

數(shù)據(jù)脫敏的處理方法及查詢

【注意】集算器 SPL 的文件處理能力還支持導(dǎo)入、導(dǎo)出 xls、xlsx、csv 等多種類型文件。

1.4.7.2    文本分發(fā)到數(shù)據(jù)庫

使用集算器 SPL 編碼實現(xiàn)的文本分發(fā)到數(shù)據(jù)庫(以 MySQL 為例)的腳本如下:


A

B

C

1

=file("姓氏.txt").import@it()

=file("名字.txt").import@it()

/引入外部姓名字典表,用于隨機組合生成姓名信息

2

=file("數(shù)據(jù)脫敏驗證表.txt").cursor@t()

/導(dǎo)入大數(shù)據(jù)量文本數(shù)據(jù)

3

=A2.run(contractno="RAQA"+string(year(now()))+mid(string(contractno),9,4)+string(#,"#000000000"),name=A1(rand(A1.len())+1)  +B1(rand(B1.len())+1),address=left(address,3)+"******",mobile=13800013800,idnumber=left(string(idnumber),6)+"********"+right(string(idnumber),4),operatetime=string(operatetime,"yyyy-MM-dd   HH:00:00"))

/按照脫敏規(guī)則進行數(shù)據(jù)表脫敏

4

=connect("MySQL")

/連接 MySQL 數(shù)據(jù)源

5

>A4.update(A3,personinfo,code,contractno,name,address,

mobile,idnumber,operatetime;code)

/執(zhí)行 update 更新,直接導(dǎo)出到數(shù)據(jù)庫中

6

>A4.close()

/關(guān)閉數(shù)據(jù)庫連接

A1-A3:同上。

A4:連接 MySQL 數(shù)據(jù)源。使用connect()進行 MySQL 數(shù)據(jù)庫的連接。如果用鼠標(biāo)點擊 A4 單元格,可以直接查看 MySQL 數(shù)據(jù)庫的連接信息。具體查看數(shù)據(jù)庫配置教程相關(guān)章節(jié)文檔配置說明。

A5:更新 MySQL 數(shù)據(jù)庫中“personinfo”庫表的數(shù)據(jù)。使用update()將單元格 A3 的游標(biāo)數(shù)據(jù)更新到 MySQL 數(shù)據(jù)庫“personinfo”庫表中。使用數(shù)據(jù)庫工具查看結(jié)果如下

數(shù)據(jù)脫敏的處理方法及查詢

A6:使用close()函數(shù)關(guān)閉 A4 建立起的 MySQL 數(shù)據(jù)源連接。

1.4.7.3    數(shù)據(jù)庫分到數(shù)據(jù)庫

使用集算器 SPL 編碼實現(xiàn)的數(shù)據(jù)庫分發(fā)到數(shù)據(jù)庫的腳本如下(均以 MySQL 為例):


A

B


1

同上

/引入外部姓名字典表,用于隨機組合生成姓名信息

2

=connect("MySQL")

/連接 MySQL 數(shù)據(jù)源

3

=A2.cursor("select *   from personinfo_copy")

/游標(biāo)讀取 MySQL 中 personinfo_copy 表待脫敏數(shù)據(jù)

4

同上 A3 單元格

/按照脫敏規(guī)則進行數(shù)據(jù)表脫敏

5

>A2.update(A4,personinfo_copy_test,code,contractno,

name,address,mobile,idnumber,operatetime;code)  

/執(zhí)行 update 更新,直接將脫敏數(shù)據(jù)導(dǎo)出到數(shù)據(jù)庫的 personinfo_copy_test 表中

6

>A2.close()

/關(guān)閉數(shù)據(jù)庫連接

A1:同上。

A2:連接 MySQL 數(shù)據(jù)源。

A3:游標(biāo)讀取 MySQL 中表“personinfo_copy”的待脫敏數(shù)據(jù)。該表的數(shù)據(jù)如下:

數(shù)據(jù)脫敏的處理方法及查詢

A4:同上。

A5:更新 MySQL 數(shù)據(jù)庫中“personinfo_copy_test”庫表的數(shù)據(jù)。使用update()將單元格 A3 的游標(biāo)數(shù)據(jù)更新到 MySQL 數(shù)據(jù)庫的“personinfo_copy_test”庫表中。結(jié)果如下:

數(shù)據(jù)脫敏的處理方法及查詢

A6:使用close()函數(shù)關(guān)閉 A2 建立起的 MySQL 數(shù)據(jù)源連接。

1.4.7.4    數(shù)據(jù)庫分到文本

使用集算器 SPL 編碼實現(xiàn)的數(shù)據(jù)庫(以 MySQL 為例)分發(fā)到文本的腳本如下:


A

B


1

同上

/引入外部姓名字典表,用于隨機組合生成姓名信息

2

同上

/連接 MySQL 數(shù)據(jù)源

3

同上

/游標(biāo)讀取 MySQL 中 personinfo_copy 表待脫敏數(shù)據(jù)

4

同上 A4 單元格

/按照脫敏規(guī)則進行數(shù)據(jù)表脫敏

5

>file("脫敏數(shù)據(jù)結(jié)果表.txt").export@at(A4)

/直接導(dǎo)出到文本文件

6

>A2.close()

/關(guān)閉數(shù)據(jù)庫連接

A1-A4:同上。

A5:直接將脫敏的數(shù)據(jù)庫(MySQL)數(shù)據(jù)分發(fā)到文本文件。分發(fā)到文本的脫敏結(jié)果同上。

A6:使用close()函數(shù)關(guān)閉 A2 建立起的 MySQL 數(shù)據(jù)源連接。

1.5  脫敏數(shù)據(jù)報表查詢實例

下面我們就結(jié)合上面介紹的數(shù)據(jù)脫敏方法,具體實現(xiàn)一個可以動態(tài)配置是否脫敏數(shù)據(jù)的報表查詢實例,大致流程如下:數(shù)據(jù)脫敏的處理方法及查詢

1.5.1 集算器數(shù)據(jù)脫敏 SPL 腳本準(zhǔn)備

   利用上面已有的"數(shù)據(jù)脫敏驗證表.txt" 文本數(shù)據(jù),實現(xiàn)脫敏數(shù)據(jù)報表查詢,具體腳本如下:


A

B

C

D

1

=file("姓氏.txt").import@it()

=file("名字.txt").import@it()

/引入外部姓名字典表,用于隨機組合生成姓名信息

2

func

/調(diào)用配置文件中的數(shù)據(jù)脫敏規(guī)則進行數(shù)據(jù)脫敏


3


=file("數(shù)據(jù)脫敏規(guī)則配置.ini").property(A2(2))

4


if   type=="type2"

=eval(B3,"A1","A1","B1","B1")

/特殊規(guī)則的動態(tài)解析替換 "?" 值

5



=eval(B3,A2(1))

/通用規(guī)則的動態(tài)解析替換 "?" 值

6


return ${B3}



7

=file("數(shù)據(jù)脫敏驗證表.txt").cursor@t()



8

if type!=0

=



9


=A7.run(contractno=func(A2,[contractno,"type1"]),name=func(A2,[name,"type2"]),address=func(A2,[address,"type3"]),

mobile=func(A2,[mobile,"type4"]),idnumber=func(A2,[idnumber,"type5"]),operatetime=func(A2,[operatetime,"type6"]))

/按照脫敏規(guī)則進行數(shù)據(jù)表脫敏

10

return if(type!=0,B9,A7)

/說明:參數(shù) type 控制是否對數(shù)據(jù)進行脫敏 (0: 不脫敏)

A1-B1:引入外部字典表“姓氏”和“名字”的文本數(shù)據(jù),用于隨機組合生成姓名信息。

A2:定義一個子程序。使用func函數(shù)定義一個通用的數(shù)據(jù)脫敏規(guī)則處理子程序,該子程序主要是調(diào)用配置文件中的數(shù)據(jù)脫敏規(guī)則進行數(shù)據(jù)脫敏。不同數(shù)據(jù)字段可以根據(jù)自身特點和業(yè)務(wù)要求進行規(guī)則復(fù)用。關(guān)于子程序的內(nèi)容可以參考:集算器 -> 教程 -> 高級代碼 ->子程序文檔說明。

B3:讀取數(shù)據(jù)脫敏規(guī)則配置文件信息。使用property()函數(shù)從“數(shù)據(jù)脫敏規(guī)則配置.ini”屬性文件中讀取 type 屬性值。

B4-B5:使用動態(tài)解析并計算規(guī)則配置文件中的規(guī)則,實現(xiàn)對應(yīng)字段的數(shù)據(jù)脫敏處理。其中,子程序中使用eval()函數(shù)動態(tài)解析并計算表達式,實現(xiàn)動態(tài)解析并替換脫敏規(guī)則配置文件(*.ini)中的 "?" 值,增加一個 type 值判斷,將一般 type 中的 "?" 替換為調(diào)用 func 子程序主格的位置值,對引入外部數(shù)據(jù)字典表的 tpye2 規(guī)則,單獨判斷替換 "?" 值為外部字典所在單元格值,最終計算替換的表達式并執(zhí)行對應(yīng)字段的數(shù)據(jù)脫敏。

B6:使用宏動態(tài)計算表達式并返回運算結(jié)果,使用return函數(shù)將從屬性配置文件中讀取的 type 屬性值通過“${}”宏替換并返回運算結(jié)果給被 B9 單元格調(diào)用的程序中。

A7:游標(biāo)獲取未脫敏的源端生產(chǎn)數(shù)據(jù)。

A8:通過傳遞的網(wǎng)格參數(shù) type(type=0:不脫敏)值判斷是否對數(shù)據(jù)脫敏,如果脫敏,則執(zhí)行 B9 單元格的源端生產(chǎn)數(shù)據(jù)的脫敏處理。

B9:按照脫敏規(guī)則進行數(shù)據(jù)表脫敏,直接調(diào)用 A2 主格子程序 func 進行數(shù)據(jù)脫敏。

A10:根據(jù) type 值返回對應(yīng)的脫敏或未脫敏數(shù)據(jù)。

接下來,需要在集算器設(shè)計器的功能菜單“程序 -> 網(wǎng)格參數(shù)”中設(shè)置一個參數(shù)“type”,用于接收報表參數(shù)傳遞進行是否脫敏的數(shù)據(jù)權(quán)限控制。

數(shù)據(jù)脫敏的處理方法及查詢

至此,集算器的 SPL 腳本編寫和設(shè)置完成,下一步進行“數(shù)據(jù)脫敏規(guī)則配置.ini”文件的新建設(shè)置。

1.5.2 數(shù)據(jù)脫敏規(guī)則配置文件

文件“數(shù)據(jù)脫敏規(guī)則配置.ini”為集算器 SPL 腳本提供了對數(shù)據(jù)字段的脫敏規(guī)則配置,從而實現(xiàn)脫敏規(guī)則與腳本分離的設(shè)計,可以在不修改腳本的情況下自定義脫敏規(guī)則。當(dāng)然,這個配置文件也可以數(shù)存儲在數(shù)據(jù)庫中,提供全局的脫敏規(guī)則配置管理。該配置文件的內(nèi)容如下:

數(shù)據(jù)脫敏的處理方法及查詢

配置文件說明:#自定義配置脫敏規(guī)則,使用 eval() 函數(shù)實現(xiàn)動態(tài)解析替換解析 "?",通常 type 中的 "?" 是指固定調(diào)用 func 子程序的主格,這里 tpye2 規(guī)則特殊,需要單獨判斷替換 "?"。

【注意】這里僅是提供一種脫敏規(guī)則的配置思路,目的是可以最大限度的復(fù)用和靈活調(diào)用,相似的數(shù)據(jù)字段就不需要重復(fù)定義和編寫脫敏規(guī)則了。實際應(yīng)用中,程序員們可以根據(jù)需求自定義配置。

1.5.3 報表模板準(zhǔn)備

使用最新版本的潤乾報表 V2018 版本開發(fā)一張報表模板,并設(shè)置報表是否脫敏參數(shù)“type”(與集算器 SPL 腳本中的網(wǎng)格參數(shù)對應(yīng)使用)。

數(shù)據(jù)脫敏的處理方法及查詢

設(shè)置集算器 SPL 腳本為報表的數(shù)據(jù)集“ds1”,選中對應(yīng)的 dfx 腳本,并配置 type 參數(shù)表達式,具體如下:

數(shù)據(jù)脫敏的處理方法及查詢

開發(fā)的報表模板“報表數(shù)據(jù)脫敏.rpx”如下:

數(shù)據(jù)脫敏的處理方法及查詢

【注意】這里面調(diào)用的集算器數(shù)據(jù)集返回的是游標(biāo),需要在報表屬性 -> 常規(guī) 設(shè)置集算器數(shù)據(jù)集為大數(shù)據(jù)集,并且該功能需要報表產(chǎn)品包含集算器授權(quán)。

數(shù)據(jù)脫敏的處理方法及查詢

1.5.4 脫敏數(shù)據(jù)報表發(fā)布

直接在報表設(shè)計器中啟動 web 服務(wù),使用瀏覽器瀏覽報表,當(dāng)設(shè)置參數(shù) type 值為“0”不脫敏時,報表展示數(shù)據(jù)如下:

數(shù)據(jù)脫敏的處理方法及查詢

當(dāng)參數(shù) type 設(shè)置非“0”值時,報表展示數(shù)據(jù)如下:

數(shù)據(jù)脫敏的處理方法及查詢

1.5.5 脫敏數(shù)據(jù)報表查詢總結(jié)

這個脫敏數(shù)據(jù)報表查詢實例有以下四個特點:

1)直接對源數(shù)據(jù)脫敏后在報表 WEB 端進行數(shù)據(jù)查詢和展示。

沒有按常規(guī)數(shù)據(jù)脫敏的方式,先將脫敏數(shù)據(jù)進行分發(fā)入庫或入文件,而是直接將數(shù)據(jù)使用集算器 SPL 腳本進行脫敏,配合報表的大數(shù)據(jù)集異步數(shù)據(jù)加載實現(xiàn)了大數(shù)據(jù)的即時脫敏數(shù)據(jù)查詢展示。免去源數(shù)據(jù)脫敏 -> 目標(biāo)入庫 -> 數(shù)據(jù)展示的目標(biāo)入庫步驟。

2)免去新建數(shù)據(jù)脫敏庫步驟,減少脫敏工作量。

為了應(yīng)對一些老項目或特殊情況,比如脫敏的數(shù)據(jù)表都是明文顯示,但是不能分發(fā)或新建脫敏后的數(shù)據(jù)庫表,通過對明文數(shù)據(jù)直接抽取加密,免去新建脫密庫步驟,減少整體脫敏工作量。

3)自定義配置數(shù)據(jù)脫敏規(guī)則。

可以靈活配置規(guī)則文件,滿足不同的規(guī)則配置需求。

4)動態(tài)控制數(shù)據(jù)是否開啟脫敏權(quán)限。

可以根據(jù)平臺用戶查看數(shù)據(jù)的權(quán)限,動態(tài)的傳遞參數(shù)值控制是否對數(shù)據(jù)進行脫敏顯示,一方面防止數(shù)據(jù)的泄密,從底層保證數(shù)據(jù)安全,另一方面也為高權(quán)限客戶提供查看敏感數(shù)據(jù)的途徑。


向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI