專利名稱:一種獲取數(shù)據(jù)庫訪問過程的方法、裝置及系統(tǒng)的制作方法
技術領域:
本發(fā)明涉及數(shù)據(jù)庫技術領域,尤其涉及一種獲取數(shù)據(jù)庫訪問過程的方法、裝置及
系統(tǒng)。
背景技術:
數(shù)據(jù)庫技術是當今信息技術的一個重要組成部分,對核心數(shù)據(jù)庫的安全保護也是 一個重要的課題。獲取各種客戶端對數(shù)據(jù)庫的訪問過程是數(shù)據(jù)庫操作審計的基礎技術。
如圖l所示,為現(xiàn)有數(shù)據(jù)庫應用系統(tǒng)的部署結(jié)構(gòu)示意圖,圖1中的客戶端應用程 序、客戶端庫、及數(shù)據(jù)庫服務器是實體,程序調(diào)用和網(wǎng)絡通訊是過程。其中,應用程序是使用 數(shù)據(jù)庫服務的程序,例如ERP、 MIS等系統(tǒng)??蛻舳藥焓菓贸绦蚺c數(shù)據(jù)庫服務器之間的通 訊橋梁,其提供一些諸如連接數(shù)據(jù)庫、準備語句、執(zhí)行語句、獲取數(shù)據(jù)等調(diào)用,應用程序調(diào)用 這些庫函數(shù)來實現(xiàn)對數(shù)據(jù)庫的訪問。程序調(diào)用是應用程序和客戶端庫之間的交互過程,具 體包括調(diào)用、回調(diào)、參數(shù)和結(jié)果傳遞、共享內(nèi)存結(jié)構(gòu)等方式。網(wǎng)絡通訊是客戶端庫和數(shù)據(jù)庫 服務器之間的通訊過程。數(shù)據(jù)庫服務器提供應用程序要訪問的數(shù)據(jù)庫。其中,應用程序、程 序調(diào)用、客戶端庫是在同一臺計算機上的,統(tǒng)稱為客戶端,數(shù)據(jù)庫服務器一般在獨立的計算 機上,之間通過網(wǎng)絡連接。當然服務器也可以和客戶端在同一臺計算機上,之間通過虛擬網(wǎng) 絡連接。 數(shù)據(jù)庫訪問過程就是指應用程序訪問數(shù)據(jù)庫的過程?,F(xiàn)有技術對于數(shù)據(jù)庫訪問過 程的獲取通常有如下幾種方式 現(xiàn)有技術之一是使用數(shù)據(jù)庫自帶的功能,如Oracle的AUDIT命令,在圖1中的數(shù) 據(jù)庫服務器上實現(xiàn)數(shù)據(jù)庫訪問過程的獲取。該方式需要數(shù)據(jù)庫服務器支持,并且占用數(shù)據(jù) 庫服務器的計算資源。此外,審計記錄一般也記錄在數(shù)據(jù)庫內(nèi),需要進一步的導出和管理。 因此,該方式性能開銷大,增加數(shù)據(jù)庫服務器的壓力。 現(xiàn)有技術之二是以旁路或代理轉(zhuǎn)發(fā)機制獲取協(xié)議數(shù)據(jù)包,從中解析訪問內(nèi)容。即 在圖1中的網(wǎng)絡通訊過程中,加入抓包設備來捕獲網(wǎng)絡通訊內(nèi)容,然后解析協(xié)議還原客戶 端訪問過程。該方式涉及廠商的知識產(chǎn)權,不容易獲取,即使能取得,授權費用也比較高。另 外,數(shù)據(jù)庫通訊協(xié)議非常復雜,即使拿到了協(xié)議文本和授權,高效的完整實現(xiàn)也非常困難。 隨著版本的升級,協(xié)議也在不斷變化,需要投入很大的力量持續(xù)分析和實現(xiàn)。此外,該方式 屬于事后機制,無法對危險操作進行攔截。 現(xiàn)有技術之三是分析數(shù)據(jù)庫的事務日志,獲取訪問信息。其也是一種基于數(shù)據(jù)庫 服務器的機制?,F(xiàn)代數(shù)據(jù)庫系統(tǒng)需要提供事務一致性,通常都會對所有的修改操作做日志 和回滾文件。該方式就是利用這些文件的信息來獲取數(shù)據(jù)庫的訪問過程。然而,該方式同 樣會涉及廠商的知識產(chǎn)權,不容易獲取,即使能取得,授權費用也比較高。另外,該方式中由 于在事務日志中通常不包含只讀查詢和結(jié)果數(shù)據(jù)集,因此不能對敏感數(shù)據(jù)查詢做審計。此 外,該方式同樣屬于事后機制,無法對危險操作進行攔截。
在實現(xiàn)本發(fā)明的過程中,發(fā)明人經(jīng)過研究發(fā)現(xiàn)如圖1所示的部署結(jié)構(gòu),應用程序要對數(shù)據(jù)庫進行訪問一定會經(jīng)過這些實體和過程,也就可以在這些位置來做捕獲。然而,上 述現(xiàn)有技術都是在網(wǎng)絡通訊或數(shù)據(jù)庫服務器這兩個位置進行數(shù)據(jù)庫訪問過程的獲取的,并 且都存在各自的優(yōu)缺點。
發(fā)明內(nèi)容
本發(fā)明實施例提供一種獲取數(shù)據(jù)庫訪問過程的方法、裝置及系統(tǒng),在程序調(diào)用過
程實現(xiàn)數(shù)據(jù)庫訪問過程的獲取,從而實現(xiàn)數(shù)據(jù)庫審計和權限的控制。 本發(fā)明實施例提供以下技術方案 —種獲取數(shù)據(jù)庫訪問過程的方法,包括 截獲應用程序APP對數(shù)據(jù)庫客戶端庫DCL的調(diào)用信息; 對所述截獲到的調(diào)用信息進行處理; 將與所述調(diào)用信息對應的結(jié)果返回給應用程序。 優(yōu)選的,所述截獲應用程序APP對數(shù)據(jù)庫客戶端庫DCL的調(diào)用信息的方式包括下 述方式中的任意一種 修改數(shù)據(jù)庫客戶端庫DCL的名字和/或位置,將審計代理庫APL替換為數(shù)據(jù)庫客 戶端庫DCL,使應用程序APP主動加載審計代理庫APL,審計代理庫APL再加載數(shù)據(jù)庫客戶 端庫DCL;或者 修改數(shù)據(jù)庫客戶端庫DCL以及相關函數(shù)的入口 ,使應用程序APP指向?qū)徲嫶韼?APL ;或者 修改應用程序APP,將對數(shù)據(jù)庫客戶端庫DCL函數(shù)的調(diào)用重定向到審計代理庫 APL ;或者 在應用程序APP運行時,動態(tài)注入審計代理庫APL。
優(yōu)選的,所述對所述截獲到的調(diào)用信息進行處理包括 對所述截獲到的調(diào)用信息進行分析、和/或記錄、和/或修改、和/或阻斷。
進一步的,若所述調(diào)用信息屬于數(shù)據(jù)庫連接調(diào)用,則所述對所述截獲到的調(diào)用信 息進行處理包括 記錄數(shù)據(jù)庫連接參數(shù),所述連接參數(shù)包括對應的主機、用戶名、數(shù)據(jù)庫名;和/或
所述數(shù)據(jù)庫連接包括建立連接和關閉連接,建立連接時創(chuàng)建相關描述對象,關閉 連接時釋放相關描述對象;和/或 記錄當前客戶端的名稱、命令行、可執(zhí)行文件位置信息。 進一步的,若所述調(diào)用信息屬于數(shù)據(jù)庫環(huán)境設置調(diào)用,則所述對所述截獲到的調(diào) 用信息進行處理包括 如果環(huán)境設置、命令的執(zhí)行和表示方式有關,則在設置的時候進行分析和記錄,以 供記錄或展現(xiàn)具體操作時參考; 如果在數(shù)據(jù)庫連接描述對象中有相應的屬性,則在修改時同步改變所述屬性;
其中,所述數(shù)據(jù)庫環(huán)境設置項包括字符集、字符編碼、事務提交方式。
進一步的,若所述調(diào)用信息屬于準備數(shù)據(jù)庫操作指令和參數(shù)的調(diào)用,則所述對所 述截獲到的調(diào)用信息進行處理包括 創(chuàng)建語句對象時建立語句描述,釋放語句對象時銷毀語句描述;
5
其中,所述準備數(shù)據(jù)庫操作指令和參數(shù)包括準備語句、設置選項、綁定參數(shù)。
進一步的,若所述調(diào)用信息屬于執(zhí)行數(shù)據(jù)庫操作指令的調(diào)用,則所述調(diào)用信息包 括語句的引用;所述對所述截獲到的調(diào)用信息進行處理包括調(diào)用前處理、調(diào)用時處理、及 調(diào)用后處理;其中 所述調(diào)用前處理包括檢查所述語句是否符合權限審計要求,對于不符合要求的 拒絕執(zhí)行;和/或,將執(zhí)行語句的內(nèi)容、選項和參數(shù)發(fā)送到審計服務器進行記錄,記錄執(zhí)行 狀態(tài)為"未執(zhí)行"; 所述調(diào)用后處理包括記錄語句的執(zhí)行結(jié)果,數(shù)據(jù)修改的程度;如果語句執(zhí)行失 敗,更新事務狀態(tài)為"執(zhí)行失敗";否則如果語句的類型是miL,則更新事務狀態(tài)為"已執(zhí)行" 或"已提交";如果語句的類型是DDL或DCL,則更新事務狀態(tài)為"已提交",并把該次會話內(nèi) 事務狀態(tài)為"已執(zhí)行"的語句全部修改為"已提交"。 進一步的,若所述調(diào)用信息屬于查詢結(jié)果數(shù)據(jù)的調(diào)用,則所述對所述截獲到的調(diào) 用信息進行處理包括 有選擇的記錄查詢的結(jié)果數(shù)據(jù),所述結(jié)果數(shù)據(jù)包括轉(zhuǎn)換后的結(jié)果數(shù)據(jù)。 進一步的,若所述調(diào)用信息屬于事務控制的調(diào)用,則所述對所述截獲到的調(diào)用信
息進行處理包括 記錄各種語句的事務狀態(tài),執(zhí)行時按照連接當時的事務設定發(fā)送,如果不是自動 提交的,則設置為"已執(zhí)行"; 如果執(zhí)行ROLLBACK語句,則將審計服務器的記錄中連接"已執(zhí)行"狀態(tài)的語句執(zhí) 行全部修改為"已回滾"事務狀態(tài); 如果執(zhí)行COMMIT語句,則將審計服務器的記錄中連接"已執(zhí)行"狀態(tài)的語句執(zhí)行 全部修改為"已提交"事務狀態(tài)。 進一步的,所述將與所述調(diào)用信息對應的結(jié)果返回給應用程序包括
對所述與所述調(diào)用信息對應的結(jié)果進行分析、和/或記錄、和/或修改。
—種獲取數(shù)據(jù)庫訪問過程的裝置,包括 截獲單元,用于截獲應用程序?qū)?shù)據(jù)庫客戶端庫的調(diào)用信息; 處理單元,用于對所述截獲單元截獲到的調(diào)用信息進行處理; 反饋單元,用于將與所述調(diào)用信息對應的結(jié)果返回給應用程序。 其中,所述截獲單元具體用于修改數(shù)據(jù)庫客戶端庫DCL的名字和/或位置,將審計
代理庫APL替換為數(shù)據(jù)庫客戶端庫DCL,使應用程序APP主動加載審計代理庫APL,審計代
理庫APL再加載數(shù)據(jù)庫客戶端庫DCL ;或者 用于修改數(shù)據(jù)庫客戶端庫DCL以及相關函數(shù)的入口,使應用程序APP指向?qū)徲嫶?理庫APL;或者 用于修改應用程序APP,將對數(shù)據(jù)庫客戶端庫DCL函數(shù)的調(diào)用重定向到審計代理 庫APL;或者 用于在應用程序APP運行時,動態(tài)注入審計代理庫APL。 優(yōu)選的,所述處理單元具體用于對所述截獲到的調(diào)用信息進行分析、和/或記錄、 和/或修改、和/或阻斷。 優(yōu)選的,所述反饋單元具體用于對所述與所述調(diào)用信息對應的結(jié)果進行分析、和/
6或記錄、和/或修改。 優(yōu)選的,所述裝置設置在客戶端內(nèi),介于應用程序與數(shù)據(jù)庫客戶端庫之間。
—種獲取數(shù)據(jù)庫訪問過程的系統(tǒng),包括所述的獲取數(shù)據(jù)庫訪問過程的裝置。
本發(fā)明實施例提供一種獲取數(shù)據(jù)庫訪問過程的方法、裝置及系統(tǒng),在程序調(diào)用過 程實現(xiàn)數(shù)據(jù)庫訪問過程的獲取,從而實現(xiàn)數(shù)據(jù)庫審計和權限的控制。本發(fā)明可以支持所有 客戶端,在客戶端和第三方審計平臺上執(zhí)行,無需增加數(shù)據(jù)庫服務器的負擔。另外,本發(fā)明 不僅可以獲取訪問過程并且記錄完整準確的信息,還可以對訪問和返回的數(shù)據(jù)進行修改, 以及對危險操作進行攔截。
為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術中的技術方案,下面將對實施例或現(xiàn) 有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本 發(fā)明的一些實施例,對于本領域普通技術人員來講,在不付出創(chuàng)造性勞動性的前提下,還可 以根據(jù)這些附圖獲得其他的附圖。
圖1是現(xiàn)有數(shù)據(jù)庫應用系統(tǒng)的部署結(jié)構(gòu)示意圖; 圖2是本發(fā)明實施例提供的獲取數(shù)據(jù)庫訪問過程的方法概括流程圖; 圖3是本發(fā)明實施例提供的獲取數(shù)據(jù)庫訪問過程的方法中各種調(diào)用方式的截取
過程示意圖; 圖4是本發(fā)明實施例提供的獲取數(shù)據(jù)庫訪問過程的方法中操作結(jié)果記錄結(jié)構(gòu)示 意圖; 圖5是本發(fā)明實施例提供的獲取數(shù)據(jù)庫訪問過程的裝置結(jié)構(gòu)示意圖;
圖6是本發(fā)明實施例提供的獲取數(shù)據(jù)庫訪問過程的裝置應用示意圖。
具體實施例方式
本發(fā)明實施例提供一種獲取數(shù)據(jù)庫訪問過程的方法、裝置及系統(tǒng),在程序調(diào)用過 程實現(xiàn)數(shù)據(jù)庫訪問過程的獲取,從而實現(xiàn)數(shù)據(jù)庫審計和權限的控制。為使本發(fā)明的目的、技 術方案及優(yōu)點更加清楚明白,下面參照附圖并舉實施例,對本發(fā)明進一步詳細說明。
如圖2所示,為本發(fā)明實施例提供的獲取數(shù)據(jù)庫訪問過程的方法概括流程圖。所 述方法包括 步驟201、截獲應用程序(APP)對數(shù)據(jù)庫客戶端庫(DCL,簡稱客戶端庫)的調(diào)用信 息; 步驟202、對所述截獲到的調(diào)用信息進行處理; 步驟203、將與所述調(diào)用信息對應的結(jié)果返回給應用程序。 由于如背景技術介紹的,應用程序是調(diào)用數(shù)據(jù)庫廠商提供的客戶端庫的,而不是 調(diào)用本發(fā)明所述的審計代理庫,因此需要本發(fā)明實施例提供的方法來讓應用程序以為是調(diào) 用客戶端庫而實則調(diào)用審計代理庫。 具體而言,所述步驟201中,截獲應用程序(APP)對客戶端庫(DCL)的調(diào)用信息的 方式包括下述方式中的任意一種 修改客戶端庫(DCL)的名字和/或位置,將審計代理庫(APL)替換為客戶端庫(DCL),使應用程序(APP)主動加載審計代理庫(APL),審計代理庫(APL)再加載客戶端庫 (DCL);或者 修改客戶端庫(DCL)以及相關函數(shù)的入口,使應用程序(APP)指向?qū)徲嫶韼?(APL);或者 修改應用程序(APP),將對客戶端庫(DCL)函數(shù)的調(diào)用重定向到審計代理庫 (APL);或者 在應用程序(APP)運行時,動態(tài)注入審計代理庫(APL),也就是說,在運行時注入 客戶端進程,動態(tài)修改客戶端的數(shù)據(jù)庫調(diào)用代碼。 所述步驟202中,對所述截獲到的調(diào)用信息進行處理包括對所述截獲到的調(diào)用 信息進行分析、和/或記錄、和/或修改、和/或阻斷。具體而言,按照所述調(diào)用信息所述的 類型采取不同的處理方式。而所述截獲到的調(diào)用信息,其與客戶端庫中各種數(shù)據(jù)庫的訪問 接口相對應,通常包括連接到數(shù)據(jù)庫、數(shù)據(jù)庫環(huán)境參數(shù)設置、準備數(shù)據(jù)庫操作指令和參數(shù)、 執(zhí)行數(shù)據(jù)塊操作指令、獲取指令的執(zhí)行結(jié)果以及查詢數(shù)據(jù)、事務控制等。需要說明的是,這 些調(diào)用一般都使用內(nèi)存中的結(jié)構(gòu)來保存信息,以指針作為參數(shù)??蛻舳藥鞎峁﹥?nèi)存結(jié)構(gòu) 的說明,或是訪問和修改內(nèi)存對象的調(diào)用。以句柄或內(nèi)存指針的形式實現(xiàn)各種對象相互之 間的引用。 另外,需要說明的是,應用程序和客戶端庫之間操作各種對象,其通常包括以下類 型數(shù)據(jù)庫連接,如描述客戶端到數(shù)據(jù)庫服務器的一個連接;語句;語句參數(shù);結(jié)果查詢,如 游標。審計代理庫建立對象池來識別和跟蹤這些對象,在函數(shù)被調(diào)用的時候解析其實際對 應。這些對象可以以指針或引用來標識??捎貌煌膶ο蟪貋砀欉@些對象,由于單元進 程中內(nèi)存地址的唯一性和確定性,也可用一個單獨的以內(nèi)存地址(如指針)為索引的對象 池來跟蹤。 下面,針對上述已經(jīng)列舉的調(diào)用信息的各種類型,具體說明對所述截獲到的調(diào)用 信息進行處理的內(nèi)容。 若所述調(diào)用信息屬于數(shù)據(jù)庫連接調(diào)用,則所述對所述截獲到的調(diào)用信息進行處理 包括記錄數(shù)據(jù)庫連接參數(shù),所述連接參數(shù)包括對應的主機、用戶名、數(shù)據(jù)庫名;和/或所述 數(shù)據(jù)庫連接包括建立連接和關閉連接,建立連接時創(chuàng)建相關描述對象,關閉連接時釋放相 關描述對象;和/或記錄當前客戶端的名稱、命令行、可執(zhí)行文件位置信息。
若所述調(diào)用信息屬于數(shù)據(jù)庫環(huán)境設置調(diào)用,則所述對所述截獲到的調(diào)用信息進行 處理包括如果環(huán)境設置、命令的執(zhí)行和表示方式有關,則在設置的時候進行分析和記錄, 以供記錄或展現(xiàn)具體操作時參考;如果在數(shù)據(jù)庫連接描述對象中有相應的屬性,則在修改 時同步改變所述屬性;其中,所述數(shù)據(jù)庫環(huán)境設置項包括字符集、字符編碼、事務提交方 式。 若所述調(diào)用信息屬于準備數(shù)據(jù)庫操作指令和參數(shù)的調(diào)用,則所述對所述截獲到的 調(diào)用信息進行處理包括創(chuàng)建語句對象時建立語句描述,釋放語句對象時銷毀語句描述; 其中,所述準備數(shù)據(jù)庫操作指令和參數(shù)包括準備語句、設置選項、綁定參數(shù)。
若所述調(diào)用信息屬于執(zhí)行數(shù)據(jù)庫操作指令的調(diào)用,則所述調(diào)用信息包括語句的引 用,所述對所述截獲到的調(diào)用信息進行處理包括調(diào)用前處理、調(diào)用時處理、及調(diào)用后處理; 其中所述調(diào)用前處理包括檢查所述語句是否符合權限審計要求,對于不符合要求的拒
8CN 101727475 A
說明書
6/8頁 絕執(zhí)行;和/或,將執(zhí)行語句的內(nèi)容、選項和參數(shù)發(fā)送到審計服務器進行記錄,記錄執(zhí)行狀 態(tài)為"未執(zhí)行";所述調(diào)用時處理包括如果語句的類型是DDL,則將該次會話內(nèi)事務狀態(tài)為 "已執(zhí)行"的語句全部修改為"已提交";所述調(diào)用后處理包括記錄語句的執(zhí)行結(jié)果,數(shù)據(jù)修 改的程度;如果語句執(zhí)行失敗,更新事務狀態(tài)為"執(zhí)行失敗";否則如果語句的類型是匿L,則 更新事務狀態(tài)為"已執(zhí)行"或"已提交";如果語句的類型是DDL或DCL,則更新事務狀態(tài)為 "已提交",并把該次會話內(nèi)事務狀態(tài)為"已執(zhí)行"的語句全部修改為"已提交"。
若所述調(diào)用信息屬于查詢結(jié)果數(shù)據(jù)的調(diào)用,則所述對所述截獲到的調(diào)用信息進行 處理包括有選擇的記錄查詢的結(jié)果數(shù)據(jù),所述結(jié)果數(shù)據(jù)包括轉(zhuǎn)換后的結(jié)果數(shù)據(jù)。
若所述調(diào)用信息屬于事務控制的調(diào)用,則所述對所述截獲到的調(diào)用信息進行處理 包括記錄各種語句的事務狀態(tài),執(zhí)行時按照連接當時的事務設定發(fā)送,如果不是自動提交 的,則設置為"已執(zhí)行";如果執(zhí)行ROLLBACK語句,則將審計服務器的記錄中連接"已執(zhí)行" 狀態(tài)的語句執(zhí)行全部修改為"已回滾"事務狀態(tài);如果執(zhí)行COMMIT語句,則將審計服務器的 記錄中連接"已執(zhí)行"狀態(tài)的語句執(zhí)行全部修改為"已提交"事務狀態(tài)。 需要說明的是,上述所述的記錄中,有些內(nèi)容是可以不記錄的,其中應用進程和數(shù) 據(jù)庫連接是必須要記錄的,而命令執(zhí)行、命令參數(shù)、數(shù)據(jù)列定義、以及數(shù)據(jù)行內(nèi)容等是可以 不記錄的。 另外,對于語句的權限控制可以有很多方法,例如截獲語句執(zhí)行調(diào)用;或?qū)φZ句內(nèi) 容及其選項和參數(shù)進行語法分析,得到涉及的數(shù)據(jù)庫對象,如表、視圖等,或得到對數(shù)據(jù)庫 對象執(zhí)行的操作,如增、刪、改、查等,或得到訪問數(shù)據(jù)庫對象的哪些具體屬性,如表和視圖 的哪些列等;或比對權限控制規(guī)則,看是否允許當前用戶訪問這些數(shù)據(jù)對象,如果不允許, 就不用調(diào)用客戶端庫執(zhí)行函數(shù),而直接返回相應的錯誤代碼。如果沒有合適的錯誤代碼,或 無法所實現(xiàn)錯誤報告的修改,也可以返回正確執(zhí)行,但實際不做任何工作,或查不到相關記 錄等。 通常,應用程序調(diào)用客戶端庫的方式可以分為三種,即同步調(diào)用、異步調(diào)用、及回 調(diào)。其中,同步調(diào)用是客戶端庫函數(shù)等數(shù)據(jù)庫完成處理后再返回,處理結(jié)果一般已經(jīng)知道, 此類調(diào)用的截獲是最簡單的,完成處理后再返回即可。異步調(diào)用是客戶端庫接收請求后即 返回,應用程序可繼續(xù)執(zhí)行,等數(shù)據(jù)庫處理完成后,應用程序調(diào)用查詢函數(shù)獲取執(zhí)行結(jié)果。 回調(diào)是應用程序調(diào)用客戶端庫時提供一個回調(diào)函數(shù),客戶端庫接收請求;等數(shù)據(jù)庫處理完 成后,客戶端庫調(diào)用應用程序提供的回調(diào)函數(shù)把結(jié)果或數(shù)據(jù)傳遞給應用程序。具體的,回調(diào) 分為同步回調(diào)和異步回調(diào)兩種,同步回調(diào)的客戶端庫函數(shù)等應用程序回調(diào)函數(shù)結(jié)束運行返 回后一次返回;異步回調(diào)在接收完調(diào)用請求后即返回,客戶端庫在完成數(shù)據(jù)庫處理后,在之 后的查詢調(diào)用或事件處理線程上調(diào)用應用程序回調(diào)函數(shù)。 下面結(jié)合上述調(diào)用模式的執(zhí)行過程,重點說明審計代理庫中執(zhí)行的工作調(diào)用前 處理,即發(fā)送客戶端請求給客戶端庫函數(shù)前的處理工作,包括合規(guī)性檢查、調(diào)用記錄等。調(diào) 用后處理,即客戶端庫返回結(jié)果給應用程序前的處理工作,包括記錄本次調(diào)用的結(jié)果等。異 步調(diào)用注冊,異步調(diào)用一般回返回一個引用,供結(jié)果查詢調(diào)用使用。這里要記錄所述引用, 并和相關的調(diào)用對象,如數(shù)據(jù)庫連接、語句等關聯(lián)。異步調(diào)用還原,即通過異步調(diào)用引用還 原出關聯(lián)的對象等,使調(diào)用后處理能知道相關調(diào)用的上下文。替換回調(diào)函數(shù),即把應用程序 傳遞給客戶端庫的回調(diào)函數(shù)替換為審計代理庫的回調(diào)函數(shù),然后再調(diào)用客戶端庫。調(diào)用原
9回調(diào)函數(shù),即客戶端庫會調(diào)用注冊的回調(diào)函數(shù),也就是審計代理庫的回調(diào)函數(shù),該函數(shù)完成
處理后,再調(diào)用應用程序的回調(diào)函數(shù)完成數(shù)據(jù)庫調(diào)用返回。需要說明的是,關于調(diào)用前處理
和調(diào)用后處理,很多處理工作既可以在調(diào)用前執(zhí)行,也可以在調(diào)用后執(zhí)行,對于這樣的也可
以統(tǒng)稱為調(diào)用時處理。如圖3所示,為上述各種調(diào)用方式的截取過程示意圖。 所述步驟203中,將與所述調(diào)用信息對應的結(jié)果返回給應用程序包括對所述與
所述調(diào)用信息對應的結(jié)果進行分析、和/或記錄、和/或修改。具體的,可以按照如圖4所
示的結(jié)構(gòu)圖記錄操作結(jié)果,包括應用程序、數(shù)據(jù)庫連接、命令執(zhí)行、命令參數(shù)、及查詢結(jié)果數(shù)
據(jù)。其中,命令執(zhí)行含有以下屬性語句文本;事務狀態(tài),例如未執(zhí)行、已執(zhí)行(未提交)、已
提交、已回滾、不確定等;執(zhí)行結(jié)果,例如成功與否,影響了多少數(shù)據(jù)對象等,但不包含查詢結(jié)果。
如圖5所示,為本發(fā)明實施例提供的獲取數(shù)據(jù)庫訪問過程的裝置結(jié)構(gòu)示意圖。該
裝置包括截獲單元510、處理單元520、反饋單元530 ;其中 所述截獲單元510,用于截獲應用程序?qū)?shù)據(jù)庫客戶端庫的調(diào)用信息; 所述處理單元520,用于對所述截獲單元510截獲到的調(diào)用信息進行處理; 所述反饋單元530,用于將與所述調(diào)用信息對應的結(jié)果返回給應用程序。 其中,所述截獲單元510具體用于修改數(shù)據(jù)庫客戶端庫DCL的名字和/或位置,將
審計代理庫APL替換為數(shù)據(jù)庫客戶端庫DCL,使應用程序APP主動加載審計代理庫APL,審
計代理庫APL再加載數(shù)據(jù)庫客戶端庫DCL ;或者用于修改數(shù)據(jù)庫客戶端庫DCL以及相關函
數(shù)的入口,使應用程序APP指向?qū)徲嫶韼霢PL;或者用于修改應用程序APP,將對數(shù)據(jù)庫客
戶端庫DCL函數(shù)的調(diào)用重定向到審計代理庫APL;或者用于在應用程序APP運行時,動態(tài)注
入審計代理庫APL。 所述處理單元520具體用于對所述截獲到的調(diào)用信息進行分析、和/或記錄、和/ 或修改、和/或阻斷。 所述反饋單元530具體用于對所述與所述調(diào)用信息對應的結(jié)果進行分析、和/或 記錄、和/或修改。 需要說明的是,上述方法各實施例的說明也同樣適用于裝置各實施例。 在實際應用時,所述裝置設置在客戶端內(nèi),介于應用程序與數(shù)據(jù)庫客戶端庫之間。
如圖6所示,為本發(fā)明實施例提供的獲取數(shù)據(jù)庫訪問過程的裝置應用示意圖。其中,圖6中
的審計代理庫即為所述的獲取數(shù)據(jù)庫訪問過程的裝置,其結(jié)構(gòu)如上所述,此處不再贅述。所
述的審計代理庫實際上是為實現(xiàn)數(shù)據(jù)庫審計而做的數(shù)據(jù)庫訪問代理庫,其會把數(shù)據(jù)庫的訪
問過程發(fā)送到審計服務器上保存,也可以根據(jù)審計配置修改或拒絕某些數(shù)據(jù)庫訪問。 本領域普通技術人員可以理解實現(xiàn)上述實施例方法攜帶的全部或部分步驟是可
以通過程序來指令相關的硬件完成,所述的程序可以存儲于一種計算機可讀存儲介質(zhì)中,
該程序在執(zhí)行時,包括方法實施例的步驟之一或其組合。 另外,在本發(fā)明各個實施例中的各功能單元可以集成在一個處理模塊中,也可以 是各個單元單獨物理存在,也可以兩個或兩個以上單元集成在一個模塊中。上述集成的模 塊既可以采用硬件的形式實現(xiàn),也可以采用軟件功能模塊的形式實現(xiàn)。所述集成的模塊如 果以軟件功能模塊的形式實現(xiàn)并作為獨立的產(chǎn)品銷售或使用時,也可以存儲在一個計算機 可讀取存儲介質(zhì)中。
上述提到的存儲介質(zhì)可以是只讀存儲器,磁盤或光盤等。 綜上所述,本發(fā)明提供了一種獲取數(shù)據(jù)庫訪問過程的的方法、裝置及系統(tǒng),在程序 調(diào)用過程實現(xiàn)數(shù)據(jù)庫訪問過程的獲取,從而實現(xiàn)數(shù)據(jù)庫審計和權限的控制。本發(fā)明可以支 持所有客戶端,在客戶端和第三方審計平臺上執(zhí)行,無需增加數(shù)據(jù)庫服務器的負擔。另外, 本發(fā)明不僅可以獲取訪問過程并且記錄完整準確的信息,還可以對訪問和返回的數(shù)據(jù)進行 修改,以及對危險操作進行攔截。此外,本發(fā)明實現(xiàn)的接口比較簡單和穩(wěn)定,隨著版本的變 化,需要修改和重新實現(xiàn)的部分很少;并且只依賴數(shù)據(jù)庫廠商提供的公開信息,不涉及商業(yè) 機密,知識產(chǎn)權風險低。 以上對本發(fā)明所提供的獲取數(shù)據(jù)庫訪問過程的的方法、裝置及系統(tǒng)進行了詳細介 紹,本文中應用了具體個例對本發(fā)明的原理及實施方式進行了闡述,以上實施例的說明只 是用于幫助理解本發(fā)明的方案;同時,對于本領域的一般技術人員,依據(jù)本發(fā)明的思想,在具體實施方式
及應用范圍上均會有改變之處,綜上所述,本說明書內(nèi)容不應理解為對本發(fā) 明的限制。
權利要求
一種獲取數(shù)據(jù)庫訪問過程的方法,其特征在于,包括截獲應用程序APP對數(shù)據(jù)庫客戶端庫DCL的調(diào)用信息;對所述截獲到的調(diào)用信息進行處理;將與所述調(diào)用信息對應的結(jié)果返回給應用程序。
2. 根據(jù)權利要求1所述的獲取數(shù)據(jù)庫訪問過程的方法,其特征在于,所述截獲應用程 序APP對數(shù)據(jù)庫客戶端庫DCL的調(diào)用信息的方式包括下述方式中的任意一種修改數(shù)據(jù)庫客戶端庫DCL的名字和/或位置,將審計代理庫APL替換為數(shù)據(jù)庫客戶端 庫DCL,使應用程序APP主動加載審計代理庫APL,審計代理庫APL再加載數(shù)據(jù)庫客戶端庫 DCL ;或者修改數(shù)據(jù)庫客戶端庫DCL以及相關函數(shù)的入口,使應用程序APP指向?qū)徲嫶韼霢PL ;或者修改應用程序APP,將對數(shù)據(jù)庫客戶端庫DCL函數(shù)的調(diào)用重定向到審計代理庫APL ;或者在應用程序APP運行時,動態(tài)注入審計代理庫APL。
3. 根據(jù)權利要求1所述的獲取數(shù)據(jù)庫訪問過程的方法,其特征在于,所述對所述截獲 到的調(diào)用信息進行處理包括對所述截獲到的調(diào)用信息進行分析、和/或記錄、和/或修改、和/或阻斷。
4 根據(jù)權利要求3所述的獲取數(shù)據(jù)庫訪問過程的方法,其特征在于,若所述調(diào)用信息 屬于數(shù)據(jù)庫連接調(diào)用,則所述對所述截獲到的調(diào)用信息進行處理包括記錄數(shù)據(jù)庫連接參數(shù),所述連接參數(shù)包括對應的主機、用戶名、數(shù)據(jù)庫名;和/或 所述數(shù)據(jù)庫連接包括建立連接和關閉連接,建立連接時創(chuàng)建相關描述對象,關閉連接 時釋放相關描述對象;和/或記錄當前客戶端的名稱、命令行、可執(zhí)行文件位置信息。
5. 根據(jù)權利要求3所述的獲取數(shù)據(jù)庫訪問過程的方法,其特征在于,若所述調(diào)用信息 屬于數(shù)據(jù)庫環(huán)境設置調(diào)用,則所述對所述截獲到的調(diào)用信息進行處理包括如果環(huán)境設置、命令的執(zhí)行和表示方式有關,則在設置的時候進行分析和記錄,以供記 錄或展現(xiàn)具體操作時參考;如果在數(shù)據(jù)庫連接描述對象中有相應的屬性,則在修改時同步改變所述屬性; 其中,所述數(shù)據(jù)庫環(huán)境設置項包括字符集、字符編碼、事務提交方式。
6. 根據(jù)權利要求3所述的獲取數(shù)據(jù)庫訪問過程的方法,其特征在于,若所述調(diào)用信息 屬于準備數(shù)據(jù)庫操作指令和參數(shù)的調(diào)用,則所述對所述截獲到的調(diào)用信息進行處理包括創(chuàng)建語句對象時建立語句描述,釋放語句對象時銷毀語句描述;其中,所述準備數(shù)據(jù)庫操作指令和參數(shù)包括準備語句、設置選項、綁定參數(shù)。
7. 根據(jù)權利要求3所述的獲取數(shù)據(jù)庫訪問過程的方法,其特征在于,若所述調(diào)用信息 屬于執(zhí)行數(shù)據(jù)庫操作指令的調(diào)用,則所述調(diào)用信息包括語句的引用;所述對所述截獲到的 調(diào)用信息進行處理包括調(diào)用前處理、調(diào)用時處理、及調(diào)用后處理;其中所述調(diào)用前處理包括檢查所述語句是否符合權限審計要求,對于不符合要求的拒絕 執(zhí)行;和/或,將執(zhí)行語句的內(nèi)容、選項和參數(shù)發(fā)送到審計服務器進行記錄,記錄執(zhí)行狀態(tài) 為"未執(zhí)行";所述調(diào)用后處理包括記錄語句的執(zhí)行結(jié)果,數(shù)據(jù)修改的程度;如果語句執(zhí)行失敗,更 新事務狀態(tài)為"執(zhí)行失敗";否則如果語句的類型是匿L,則更新事務狀態(tài)為"已執(zhí)行"或"已 提交";如果語句的類型是DDL或DCL,則更新事務狀態(tài)為"已提交",并把該次會話內(nèi)事務狀 態(tài)為"已執(zhí)行"的語句全部修改為"已提交"。
8. 根據(jù)權利要求3所述的獲取數(shù)據(jù)庫訪問過程的方法,其特征在于,若所述調(diào)用信息 屬于查詢結(jié)果數(shù)據(jù)的調(diào)用,則所述對所述截獲到的調(diào)用信息進行處理包括有選擇的記錄查詢的結(jié)果數(shù)據(jù),所述結(jié)果數(shù)據(jù)包括轉(zhuǎn)換后的結(jié)果數(shù)據(jù)。
9. 根據(jù)權利要求3所述的獲取數(shù)據(jù)庫訪問過程的方法,其特征在于,若所述調(diào)用信息 屬于事務控制的調(diào)用,則所述對所述截獲到的調(diào)用信息進行處理包括記錄各種語句的事務狀態(tài),執(zhí)行時按照連接當時的事務設定發(fā)送,如果不是自動提交 的,則設置為"已執(zhí)行";如果執(zhí)行ROLLBACK語句,則將審計服務器的記錄中連接"已執(zhí)行"狀態(tài)的語句執(zhí)行全 部修改為"已回滾"事務狀態(tài);如果執(zhí)行COMMIT語句,則將審計服務器的記錄中連接"已執(zhí)行"狀態(tài)的語句執(zhí)行全部 修改為"已提交"事務狀態(tài)。
10. 根據(jù)權利要求1所述的獲取數(shù)據(jù)庫訪問過程的方法,其特征在于,所述將與所述調(diào) 用信息對應的結(jié)果返回給應用程序包括對所述與所述調(diào)用信息對應的結(jié)果進行分析、和/或記錄、和/或修改。
11. 一種獲取數(shù)據(jù)庫訪問過程的裝置,其特征在于,包括 截獲單元,用于截獲應用程序?qū)?shù)據(jù)庫客戶端庫的調(diào)用信息; 處理單元,用于對所述截獲單元截獲到的調(diào)用信息進行處理; 反饋單元,用于將與所述調(diào)用信息對應的結(jié)果返回給應用程序。
12. 根據(jù)權利要求11所述的獲取數(shù)據(jù)庫訪問過程的裝置,其特征在于,所述截獲單元 具體用于修改數(shù)據(jù)庫客戶端庫DCL的名字和/或位置,將審計代理庫APL替換為數(shù)據(jù)庫客 戶端庫DCL,使應用程序APP主動加載審計代理庫APL,審計代理庫APL再加載數(shù)據(jù)庫客戶 端庫DCL;或者用于修改數(shù)據(jù)庫客戶端庫DCL以及相關函數(shù)的入口,使應用程序APP指向?qū)徲嫶韼?APL ;或者用于修改應用程序APP,將對數(shù)據(jù)庫客戶端庫DCL函數(shù)的調(diào)用重定向到審計代理庫 APL ;或者用于在應用程序APP運行時,動態(tài)注入審計代理庫APL。
13. 根據(jù)權利要求11所述的獲取數(shù)據(jù)庫訪問過程的裝置,其特征在于,所述處理單元 具體用于對所述截獲到的調(diào)用信息進行分析、和/或記錄、和/或修改、和/或阻斷。
14. 根據(jù)權利要求11所述的獲取數(shù)據(jù)庫訪問過程的裝置,其特征在于,所述反饋單元 具體用于對所述與所述調(diào)用信息對應的結(jié)果進行分析、和/或記錄、和/或修改。
15. 根據(jù)權利要求10至14中任意一項所述的獲取數(shù)據(jù)庫訪問過程的裝置,其特征在 于,所述裝置設置在客戶端內(nèi),介于應用程序與數(shù)據(jù)庫客戶端庫之間。
16. —種獲取數(shù)據(jù)庫訪問過程的系統(tǒng),其特征在于,包括如權利要求11至15中任意一 項所述的獲取數(shù)據(jù)庫訪問過程的裝置。
全文摘要
本發(fā)明公開了一種獲取數(shù)據(jù)庫訪問過程的方法、裝置及系統(tǒng)。所述方法包括截獲應用程序APP對數(shù)據(jù)庫客戶端庫DCL的調(diào)用信息;對所述截獲到的調(diào)用信息進行處理;將與所述調(diào)用信息對應的結(jié)果返回給應用程序。本發(fā)明在程序調(diào)用過程實現(xiàn)數(shù)據(jù)庫訪問過程的獲取,從而實現(xiàn)數(shù)據(jù)庫審計和權限的控制。
文檔編號G06F17/30GK101727475SQ20091017908
公開日2010年6月9日 申請日期2009年10月12日 優(yōu)先權日2009年10月12日
發(fā)明者吳強, 施桂琳 申請人:奇智(上海)信息科技有限公司