本發(fā)明屬于涉及數(shù)據(jù)庫(kù)加密技術(shù)領(lǐng)域,尤其涉及一種實(shí)現(xiàn)自主可控?cái)?shù)據(jù)庫(kù)自定義函數(shù)加密的方法。
背景技術(shù):
隨著社會(huì)的發(fā)展,越來(lái)越多的數(shù)據(jù)采用電子化形式存儲(chǔ);無(wú)論是生活、工作、學(xué)習(xí)都離不開(kāi)信息系統(tǒng)的支撐。數(shù)據(jù)庫(kù)系統(tǒng)作為信息化技術(shù)的核心,其安全性和可靠性直接影響到整個(gè)信息化系統(tǒng)?,F(xiàn)有技術(shù)中為了提高信息化系統(tǒng)的安全性,通常都會(huì)對(duì)數(shù)據(jù)庫(kù)內(nèi)存儲(chǔ)的數(shù)據(jù)進(jìn)行加密。但是現(xiàn)有技術(shù)都忽略了一點(diǎn):如果數(shù)據(jù)庫(kù)的程序代碼泄漏,則意味著整個(gè)應(yīng)用系統(tǒng)也會(huì)面臨挑戰(zhàn),從而帶來(lái)嚴(yán)重的損失和后果。因此如何以技術(shù)手段保障數(shù)據(jù)庫(kù)程序代碼的安全已成為一個(gè)亟待解決的問(wèn)題。
作為示例性的,PostgreSQL是一宗典型的基礎(chǔ)的對(duì)象關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)(ORDBMS)。PostgreSQL支持大部分SQL標(biāo)準(zhǔn)并且提供了許多其他現(xiàn)代特性。但是現(xiàn)有技術(shù)中的基于PostgreSQL的自主可控?cái)?shù)據(jù)庫(kù)不支持自定義函數(shù)加密,即基于PostgreSQL的自主可控?cái)?shù)據(jù)庫(kù)的自定義函數(shù)是以明文存儲(chǔ)在系統(tǒng)表pg_catalog.pg_proc中,并且所有用戶可讀,這樣為數(shù)據(jù)庫(kù)系統(tǒng)的安全性埋下了一個(gè)重大隱患,無(wú)法保證數(shù)據(jù)庫(kù)程序代碼的安全。
技術(shù)實(shí)現(xiàn)要素:
針對(duì)現(xiàn)有技術(shù)中不對(duì)數(shù)據(jù)庫(kù)的程序代碼進(jìn)行加密導(dǎo)致整個(gè)數(shù)據(jù)庫(kù)系統(tǒng)存在重大安全隱患的問(wèn)題,本發(fā)明實(shí)施例的目的是提供一種有效且高效的實(shí)現(xiàn)自主可控?cái)?shù)據(jù)庫(kù)自定義函數(shù)加密的方法,能夠?qū)?shù)據(jù)庫(kù)的程序代碼進(jìn)行加密。
為了解決上述問(wèn)題,本發(fā)明實(shí)施例提出了一種實(shí)現(xiàn)自主可控?cái)?shù)據(jù)庫(kù)自定義函數(shù)加密的方法,包括:
步驟1、獲取自定義函數(shù)的函數(shù)體代碼;將所述將自定義函數(shù)的函數(shù)體轉(zhuǎn)換成密文;
步驟2、創(chuàng)建自定義函數(shù)語(yǔ)言模板;創(chuàng)建過(guò)程語(yǔ)言模板;生成密文的自定義函數(shù);
步驟3、對(duì)密文的自定義函數(shù)進(jìn)行SQL解析,如果解析結(jié)果正確則對(duì)自定義函數(shù)進(jìn)行編譯,然后將編譯后的自定義函數(shù)存儲(chǔ)到pg_catalog.pg_proc文件中。
其中,所述步驟1中通過(guò)以下的一種加密算法對(duì)自定義函數(shù)的函數(shù)體進(jìn)行加密:Unicode、ASCII、GBK、GB2312、UTF-8。
其中,所述步驟1中對(duì)自定義函數(shù)的函數(shù)體采用流加密方式進(jìn)行加密,所述流加密包括:一邊解密一邊編譯,并在把編譯完成后將相應(yīng)部分刪除。
本發(fā)明的上述技術(shù)方案的有益效果如下:上述的技術(shù)方案提出了一種實(shí)現(xiàn)自主可控?cái)?shù)據(jù)庫(kù)自定義函數(shù)加密的方法,能夠保證數(shù)據(jù)庫(kù)業(yè)務(wù)代碼的全生命周期安全,解決了涉密信息以明文形式存在的問(wèn)題。
附圖說(shuō)明
圖1是現(xiàn)有的自定義函數(shù)創(chuàng)建流程圖;
圖2是的本發(fā)明實(shí)施例的自定義函數(shù)創(chuàng)建流程圖;
圖3是自主可控?cái)?shù)據(jù)庫(kù)自定義函數(shù)加密創(chuàng)建流程圖。
具體實(shí)施方式
為使本發(fā)明要解決的技術(shù)問(wèn)題、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合附圖及具體實(shí)施例進(jìn)行詳細(xì)描述。
如圖1所示的,現(xiàn)有技術(shù)中的生成自定義函數(shù)的流程包括:對(duì)自定義函數(shù)進(jìn)行編輯,并對(duì)編輯后的自定義函數(shù)進(jìn)行SQL解析,如果解析結(jié)果正確則對(duì)自定義函數(shù)進(jìn)行編譯,然后將編譯后的自定義函數(shù)存儲(chǔ)到pg_proc文件中;如果解析結(jié)果錯(cuò)誤則輸出錯(cuò)誤提醒。
本發(fā)明實(shí)施例采用加密算法對(duì)函數(shù)體進(jìn)行加密,這樣就無(wú)需修改數(shù)據(jù)庫(kù)的內(nèi)核,因此本發(fā)明實(shí)施例相比較現(xiàn)有的在創(chuàng)建函數(shù)時(shí)將函數(shù)轉(zhuǎn)換為密文的加密方式,可以減少數(shù)據(jù)庫(kù)升級(jí)時(shí)對(duì)內(nèi)核進(jìn)行修改的工作量。而本發(fā)明實(shí)施例的加密算法的設(shè)計(jì)思路是將函數(shù)體內(nèi)所有的字母和符號(hào)順序進(jìn)行隨機(jī)調(diào)換。具體的,本發(fā)明實(shí)施例可以采用多種主流的編碼方式對(duì)函數(shù)體的程序代碼,主要包括:Unicode、ASCII、GBK、GB2312、UTF-8等主流的編碼方式。且加密時(shí)采用流加密,即一邊解密一邊編譯,把編譯過(guò)的部分清掉,以提高代碼安全性。
本發(fā)明實(shí)施例中,將被保護(hù)的業(yè)務(wù)信息系統(tǒng)稱為目標(biāo)程序,將被保護(hù)的人員稱為目標(biāo)用戶。
本發(fā)明實(shí)施例提出了一種如圖2和圖3所示的實(shí)現(xiàn)自主可控?cái)?shù)據(jù)庫(kù)自定義函數(shù)加密的方法,具體包括:
步驟1、獲取自定義函數(shù)的函數(shù)體代碼;將所述將自定義函數(shù)的函數(shù)體轉(zhuǎn)換成密文;
步驟2、創(chuàng)建自定義函數(shù)語(yǔ)言模板;創(chuàng)建過(guò)程語(yǔ)言模板;生成密文的自定義函數(shù);
步驟3、對(duì)密文的自定義函數(shù)進(jìn)行SQL解析,如果解析結(jié)果正確則對(duì)自定義函數(shù)進(jìn)行編譯,然后將編譯后的自定義函數(shù)存儲(chǔ)到pg_catalog.pg_proc文件中。
其中,所述步驟1中通過(guò)以下的一種加密算法對(duì)自定義函數(shù)的函數(shù)體進(jìn)行加密:Unicode、ASCII、GBK、GB2312、UTF-8。
其中,所述步驟1中對(duì)自定義函數(shù)的函數(shù)體采用流加密方式進(jìn)行加密,即一邊解密一邊編譯,把編譯過(guò)的部分清掉。
具體的,本發(fā)明實(shí)施例的方法包括:
1、將自定義函數(shù)轉(zhuǎn)換成密文
pl_powerdbsrcfile[outfile]
srcfile里只包含函數(shù)體部分,輸出加密后的密文。
2、創(chuàng)建存儲(chǔ)過(guò)程語(yǔ)言模板
INSERT INTO
3、創(chuàng)建過(guò)程語(yǔ)言
CREATE LANGUAGE plpgwrappedsql;
創(chuàng)建函數(shù)
CREATE FUNCTION func_name()
RETURNS type
AS
$$
<密文形式自定義函數(shù)>
$$
LANGUAGE plpgpowerdbsql;
至此,自定義函數(shù)加密成功。
本發(fā)明實(shí)施例采用加密算法對(duì)函數(shù)體進(jìn)行加密,這樣就無(wú)需修改數(shù)據(jù)庫(kù)的內(nèi)核,因此本發(fā)明實(shí)施例相比較現(xiàn)有的在創(chuàng)建函數(shù)時(shí)將函數(shù)轉(zhuǎn)換為密文的加密方式,可以減少數(shù)據(jù)庫(kù)升級(jí)時(shí)對(duì)內(nèi)核進(jìn)行修改的工作量。而本發(fā)明實(shí)施例的加密算法的設(shè)計(jì)思路是將函數(shù)體內(nèi)所有的字母和符號(hào)順序進(jìn)行隨機(jī)調(diào)換。具體的,本發(fā)明實(shí)施例可以采用多種主流的編碼方式對(duì)函數(shù)體的程序代碼,主要包括:Unicode、ASCII、GBK、GB2312、UTF-8等主流的編碼方式。以提高代碼安全性。
以上所述是本發(fā)明的優(yōu)選實(shí)施方式,應(yīng)當(dāng)指出,對(duì)于本技術(shù)領(lǐng)域的普通技術(shù)人員來(lái)說(shuō),在不脫離本發(fā)明所述原理的前提下,還可以作出若干改進(jìn)和潤(rùn)飾,這些改進(jìn)和潤(rùn)飾也應(yīng)視為本發(fā)明的保護(hù)范圍。