本發(fā)明屬于涉及數(shù)據(jù)庫的信息安全技術(shù)領(lǐng)域,尤其涉及一種數(shù)據(jù)庫安全控制系統(tǒng)和方法。
背景技術(shù):
隨著社會的發(fā)展,越來越多的數(shù)據(jù)采用電子化形式存儲;無論是生活、工作、學(xué)習(xí)都離不開信息系統(tǒng)的支撐。數(shù)據(jù)庫系統(tǒng)作為信息化技術(shù)的核心,其安全性和可靠性直接影響到整個信息化系統(tǒng)。
數(shù)據(jù)庫審計是一種常見的數(shù)據(jù)庫安全控制技術(shù)。數(shù)據(jù)庫審計是指對指定用戶在數(shù)據(jù)庫中的操作行為進行監(jiān)控和記錄的一種安全技術(shù),通過分析和記錄用戶的操作命令以確定操作的合法性,并形成操作的歷史記錄。這樣數(shù)據(jù)庫審計員可以查閱審計記錄,并對數(shù)據(jù)泄露問題進行事后追蹤。
PostgreSQL是一種多進程架構(gòu)的,支持復(fù)雜查詢、事務(wù)、子查詢、多版本并行控制系統(tǒng)(MVCC)、數(shù)據(jù)完整性檢查等特性的一種關(guān)系型數(shù)據(jù)庫管理軟件?,F(xiàn)有的一些基于基于開源數(shù)據(jù)庫PostgreSQL進行開發(fā)的數(shù)據(jù)庫并不具有安全審計功能,這樣導(dǎo)致在發(fā)生信息安全事故時無法進行追溯,對信息安全具有很大威脅。
技術(shù)實現(xiàn)要素:
針對現(xiàn)有技術(shù)中一些基于開源數(shù)據(jù)庫PostgreSQL進行開發(fā)的數(shù)據(jù)庫并不具有安全審計功能的問題,本發(fā)明實施例的目的是提供一種有效且高效的數(shù)據(jù)庫安全控制方法。
為了解決上述問題,本發(fā)明實施例提出了一種數(shù)據(jù)庫安全控制系統(tǒng),包括:用于確定審計所涉及數(shù)據(jù)庫、對象、任務(wù)的審計定義模塊,用于根據(jù)審計定義模塊的設(shè)定確定審計目標(biāo)并對審計目標(biāo)進行審計的審計操作模塊,用于根據(jù)審計操作模塊的審計結(jié)果進行報警和/或終止進程的審計預(yù)警模塊;
其中所述審計定義模塊包括:范圍定義子模塊、用戶定義子模塊、任務(wù)定義子模塊;其中,范圍定義單元用于預(yù)先設(shè)定需要審計的數(shù)據(jù)庫,即用戶操作的數(shù)據(jù)庫的數(shù)據(jù)庫名dbname;用戶定義單元用于預(yù)先設(shè)定被審計的用戶,即被審計用戶的用戶名username和地址addr;任務(wù)定義單元用于預(yù)先設(shè)定待審計的任務(wù)以及待審計的內(nèi)容;
其中所述審計操作模塊包括用于根據(jù)審計定義模塊的設(shè)定確定審計目標(biāo)的審計判斷單元、用于根據(jù)審計判斷單元確定的審計任務(wù)及涉及內(nèi)容對審計目標(biāo)進行審計的后臺操作單元;
其中審計判斷單元用于根據(jù)所述審計定義模塊確定的用戶操作的數(shù)據(jù)庫的數(shù)據(jù)庫名dbname、用戶名username和地址addr,并監(jiān)控該用戶的每一任務(wù);如果用戶的任務(wù)為審計定義模塊確定的待審計的任務(wù),則將待審計的任務(wù)以及待審計的內(nèi)容確定為審計目標(biāo);在本發(fā)明的一個實施例中該審計判斷單元可以通過pgluq_check_log()方法實現(xiàn);
其中審計操作模塊用于對審計判斷單元確定的審計目標(biāo)進行相應(yīng)的審計并生成審計記錄;后臺操作單元是系統(tǒng)的核心內(nèi)容,在本發(fā)明的一個實施例中可以通過log_prefix()、write_syslog()、pgluq_log()三個函數(shù)實現(xiàn):
log_prefix()函數(shù)用于在確定審計目標(biāo)后,對審計目標(biāo)對應(yīng)的用戶的系統(tǒng)日志進行格式化;
write_syslog()函數(shù)用于在該用戶的系統(tǒng)日志進行格式化后,判斷用戶的系統(tǒng)日志是否正確打開,如果是則將審計信息寫入所述系統(tǒng)日志中以生成審計記錄,如果否則將審計信息寫入錯誤日志中以生成審計記錄;且所述write_syslog()函數(shù)還用于對每一日志信息生成順序編碼并隨每一日志信息進行存儲;且當(dāng)日志信息過長或是嵌入了其他信息時,將日志信息分為多段進行存儲;
pgluq_log()函數(shù)用于接收審計目標(biāo)的每一操作信息,并將每一操作信息寫入該用戶的系統(tǒng)日志中;
其中所述審計預(yù)警模塊包括:用于在審計操作模塊審計到用戶進行非法操作時進行報警的報警生成單元、用于在審計操作模塊審計到用戶進行非法操作時終止用戶進程的進程終止單元;
其中所述審計預(yù)警模塊用于確定用戶的非法操作的預(yù)警級別,如果預(yù)警級別低于預(yù)設(shè)級別時利用所述報警生成單元進行報警,如果預(yù)警級別高于預(yù)設(shè)級別時利用所述進程終止單元終止用戶的非法操作的進程并利用所述報警生成單元進行報警。
其中,所述系統(tǒng)還包括審計轉(zhuǎn)儲模塊,用于根據(jù)預(yù)設(shè)規(guī)則將審計目標(biāo)對應(yīng)的用戶操作的數(shù)據(jù)庫和/或?qū)徲嬘涗涍M行備份。
其中,所述系統(tǒng)還包括審計保護模塊,用于監(jiān)測所述數(shù)據(jù)庫安全控制系統(tǒng)以防止非法篡改;
其中所述審計保護模塊包括過程保護單元和防篡改單元,其中所述過程保護模塊用于讀取對所述數(shù)據(jù)庫安全控制系統(tǒng)的操作以防止未經(jīng)授權(quán)用戶對系統(tǒng)進行修改;所述防篡改模塊用于監(jiān)控所述審計記錄以防止未經(jīng)授權(quán)用戶對審計記錄進行修改。
其中,所述審計記錄為pg_statsinfo表,且所述審計記錄中記錄以下的至少一項:產(chǎn)生時間、用戶名、數(shù)據(jù)庫名、客戶端來源或者IP以及主機名、會話ID、會話行號、命令標(biāo)簽、SQL狀態(tài)代碼、SQL語句。
同時,本發(fā)明實施例還提出了一種數(shù)據(jù)庫安全控制方法,包括:
確定需要進行審計的審計范圍、審計用戶、審計任務(wù);
審計對象通過審計判斷后,后臺開始具體的審計操作并會生成審計記錄,根據(jù)審計記錄與審計要求判斷用戶操作是否合法,若不合法系統(tǒng)會進行預(yù)警。
其中,所述方法還包括:
系統(tǒng)生成的審計記錄最終會進行轉(zhuǎn)儲保障審計數(shù)據(jù)的安全,并對轉(zhuǎn)儲后的數(shù)據(jù)訪問權(quán)限等方面的控制,嚴(yán)格限制未經(jīng)授權(quán)的用戶訪問,保護審計數(shù)據(jù)的安全使其不被非正常訪問、修改和破壞。
本發(fā)明的上述技術(shù)方案的有益效果如下:上述的技術(shù)方案提出了一種數(shù)據(jù)庫的數(shù)據(jù)安全控制系統(tǒng)和方法,能夠?qū)陂_源數(shù)據(jù)庫PostgreSQL進行開發(fā)的數(shù)據(jù)庫進行安全審計,以提高整個數(shù)據(jù)庫的安全性。同時審計只是對預(yù)設(shè)審計目標(biāo),不會對系統(tǒng)運行效率造成影響。
附圖說明
圖1是本發(fā)明實施例的自定義函數(shù)創(chuàng)建流程圖;
圖2是自主可控數(shù)據(jù)庫自定義函數(shù)加密創(chuàng)建流程圖。
具體實施方式
為使本發(fā)明要解決的技術(shù)問題、技術(shù)方案和優(yōu)點更加清楚,下面將結(jié)合附圖及具體實施例進行詳細(xì)描述。
如圖1所示的,本發(fā)明實施例提出了一種數(shù)據(jù)庫安全控制系統(tǒng)和方法,其技術(shù)核心包括:
1、審計模塊設(shè)計
如圖1所示,系統(tǒng)的審計模塊分為5個模塊,分別為審計定義模塊、審計操作模塊、審計轉(zhuǎn)儲模塊、審計預(yù)警模塊、審計保護模塊。
審計定義模塊完成審計的初始化工作及分為范圍定義模塊、用戶定義模塊、任務(wù)定義模塊;審計操作模塊是該設(shè)計的重點,它要根據(jù)審計要求的判斷開展后臺審計操作,分為審計判斷單元、后臺操作單元;審計轉(zhuǎn)儲模塊要完成審計數(shù)據(jù)、審計記錄的脫機存儲等操作;審計預(yù)警模塊首先要根據(jù)用戶命令操作的非法級別生成審計預(yù)警,嚴(yán)重和還要強制進行進程終止操作,分為報警生成模塊、進程終止模塊;審計保護模塊分為過程保護模塊和防篡改模塊,前者維護及保護審計過程,使其免遭修改、非法訪問及破壞,后者保護審計記錄不被未授權(quán)的訪問、修改和破壞。
2、審計模塊設(shè)計
如圖1所示,系統(tǒng)的審計模塊分為5個模塊,分別為審計定義模塊、審計操作模塊、審計轉(zhuǎn)儲模塊、審計預(yù)警模塊、審計保護模塊。
審計定義模塊完成審計的初始化工作及分為范圍定義單元、用戶定義單元、任務(wù)定義單元;審計操作模塊是該設(shè)計的重點,它要根據(jù)審計要求的判斷開展后臺審計操作,分為審計判斷模塊、后臺操作模塊;審計轉(zhuǎn)儲模塊要完成審計數(shù)據(jù)、審計記錄的脫機存儲等操作;審計預(yù)警模塊首先要根據(jù)用戶命令操作的非法級別生成審計預(yù)警,嚴(yán)重和還要強制進行進程終止操作,分為報警生成模塊、進程終止模塊;審計保護模塊分為過程保護模塊和防篡改模塊,前者維護及保護審計過程,使其免遭修改、非法訪問及破壞,后者保護審計記錄不被未授權(quán)的訪問、修改和破壞。
3、子模塊設(shè)計
(1)審計定義模塊
審計定義模塊影響審計系統(tǒng)的初始化工作,分為范圍定義單元、用戶定義單元、任務(wù)定義單元。
范圍定義單元:即對審計用戶的操作對象進行定義,即用戶操作的數(shù)據(jù)庫dbname。
用戶定義單元:即對被審計的操作用戶進行定義,包括用戶名username,以及用戶地址addr。
任務(wù)定義單元:即對審計的任務(wù)進行定義,確定審計的內(nèi)容要求。
(2)審計操作模塊,包括審計判斷單元和后臺操作模塊
審計判斷單元負(fù)責(zé)對用戶或是數(shù)據(jù)庫進行審計的判斷用的,它的工作通過pgluq_check_log()方法實現(xiàn)。
pgluq_check_log()主要對審計對象的三個信息進行判斷,包括dbname,username和addr。對于系統(tǒng)內(nèi)的默認(rèn)行為,僅對超級用戶的查詢進行審計,若是其他新的行為,我們需要對用戶的信息進行判斷,若符合審計系統(tǒng)初始化的定義則將會對用戶的行為、操作進行審計,否則不進行審計。
后臺操作模塊是系統(tǒng)進行審計工作的核心內(nèi)容,它完成對審計用戶的審計工作并要生成審計記錄,它的實現(xiàn)是通過log_prefix()、write_syslog()、pgluq_log()三個方法實現(xiàn)。
log_prefix():該方法是用戶通過對審計范圍的判斷后,對用戶的操作日志進行格式化處理,錯誤的信息可以忽略。
write_syslog():該方法是對日志行進行格式化標(biāo)記處理后,寫消息到系統(tǒng)日志,如果系統(tǒng)日志沒有打開則寫到錯誤日志上。為了防止日志消息的重復(fù),對每個日志消息設(shè)立順序編號。如果信息太長或是嵌入了其他的信息,可以將信息分為多個消息行寫入系統(tǒng)日志。
pgluq_log():完成log_prefix()和write_syslog()后,就可以根據(jù)用戶的操作將用戶操作信息記錄下來,審計操作模塊工作完成。
(4)審計預(yù)警模塊
審計預(yù)警模塊包含兩個單元:審計報警單元和進程終止單元。
審計報警單元:針對用戶的非法操作,若其預(yù)警級別不是最高,生成報警,不立刻將進程終止。
進程終止單元:針對用戶的非法操作,若其預(yù)警級別已到最高,生成報警并立刻將進程終止。
(5)審計保護模塊
審計保護模塊分為兩個單元,即為過程保護單元和防篡改單元。
過程保護單元:針對審計過程,防止在審計過程中審計遭到修改、非法訪問及破壞。針對審計數(shù)據(jù),要嚴(yán)格限制未經(jīng)授權(quán)的用戶訪問。
防篡改單元:針對審計系統(tǒng)生成的審計記錄,需要保護其免受未授權(quán)的訪問、修改和破壞。
審計工作流程
數(shù)據(jù)庫審計系統(tǒng)的工作流程圖如圖2所示,審計系統(tǒng)首先會根據(jù)用戶的要求進行審計范圍、審計用戶、審計任務(wù)的初始化。審計對象通過審計判斷后,后臺開始具體的審計操作并會生成審計記錄,根據(jù)審計記錄與審計要求判斷用戶操作是否合法,若不合法系統(tǒng)會進行預(yù)警,并且這個過程將受到保護;系統(tǒng)生成的審計記錄最終會進行轉(zhuǎn)儲保障審計數(shù)據(jù)的安全,并對轉(zhuǎn)儲后的數(shù)據(jù)訪問權(quán)限等方面的控制,嚴(yán)格限制未經(jīng)授權(quán)的用戶訪問,保護審計數(shù)據(jù)的安全使其不被非正常訪問、修改和破壞。
審計記錄表
審計記錄表為pg_statsinfo表,記錄項為產(chǎn)生時間、用戶名、數(shù)據(jù)庫名、客戶端來源或者IP以及主機名、會話ID、會話行號、命令標(biāo)簽、SQL狀態(tài)代碼、SQL語句。主鍵為會話ID號和會話行號的復(fù)合主鍵。
可以根據(jù)用戶需要,更改配置文件選項,記錄適當(dāng)?shù)膶徲嬓畔ⅰV饕呐渲眠x項如下:
logging_collector
log_statement
log_hostname
log_connections
log_disconnections
log_min_duration_statement
logging_collector參數(shù)控制是否要打開審計功能
log_statement有四個選項,分別為none/DDL/DML/ALL,none表示除了錯誤操作告警,將不記錄任何用戶的操作記錄。DDL表示只記錄所有數(shù)據(jù)定義命令,DML表示在記錄DDL語句的基礎(chǔ)上,還記錄DML的操作。ALL表示記錄所有用戶的操作。
log_hostname參數(shù)可以控制是否要記錄連接主機的主機名。
log_connections參數(shù)可以控制是否要記錄客戶端連接的信息。
log_disconnections參數(shù)可以控制是否要記錄客戶端斷開的信息。
log_min_duration_statement參數(shù)可以設(shè)定一個語句執(zhí)行的時間。當(dāng)時間超過設(shè)定時間時,就會把該語句的執(zhí)行時間,記錄到審計表中。
數(shù)據(jù)庫審計記錄表只有審計員和超級用戶可以訪問和查看和備份,但也不具有修改和刪除的權(quán)限。
審計預(yù)警技術(shù)
審計預(yù)警技術(shù)可以保證當(dāng)數(shù)據(jù)庫發(fā)生非法操作時,系統(tǒng)根據(jù)不同的操作影響范圍能夠發(fā)出實時告警,甚至終止違例進程。用戶在數(shù)據(jù)庫的非法命令操作導(dǎo)致的結(jié)果有輕重緩急之分,根據(jù)信息影響的范圍可以對審計預(yù)警進行分級,通常情況下預(yù)警可以分層三級,可以通過配置文件中參數(shù)alarm_level設(shè)置。
(1)info:提示信息報警,對業(yè)務(wù)無任何影響,可在方便的時間處理,包括執(zhí)行查詢的語法錯誤,主備機查詢沖突,導(dǎo)致當(dāng)前命令退出的消息;
(2)waring:警告信息報警,緊急度不是很高,但也要及時處理,避免惡化,包括長事務(wù),報告導(dǎo)致當(dāng)前會話終止的錯誤;
(3)error:錯誤信息報警,需立即處理,包括導(dǎo)致所有數(shù)據(jù)庫會話退出的錯誤,以及用戶的非法操作。
設(shè)置審計告警配置表alarm,屬性分別為alarm_level(告警等級),alarm_type(告警類型),alarm_object_name(告警對象名稱),alarm_desc(告警信息),alarm_time(告警時間),alarm_code(告警代碼)。
針對用戶的非法操作,若其預(yù)警級別已到最高,生成報警并立刻將進程終止,并記錄在告警表中。
審計保護技術(shù)
審計保護技術(shù)主要是針對數(shù)據(jù)庫的審計記錄不可被普通用戶訪問,修改和破壞的技術(shù)。數(shù)據(jù)庫只有審計員可以對審計表和告警表進行查詢操作,但并不具有修改和刪除記錄的權(quán)限。數(shù)據(jù)庫中的超級用戶具有對審計表和告警表的增刪改查權(quán)限。這里采用觸發(fā)文件激活數(shù)據(jù)庫的超級用戶的方式,即默認(rèn)數(shù)據(jù)庫內(nèi)部不存在超級用戶,當(dāng)在指定位置放置觸發(fā)文件后,超級用戶生效。數(shù)據(jù)庫的觸發(fā)文件的是根據(jù)數(shù)據(jù)庫所在服務(wù)器的MAC地址,通過加解密程序生成的文件。
以上所述是本發(fā)明的優(yōu)選實施方式,應(yīng)當(dāng)指出,對于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明所述原理的前提下,還可以作出若干改進和潤飾,這些改進和潤飾也應(yīng)視為本發(fā)明的保護范圍。