王媛媛 陳昱翰
(中國電信股份有限公司上海企業(yè)信息化運營中心 上海市 200120)
數(shù)據(jù)保護(hù)是當(dāng)今企業(yè)、政府和個人關(guān)心的基本問題。數(shù)據(jù)庫安全中的敏感數(shù)據(jù)梳理技術(shù)是一種數(shù)據(jù)資產(chǎn)自動發(fā)現(xiàn)及對數(shù)據(jù)進(jìn)行分級分類的敏感數(shù)據(jù)梳理技術(shù)?!吨腥A人民共和國數(shù)據(jù)安全法(草案)》(以下簡稱《數(shù)據(jù)安全法(草案)》)中首次對數(shù)據(jù)的分級分類保護(hù)作出明確要求,這對于指導(dǎo)和落實數(shù)據(jù)安全保護(hù)工作具有重要意義,數(shù)據(jù)的分級分類管理是實施數(shù)據(jù)全生命周期安全保護(hù)的重要基礎(chǔ),只有在科學(xué)、規(guī)范的分級分類管理基礎(chǔ)上,才能夠有效地平衡數(shù)據(jù)的安全要求與使用需求,才能夠較好地實現(xiàn)數(shù)據(jù)的風(fēng)險管理成本與利用效益的平衡,從而為數(shù)據(jù)產(chǎn)業(yè)的快速健康、可持續(xù)發(fā)展奠定堅實基礎(chǔ).數(shù)據(jù)分級分類不僅需要遵循相關(guān)規(guī)范和標(biāo)準(zhǔn),還要結(jié)合業(yè)務(wù)特征和需求,采取科學(xué)的分級分類方法.對于大型和復(fù)雜系統(tǒng)而言,專業(yè)團(tuán)隊和技術(shù)工具有助于此項工作的順利開展,數(shù)據(jù)分級分類管理應(yīng)當(dāng)是一項持續(xù)性工作,可納入數(shù)據(jù)及數(shù)據(jù)資產(chǎn)運營管理的范疇[1]。
目前中國電信常用的數(shù)據(jù)庫包括中國電信自研數(shù)據(jù)庫TeleDB、Oracle 數(shù)據(jù)庫、Mysql 數(shù)據(jù)庫、Hive 數(shù)據(jù)庫、PgSql 數(shù)據(jù)庫等。電信行業(yè)使用的敏感數(shù)據(jù)梳理檢查方式一般是關(guān)鍵字和正則表達(dá)式匹配方式。關(guān)鍵字方式是通過讀取數(shù)據(jù)庫的字段內(nèi)容和列名稱內(nèi)容,匹配固定關(guān)鍵字以梳理數(shù)據(jù)庫內(nèi)容的敏感數(shù)據(jù)。正則表達(dá)式是一種文本模式,該模式描述在搜索文本時要匹配的一個或多個字符串。正則表達(dá)式匹配方式是通過讀取數(shù)據(jù)庫的字段內(nèi)容和列名稱內(nèi)容匹配指定正則表達(dá)式以梳理數(shù)據(jù)庫內(nèi)容的敏感數(shù)據(jù)。以上關(guān)鍵字和正則表達(dá)式匹配的兩種常規(guī)方式都無法匹配無固定格式的信息。例如姓名、地址、公司名稱等。在傳統(tǒng)的敏感數(shù)據(jù)檢查技術(shù)上,本文新增了語義識別判定方法。通過語義識別判定方法解決了無固定格式的數(shù)據(jù)識別問題。
傳統(tǒng)的敏感數(shù)據(jù)讀取方法主要為關(guān)鍵字匹配和正則表達(dá)式匹配。對于不具備特征值的姓名、地址無法有效匹配。針對該技術(shù)難點,本文引入了語義識別技術(shù)。將語義識別應(yīng)用在姓名、地址、公司名稱的中文信息識別上。同時文中使用了多種正則表達(dá)式匹配方式識別電話、郵件、IP 地址、身份證號等信息。在實際系統(tǒng)中,靈活組合語義分析、正則表達(dá)式、傳統(tǒng)的關(guān)鍵字等多種方式進(jìn)行敏感數(shù)據(jù)自動識別,達(dá)到最佳識別效果。
中文語義識別使用PYHANLP 實現(xiàn)。HANLP 是一個第三方開發(fā)包,用途是語言分析。PYHANLP 是基于它的python 包。pyhanlp 是HanLP 的Python 接口[2]。使用它的分詞方法可以將:廣東省深圳市城市假日花園分詞為:廣東省(名詞)深圳市(名詞)城市(名詞)假日(名詞)花園(名詞)。系統(tǒng)根據(jù)分詞結(jié)果和特定姓名、地址字典確認(rèn)地址和人名等信息。HANLP 自然語言處理包支持中文分詞(N-最短路分詞、CRF 分詞、索引分詞、用戶自定義詞典、詞性標(biāo)注),命名實體識別(中國人名、音譯人名、日本人名、地名、實體機(jī)構(gòu)名識別),關(guān)鍵詞提取,自動摘要,短語提取,拼音轉(zhuǎn)換,簡繁轉(zhuǎn)換,文本推薦,依存句法分析(MaxEnt 依存句法分析、CRF 依存句法分析)[2]。
本文將pyhanlp 的語義分析方法應(yīng)用于數(shù)據(jù)庫敏感數(shù)據(jù)的語義分析判定中。首先,判定字段值內(nèi)容是否含有中文字符,對于含有中文字符的字段值獲取CRF 分詞器。然后,CRF 分詞器將字段值分解為子單詞和單詞屬性(名詞、動詞)。針對分解后的名詞在地址特征詞字典、姓名特征詞字典中進(jìn)行匹配。最后判定出字段值是否為中文地址、中文姓名、中文公司名稱等。
CRF 分詞器使用條件隨機(jī)場模型。條件隨機(jī)場模型是一條件序列無向圖模型,CRF 實在給定觀察序列的條件下,計算整個觀察系列對應(yīng)的標(biāo)記序列的聯(lián)合概率分布[3]。
如中文地址分析代碼為:
# 匹配出中文地址
#(A1-5)用戶私密資料:揭示個人種族、家屬信息、居住地址、宗教信仰、基因、個人健康、私人生活等有關(guān)的用戶私密信息等;《征信業(yè)管理條例》等法律、行政法規(guī)規(guī)定禁止公開的用戶其他信息。
該代碼的模塊說明圖見圖1 語義分析模塊說明圖。
圖1:語義分析模塊說明圖程
正則表達(dá)式是對字符串(包括普通字符(例如,a 到 z 之間的字母)和特殊字符(稱為“元字符”))操作的一種邏輯公式,就是用事先定義好的一些特定字符、及這些特定字符的組合,組成一個“規(guī)則字符串”,這個“規(guī)則字符串”用來表達(dá)對字符串的一種過濾邏輯。正則表達(dá)式是一種文本模式,該模式描述在搜索文本時要匹配的一個或多個字符串。8 位電話號碼、11 位電話號碼、身份證號、銀行賬號、郵箱地址、即時通信賬號都符合一定的正則表達(dá)式。
本文識別了多種正則表達(dá)式,并應(yīng)用在實際系統(tǒng)中[4]。其中:
設(shè)備IP 正則表達(dá)式為
非中文的字符正則表達(dá)式為
日期正則表達(dá)式為
電話號碼正則表達(dá)式為r'^((0d{2,3})-)(d{7,8})|(d{7,8})$';
個人手機(jī)號碼正則表達(dá)式為
身份證號正則表達(dá)式為
駕照正則表達(dá)式為r'^[1-8]d{11}$';
qq 號碼正則表達(dá)式為
郵箱正則表達(dá)式為email_pattern = r'[w-]+@[w-]+(.[w-]+)+';
關(guān)鍵字識別是查看列名稱和字段內(nèi)容中是否含有特定的關(guān)鍵字。該方法是一種傳統(tǒng)的識別方式。這種方法和正則表達(dá)式識別方法、語義識別方法結(jié)合使用可達(dá)到更好的識別效果。
敏感數(shù)據(jù)檢查和分級分類模塊對每個采樣的字段值、列名稱進(jìn)行分析。首先對字段值進(jìn)行檢查,通過正則表達(dá)式匹配電話、Email、手機(jī)號、駕照、身份證。然后通過關(guān)鍵字匹配是否為套餐、合同、業(yè)務(wù)訂購關(guān)系、公開業(yè)務(wù)運營服務(wù)數(shù)據(jù)等。接下來通過列名稱的關(guān)鍵字補(bǔ)充確認(rèn)該列是否為電話、Email、聯(lián)系人信息、銀行賬號、費用、訂購關(guān)系等。最后通過語義分析判斷是否為用戶名稱、用戶地址。
在實際生產(chǎn)中,為了便于隨時增加配置新的正則表達(dá)式和新的關(guān)鍵詞。建立本地的sqlite 數(shù)據(jù)庫,將匹配規(guī)則對應(yīng)的各類正則表達(dá)式和關(guān)鍵詞存儲在數(shù)據(jù)庫中。
存儲表如表1 所示。
表1:匹配規(guī)則存儲表
根據(jù)字段內(nèi)容content、列名column_name 對照規(guī)則rule 判定是否為對應(yīng)類別。代碼和存儲表結(jié)合,通過5 種情況可解決多類數(shù)據(jù)的識別問題。對于新增的數(shù)據(jù)識別項目,只要在表格中根據(jù)實際情況添加對應(yīng)的識別方法、識別關(guān)鍵字或正則表達(dá)式,即可在不更改代碼的情況下進(jìn)行識別。該方法避免了每類數(shù)據(jù)都要新增代碼的問題。
因為敏感數(shù)據(jù)識別應(yīng)用需要訪問海量數(shù)據(jù)庫,同時需要記錄訪問數(shù)據(jù)庫的用戶和密碼信息。所以在實際應(yīng)用中需要解決的一個重要問題即性能問題。另一個重要問題是安全問題。本文通過多線程和信號量控制手段解決海量數(shù)據(jù)庫讀取的性能問題。通過自定義的加密算法加密數(shù)據(jù)庫用戶訪問密碼解決存儲密碼的安全問題。
本文實現(xiàn)的軟件程序首先讀取已經(jīng)預(yù)先加密的數(shù)據(jù)庫配置文件,對數(shù)據(jù)庫配置文件進(jìn)行解密,解密后獲得數(shù)據(jù)庫連接信息。
采用MD5 加鹽值(Salt)的加密方式,將數(shù)據(jù)庫配置文件加密。在加密時混入一段“隨機(jī)”字符串(鹽值),可放在原始數(shù)據(jù)前或原始數(shù)據(jù)后,再進(jìn)行哈希加密。即使原文相同,如果鹽值不同,那么哈希值也是不一樣的。
MD5 加鹽(Salt)的加密算法的代碼為:
該代碼的模塊說明圖見圖2 MD5 加鹽值說明圖。
圖2:MD5 加鹽值說明圖
軟件程序的每一個獨立線程根據(jù)數(shù)據(jù)庫連接信息,針對不同數(shù)據(jù)庫類型:teleDb、mysql、oracle、pgsql、hive 數(shù)據(jù)庫分別調(diào)用不同的驅(qū)動接口進(jìn)行檢查。對于每個數(shù)據(jù)庫類型,程序編寫針對性的驅(qū)動接口。每個獨立線程使用驅(qū)動接口連接一個具體的數(shù)據(jù)庫,讀取該庫中所有表信息。對于每個表獲取所有列信息。對于每個列信息,記錄列名稱并采樣一個或幾個字段值進(jìn)行數(shù)據(jù)分級分類和敏感數(shù)據(jù)識別。
本文在實現(xiàn)了正則表達(dá)式、關(guān)鍵詞識別的基礎(chǔ)上推出了語義分析識別。可以通過pyhanlp 的語義識別技術(shù)進(jìn)行姓名、地址、公司名稱的無特征值中文信息識別。本文通過配置表的方法實現(xiàn)了正則表達(dá)式、關(guān)鍵字匹配的識別方式動態(tài)增加。同時本文采用多線程技術(shù),解決了大量數(shù)據(jù)庫檢查的并行問題。在32G 內(nèi)存、2coreCPU的一臺Windows 主機(jī)。可以在一周內(nèi)完成上千數(shù)據(jù)庫實例的檢查。在數(shù)據(jù)庫配置信息存儲方面,本文使用了自研加密技術(shù)。