專利名稱:一種應(yīng)用層透明的數(shù)據(jù)庫(kù)加密方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種數(shù)據(jù)庫(kù)技術(shù),具體地說(shuō)是一種應(yīng)用層透明的數(shù)據(jù)庫(kù)加密方法。
背景技術(shù):
在醫(yī)療衛(wèi)生信息化過(guò)程中,涉及到大量患病就診居民的姓名和身份證件信息。出于對(duì)居民個(gè)人隱私的保護(hù)考慮,需要通過(guò)一種技術(shù)手段保證數(shù)據(jù)的安全性。即使在獲取數(shù)據(jù)庫(kù)權(quán)限的情況下,也能保證拿到的數(shù)據(jù)是不可用的。目前一種保護(hù)方式是數(shù)據(jù)庫(kù)加密技術(shù)。此種加密僅能保證在數(shù)據(jù)庫(kù)停止的情況下,拿到數(shù)據(jù)文件的人無(wú)法獲取其內(nèi)容。但是在已經(jīng)啟動(dòng)數(shù)據(jù)庫(kù)的情況下,無(wú)法保證能否訪問(wèn)數(shù)據(jù)庫(kù)的人員獲取不到數(shù)據(jù)。也無(wú)法防范內(nèi)部人員獲取敏感的業(yè)務(wù)數(shù)據(jù)。另外并不是所有的數(shù)據(jù)都支持此種加密。 另一種方式是通過(guò)對(duì)數(shù)據(jù)庫(kù)存取數(shù)據(jù)部分?jǐn)U展實(shí)現(xiàn)數(shù)據(jù)的加解密操作。這種對(duì)數(shù)據(jù)庫(kù)存取方式擴(kuò)展的方法,對(duì)于開源的數(shù)據(jù)庫(kù)來(lái)說(shuō)還可以實(shí)現(xiàn)。但是對(duì)于商業(yè)數(shù)據(jù)庫(kù),需要得到廠商的代碼支持才可以,這是一件很困難的事情。還有如果在業(yè)務(wù)邏輯部分進(jìn)行數(shù)據(jù)的加解密操作,會(huì)造成大量的數(shù)據(jù)加解密邏輯代碼。增加了大量的開發(fā)負(fù)擔(dān),也無(wú)法保證需要加密的字段在業(yè)務(wù)層處理時(shí)不被遺漏。
發(fā)明內(nèi)容
本發(fā)明的技術(shù)任務(wù)是針對(duì)上述現(xiàn)有技術(shù)的不足,提供一種應(yīng)用層透明的數(shù)據(jù)庫(kù)加密方法。該方法對(duì)應(yīng)用層的存取的表中敏感字段數(shù)據(jù)進(jìn)行加密和解密,在不影響開發(fā)人員和用戶讀取的情況下能夠保證數(shù)據(jù)的安全存儲(chǔ),且能夠在數(shù)據(jù)流出的情況下保證敏感數(shù)據(jù)的安全性。本發(fā)明的技術(shù)任務(wù)是按以下方式實(shí)現(xiàn)的一種應(yīng)用層透明的數(shù)據(jù)庫(kù)加密方法,其特點(diǎn)是通過(guò)對(duì)數(shù)據(jù)庫(kù)驅(qū)動(dòng)的代理實(shí)現(xiàn)對(duì)應(yīng)用層執(zhí)行的SQL語(yǔ)句的分析,并根據(jù)分析結(jié)果進(jìn)行數(shù)據(jù)加密和返回的結(jié)果集的數(shù)據(jù)解密過(guò)程。具體包括以下步驟
1)通過(guò)JDBC組件在應(yīng)用層對(duì)SQL進(jìn)行攔截,攔截到應(yīng)用層面的所有執(zhí)行的SQL語(yǔ)句;
2)對(duì)SQL語(yǔ)句進(jìn)行解析,生成SQL的抽象語(yǔ)法樹;
3)對(duì)抽象語(yǔ)法樹進(jìn)行遍歷;
4)將SQL語(yǔ)法樹節(jié)點(diǎn)內(nèi)容與配置的加密的表和字段進(jìn)行匹配,對(duì)需要加密的數(shù)據(jù)內(nèi)容進(jìn)行加密,遍歷完成后生成帶加密內(nèi)容的SQL語(yǔ)句提交數(shù)據(jù)庫(kù)執(zhí)行;同時(shí)對(duì)SQL語(yǔ)句的表名與表別名和列名與列別名的映射進(jìn)行記錄,在獲取結(jié)果集內(nèi)容時(shí)根據(jù)映射的內(nèi)容對(duì)查詢獲取的結(jié)果集進(jìn)行匹配,將屬于加密的結(jié)果集數(shù)據(jù)進(jìn)行解密,為了保證數(shù)據(jù)加密的強(qiáng)度,可使用256位AES加密算法,并使用迭代模式增加破解的復(fù)雜度。數(shù)據(jù)加密的實(shí)現(xiàn)方法包括
A、不帶參數(shù)的語(yǔ)句在進(jìn)行SQL分析后,對(duì)生成的抽象語(yǔ)法樹節(jié)點(diǎn)進(jìn)行遍歷時(shí),如果表屬于加密表,執(zhí)行的字段屬于加密表字段時(shí),則直接對(duì)執(zhí)行的數(shù)據(jù)進(jìn)行加密操作,遍歷完成后,根據(jù)遍歷結(jié)果生成一條數(shù)據(jù)加密后的SQL語(yǔ)句提交到數(shù)據(jù)庫(kù)執(zhí)行;
B、帶參數(shù)的SQL語(yǔ)句進(jìn)行SQL分析后,對(duì)生成的抽象語(yǔ)法樹進(jìn)行遍歷時(shí),記錄待加密字段的參數(shù)次序,根據(jù)次序在對(duì)參數(shù)進(jìn)行賦值時(shí),將需要加密的字段內(nèi)容進(jìn)行加密后再進(jìn)行賦值操作。數(shù)據(jù)的解密主要是在獲取結(jié)果集數(shù)據(jù)時(shí),對(duì)獲取數(shù)據(jù)的方法進(jìn)行攔截,通過(guò)攔截獲取字段名稱,然后根據(jù)SQL語(yǔ)句分析時(shí)記錄的表名及表別名,列名及列別名對(duì)字段名稱進(jìn)行匹配,獲取表名及列名信息判斷是否為加密的表的列,如果是加密列,則將結(jié)果數(shù)據(jù)進(jìn)行解密。對(duì)于整個(gè)系統(tǒng)來(lái)說(shuō),數(shù)據(jù)的安全性取決于數(shù)據(jù)加密密鑰的安全性。為了保證系統(tǒng)透明加密密鑰的安全性,使用非對(duì)稱加密算法對(duì)數(shù)據(jù)加密密鑰進(jìn)行保護(hù)。將系統(tǒng)使用數(shù)據(jù)加密算法的密鑰和初始化向量通過(guò)私鑰進(jìn)行加密后生成加密文件存放到系統(tǒng)中。在系統(tǒng)初 始化的時(shí)候,使用系統(tǒng)公鑰進(jìn)行解密后,對(duì)數(shù)據(jù)加密算法進(jìn)行密鑰和向量的初始化。在實(shí)現(xiàn)時(shí),使用的是1024位RSA加密算法。如果有必要,可以將加密密鑰和初始化向量的文件通過(guò)其他介質(zhì)和其他形式進(jìn)行存儲(chǔ),在系統(tǒng)初始化的時(shí)候獲取密鑰和初始化向量。將密鑰文件和應(yīng)用系統(tǒng)的分開存放,進(jìn)一步提升密鑰的安全性。根據(jù)安全需要對(duì)系統(tǒng)密鑰進(jìn)行更新時(shí),需要先將系統(tǒng)配置的加密表字段的加密數(shù)據(jù)通過(guò)舊密鑰進(jìn)行解密后,使用新密鑰進(jìn)行數(shù)據(jù)加密處理。本發(fā)明的應(yīng)用層透明的數(shù)據(jù)庫(kù)加密方法與現(xiàn)有技術(shù)相比具有以下突出的有益效果
(一)加密數(shù)據(jù)庫(kù)表的敏感字段內(nèi)容,在數(shù)據(jù)庫(kù)層面未解密的數(shù)據(jù)是無(wú)意義的,即使獲取了全部數(shù)據(jù),也無(wú)法取得加密數(shù)據(jù)的明文內(nèi)容;
(二)對(duì)于開發(fā)人員來(lái)說(shuō),對(duì)業(yè)務(wù)數(shù)據(jù)操作不需要考慮對(duì)數(shù)據(jù)的加密解密,所有的加密解密操作對(duì)用戶和開發(fā)人員是透明的;
(三)保證了數(shù)據(jù)的安全性,所有的數(shù)據(jù),僅在應(yīng)用層面能夠獲取到明文內(nèi)容,結(jié)合應(yīng)用層面的權(quán)限控制,可以很好的保護(hù)好系統(tǒng)中敏感的數(shù)據(jù)內(nèi)容不被越權(quán)獲取。
附圖I是本發(fā)明應(yīng)用層透明的數(shù)據(jù)庫(kù)加密方法的設(shè)計(jì)描述 附圖2是利用本發(fā)明方法加密后存儲(chǔ)數(shù)據(jù)樣例(ID隨機(jī)生成);
附圖3是未利用本發(fā)明方法加密的存儲(chǔ)數(shù)據(jù)樣例(ID隨機(jī)生成)。
具體實(shí)施例方式參照說(shuō)明書附圖以具體實(shí)施例對(duì)本發(fā)明的應(yīng)用層透明的數(shù)據(jù)庫(kù)加密方法作以下詳細(xì)地說(shuō)明。實(shí)施例
如附圖I所示,本發(fā)明的應(yīng)用層透明的數(shù)據(jù)庫(kù)加密方法是通過(guò)JDBC組件在應(yīng)用層對(duì)SQL進(jìn)行攔截,攔截到應(yīng)用層面的所有執(zhí)行的SQL語(yǔ)句。對(duì)SQL語(yǔ)句進(jìn)行解析后,生成SQL的抽象語(yǔ)法樹(AST)。對(duì)抽象語(yǔ)法樹(AST)進(jìn)行遍歷,將SQL語(yǔ)法樹節(jié)點(diǎn)內(nèi)容與配置的加密的表和字段進(jìn)行匹配,對(duì)需要加密的數(shù)據(jù)內(nèi)容進(jìn)行加密,遍歷完成后生成帶加密內(nèi)容的SQL語(yǔ)句提交數(shù)據(jù)庫(kù)執(zhí)行。同時(shí)對(duì)SQL語(yǔ)句的表名與表別名和列名與列別名的映射進(jìn)行記錄,在獲取結(jié)果集內(nèi)容時(shí)根據(jù)映射的內(nèi)容對(duì)查詢獲取的結(jié)果集進(jìn)行匹配。將屬于加密的結(jié)果集數(shù)據(jù)進(jìn)行解密。為了保證數(shù)據(jù)加密的強(qiáng)度,使用256位AES加密算法,并使用迭代模式增加破解的復(fù)雜度。數(shù)據(jù)加密的實(shí)現(xiàn)SQL語(yǔ)句包括不帶參數(shù)的語(yǔ)句和帶參數(shù)的語(yǔ)句,對(duì)于兩種不同的語(yǔ)句,加密的處理方式不同。A、 不帶參數(shù)的語(yǔ)句在進(jìn)行SQL分析后,對(duì)生成的抽象語(yǔ)法樹(AST)節(jié)點(diǎn)進(jìn)行遍歷時(shí),如果表屬于加密表,執(zhí)行的字段屬于加密表字段時(shí),則直接對(duì)執(zhí)行的數(shù)據(jù)進(jìn)行加密操作。遍歷完成后,根據(jù)遍歷結(jié)果生成一條數(shù)據(jù)加密后的SQL語(yǔ)句提交到數(shù)據(jù)庫(kù)執(zhí)行。B、帶參數(shù)的SQL語(yǔ)句進(jìn)行SQL分析后,對(duì)生成的抽象語(yǔ)法樹(AST)進(jìn)行遍歷時(shí), 記錄待加密字段的參數(shù)次序。根據(jù)次序在對(duì)參數(shù)進(jìn)行賦值時(shí),將需要加密的字段內(nèi)容進(jìn)行加密后再進(jìn)行賦值操作。數(shù)據(jù)解密的實(shí)現(xiàn)數(shù)據(jù)的解密主要是在獲取結(jié)果集數(shù)據(jù)時(shí),對(duì)獲取數(shù)據(jù)的方法進(jìn)行攔截。通過(guò)攔截獲取字段名稱,然后根據(jù)SQL語(yǔ)句分析時(shí)記錄的表名及表別名,列名及列別名對(duì)字段名稱進(jìn)行匹配,獲取表名及列名信息判斷是否為加密的表的列。如果是加密列,則將結(jié)果數(shù)據(jù)進(jìn)行解密。加密密鑰的保護(hù)對(duì)于整個(gè)系統(tǒng)來(lái)說(shuō),數(shù)據(jù)的安全性取決于數(shù)據(jù)加密密鑰的安全性。為了保證系統(tǒng)透明加密密鑰的安全性,使用非對(duì)稱加密算法對(duì)數(shù)據(jù)加密密鑰進(jìn)行保護(hù)。將系統(tǒng)使用數(shù)據(jù)加密算法的密鑰和初始化向量通過(guò)私鑰進(jìn)行加密后生成加密文件存放到系統(tǒng)中。在系統(tǒng)初始化的時(shí)候,使用系統(tǒng)公鑰進(jìn)行解密后,對(duì)數(shù)據(jù)加密算法進(jìn)行密鑰和向量的初始化。在實(shí)現(xiàn)時(shí),使用的是1024位RSA加密算法。如果有必要,可以將加密密鑰和初始化向量的文件通過(guò)其他介質(zhì)和其他形式進(jìn)行存儲(chǔ),在系統(tǒng)初始化的時(shí)候獲取密鑰和初始化向量。將密鑰文件和應(yīng)用系統(tǒng)的分開存放,進(jìn)一步提升密鑰的安全性。密鑰的更新根據(jù)安全需要對(duì)系統(tǒng)密鑰進(jìn)行更新時(shí),需要先將系統(tǒng)配置的加密表字段的加密數(shù)據(jù)通過(guò)舊密鑰進(jìn)行解密后,使用新密鑰進(jìn)行數(shù)據(jù)加密處理。利用本發(fā)明方法加密后存儲(chǔ)數(shù)據(jù)樣例(ID隨機(jī)生成)如附圖2所示;未利用本發(fā)明方法加密的存儲(chǔ)數(shù)據(jù)樣例(ID隨機(jī)生成)如附圖3所示。
權(quán)利要求
1.一種應(yīng)用層透明的數(shù)據(jù)庫(kù)加密方法,其特征在于通過(guò)對(duì)數(shù)據(jù)庫(kù)驅(qū)動(dòng)的代理實(shí)現(xiàn)對(duì)應(yīng)用層執(zhí)行的SQL語(yǔ)句的分析,并根據(jù)分析結(jié)果進(jìn)行數(shù)據(jù)加密和返回的結(jié)果集的數(shù)據(jù)解密過(guò)程。
2.根據(jù)權(quán)利要求I所述的應(yīng)用層透明的數(shù)據(jù)庫(kù)加密方法,其特征在于,包括以下步驟 1)通過(guò)JDBC組件在應(yīng)用層對(duì)SQL進(jìn)行攔截,攔截到應(yīng)用層面的所有執(zhí)行的SQL語(yǔ)句; 2)對(duì)SQL語(yǔ)句進(jìn)行解析,生成SQL的抽象語(yǔ)法樹; 3)對(duì)抽象語(yǔ)法樹進(jìn)行遍歷; 4)將SQL語(yǔ)法樹節(jié)點(diǎn)內(nèi)容與配置的加密的表和字段進(jìn)行匹配,對(duì)需要加密的數(shù)據(jù)內(nèi)容進(jìn)行加密,遍歷完成后生成帶加密內(nèi)容的SQL語(yǔ)句提交數(shù)據(jù)庫(kù)執(zhí)行;同時(shí)對(duì)SQL語(yǔ)句的表名與表別名和列名與列別名的映射進(jìn)行記錄,在獲取結(jié)果集內(nèi)容時(shí)根據(jù)映射的內(nèi)容對(duì)查詢獲取的結(jié)果集進(jìn)行匹配,將屬于加密的結(jié)果集數(shù)據(jù)進(jìn)行解密。
3.根據(jù)權(quán)利要求2所述的應(yīng)用層透明的數(shù)據(jù)庫(kù)加密方法,其特征在于,數(shù)據(jù)加密的實(shí)現(xiàn)方法包括 1)不帶參數(shù)的語(yǔ)句在進(jìn)行SQL分析后,對(duì)生成的抽象語(yǔ)法樹節(jié)點(diǎn)進(jìn)行遍歷時(shí),如果表屬于加密表,執(zhí)行的字段屬于加密表字段時(shí),則直接對(duì)執(zhí)行的數(shù)據(jù)進(jìn)行加密操作,遍歷完成后,根據(jù)遍歷結(jié)果生成一條數(shù)據(jù)加密后的SQL語(yǔ)句提交到數(shù)據(jù)庫(kù)執(zhí)行; 2)帶參數(shù)的SQL語(yǔ)句進(jìn)行SQL分析后,對(duì)生成的抽象語(yǔ)法樹進(jìn)行遍歷時(shí),記錄待加密字段的參數(shù)次序,根據(jù)次序在對(duì)參數(shù)進(jìn)行賦值時(shí),將需要加密的字段內(nèi)容進(jìn)行加密后再進(jìn)行賦值操作。
4.根據(jù)權(quán)利要求2所述的應(yīng)用層透明的數(shù)據(jù)庫(kù)加密方法,其特征在于,數(shù)據(jù)的解密主要是在獲取結(jié)果集數(shù)據(jù)時(shí),對(duì)獲取數(shù)據(jù)的方法進(jìn)行攔截,通過(guò)攔截獲取字段名稱,然后根據(jù)SQL語(yǔ)句分析時(shí)記錄的表名及表別名,列名及列別名對(duì)字段名稱進(jìn)行匹配,獲取表名及列名信息判斷是否為加密的表的列,如果是加密列,則將結(jié)果數(shù)據(jù)進(jìn)行解密。
5.根據(jù)權(quán)利要求I所述的應(yīng)用層透明的數(shù)據(jù)庫(kù)加密方法,其特征在于,通過(guò)非對(duì)稱加密算法對(duì)數(shù)據(jù)加密算法密鑰進(jìn)行保護(hù)。
全文摘要
本發(fā)明公開了一種應(yīng)用層透明的數(shù)據(jù)庫(kù)加密方法,屬于數(shù)據(jù)庫(kù)加密技術(shù)。該方法通過(guò)對(duì)數(shù)據(jù)庫(kù)驅(qū)動(dòng)的代理實(shí)現(xiàn)對(duì)應(yīng)用層執(zhí)行的SQL語(yǔ)句的分析,并根據(jù)分析結(jié)果進(jìn)行數(shù)據(jù)加密和返回的結(jié)果集的數(shù)據(jù)解密過(guò)程。與現(xiàn)有技術(shù)相比,本發(fā)明的應(yīng)用層透明的數(shù)據(jù)庫(kù)加密方法對(duì)應(yīng)用層的存取的表中敏感字段數(shù)據(jù)進(jìn)行加密和解密,在不影響開發(fā)人員和用戶讀取的情況下能夠保證數(shù)據(jù)的安全存儲(chǔ),具有安全性好等特點(diǎn),具有很好的推廣應(yīng)用價(jià)值。
文檔編號(hào)G06F17/30GK102968455SQ201210425928
公開日2013年3月13日 申請(qǐng)日期2012年10月31日 優(yōu)先權(quán)日2012年10月31日
發(fā)明者邱法家, 董玉全, 林杰, 侯光亮, 孫榮駿 申請(qǐng)人:山東浪潮齊魯軟件產(chǎn)業(yè)股份有限公司