一種用于數(shù)據(jù)庫審計系統(tǒng)的sql語句解析方法和系統(tǒng)的制作方法
【專利摘要】本發(fā)明提供了一種用于數(shù)據(jù)審計系統(tǒng)的SQL語句解析方法和系統(tǒng)。所述方法包括:接收輸入的SQL語句;識別SQL語句中的詞、符號和序列表示中的至少一者;將識別出的詞、符號和序列表示中的至少一者與預定的語法規(guī)則進行比較,當識別出的詞、符號和序列表示中的至少一者與預定的語法規(guī)則中的一個語法規(guī)則匹配時,則根據(jù)所述預定的語法規(guī)則中的一個語法規(guī)則確定所述SQL語句的操作類型、操作字段和表名中的至少一者;當識別出的詞、符號和/或序列表示與預定的語法規(guī)則不匹配時,不對SQL語句進行語義解析。利用該方法和系統(tǒng),能夠準確識別SQL語句操作類型、操作的數(shù)據(jù)庫表名、列名等對象信息,并且與正則匹配方式相比,不需要編寫匹配規(guī)則,識別效率更高。
【專利說明】—種用于數(shù)據(jù)庫審計系統(tǒng)的SQL語句解析方法和系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種用于數(shù)據(jù)庫審計系統(tǒng)的SQL語句解析方法和系統(tǒng)。
【背景技術(shù)】
[0002]數(shù)據(jù)庫審計產(chǎn)品近年來成為網(wǎng)絡安全行業(yè)研究熱點,數(shù)據(jù)庫審計產(chǎn)品通過旁路抓取數(shù)據(jù)庫訪問數(shù)據(jù)包,對其中的SQL語句進行提取和記錄。但是各種數(shù)據(jù)庫網(wǎng)絡協(xié)議中只傳輸SQL語句,并不傳輸SQL語句的相關(guān)操作信息,如SQL操作的數(shù)據(jù)庫對象名、SQL操作類型等信息。這就造成數(shù)據(jù)庫審計產(chǎn)品只能記錄SQL語句,不能準確記錄SQL操作的對象、操作類型等。
[0003]一些數(shù)據(jù)庫審計產(chǎn)品通過正則匹配方法識別SQL語句的操作類型和操作的對象,但是這種正則匹配方式只能進行查找操作和分析簡單的SQL語句,如果SQL語句復雜度較高,那么正則方法不能實現(xiàn)SQL語句的解析。并且,采用正則匹配方式時,必須要編寫正則匹配規(guī)則,識別效率不太高。
【發(fā)明內(nèi)容】
[0004]針對現(xiàn)有技術(shù)中存在的上述問題,本發(fā)明提供了一種用于數(shù)據(jù)審計系統(tǒng)的SQL語句解析方法,用于對SQL語句的含義進行準確地分析,從而用于數(shù)據(jù)庫審計和后續(xù)的分析。
[0005]本發(fā)明提供了一種用于數(shù)據(jù)審計系統(tǒng)的SQL語句解析方法,其中,該方法包括:
[0006]a)接收輸入的SQL語句;
[0007]b)識別SQL語句中的詞、符號和序列表示的組合;
[0008]c)將識別出的詞、符號和序列表示的組合與預定的語法規(guī)則中的各個語法規(guī)則進行比較,當識別出的詞、符號和序列表示的組合與預定的語法規(guī)則中的一個語法規(guī)則匹配時,則根據(jù)所述預定的語法規(guī)則中匹配的語法規(guī)則確定所述SQL語句的操作類型、操作字段和表名中的至少一者;當識別出的詞、符號和序列表示的組合與預定的語法規(guī)則中的任何語法規(guī)則都不匹配時,不對SQL語句進行語義解析。
[0009]同時,本發(fā)明還提供了一種用于數(shù)據(jù)審計系統(tǒng)的SQL語句解析系統(tǒng),其中,該系統(tǒng)包括:
[0010]接收模塊,用于接收輸入的SQL語句;
[0011]識別模塊,用于識別SQL語句中的詞、符號和序列表示的組合;
[0012]解析模塊,用于將識別出的詞、符號和序列表示的組合與預定的語法規(guī)則中的各個語法規(guī)則進行比較,當識別出的詞、符號和序列表示的組合與預定的語法規(guī)則中的一個語法規(guī)則匹配時,則根據(jù)所述預定的語法規(guī)則中匹配的語法規(guī)則確定所述SQL語句的操作類型、操作字段和表名中的至少一者;當識別出的詞、符號和序列表示的組合與預定的語法規(guī)則中的任何語法規(guī)則都不匹配時,不對SQL語句進行語義解析。
[0013]利用本發(fā)明提供的用于數(shù)據(jù)審計系統(tǒng)的SQL語句解析方法和系統(tǒng),能夠準確識別SQL語句操作類型、操作的數(shù)據(jù)庫表名、列名等對象信息,并且與正則匹配方式相比,不需要編寫匹配規(guī)則,識別效率更高。
【專利附圖】
【附圖說明】
[0014]圖1是根據(jù)本發(fā)明的用于數(shù)據(jù)審計系統(tǒng)的SQL語句解析方法的流程圖;
[0015]圖2是根據(jù)本發(fā)明的用于數(shù)據(jù)審計系統(tǒng)的SQL語句解析系統(tǒng)的示意結(jié)構(gòu)圖。
【具體實施方式】
[0016]下面結(jié)合附圖,詳細描述本發(fā)明的【具體實施方式】。
[0017]圖1是根據(jù)本發(fā)明的用于數(shù)據(jù)審計系統(tǒng)的SQL語句解析方法的流程圖。參考圖1,本發(fā)明提供了一種用于數(shù)據(jù)審計系統(tǒng)的SQL語句解析方法,其中,該方法包括:
[0018]a)接收輸入的SQL語句;
[0019]b)識別SQL語句中的詞、符號和序列表示的組合;
[0020]c)將識別出的詞、符號和序列表示的組合與預定的語法規(guī)則中的各個語法規(guī)則進行比較,當識別出的詞、符號和序列表示的組合與預定的語法規(guī)則中的一個語法規(guī)則匹配時,則根據(jù)所述預定的語法規(guī)則中匹配的語法規(guī)則確定所述SQL語句的操作類型、操作字段和表名中的至少一者;當識別出的詞、符號和序列表示的組合與預定的語法規(guī)則中的任何語法規(guī)則都不匹配時,不對SQL語句進行語義解析。
[0021]在步驟a)中,首先接收輸入的SQL語句。
[0022]在步驟b)中,對SQL語句進行識別。優(yōu)選的,可以通過對所述SQL語句中的字符進行逐個掃描,來識別SQL語句中的詞、符號和序列表示的組合。所述詞例如“select”等有實際意義的詞,所述符號例如“ + ”和等符號,所述序列表示諸如“from”等附在表示具體操作的詞語之后的沒有實際意義的詞。
[0023]在步驟c)中,將識別出的詞、符號和序列表示的組合與預定的語法規(guī)則中的各個語法規(guī)則進行比較,以判斷識別出的詞、符號和序列表示的組合是否與預定的語法規(guī)則中的一個語法規(guī)則匹配。
[0024]通常,在計算機系統(tǒng)中,預定的語法規(guī)則以機器語言形式表示,例如以二進制形式表示。在這種情況下,所述步驟b)還將識別出的詞、符號和序列表示的組合轉(zhuǎn)化為機器語言標記,例如轉(zhuǎn)化成二進制形式表示的標記。從而,在所述步驟c)中,通過將所述機器語言標記與機器語言形式的預定的語法規(guī)則中的各個語法規(guī)則進行比較,來判斷識別出的詞、符號和序列表示的組合是否與預定的語法規(guī)則中的一個語法規(guī)則匹配。
[0025]如果匹配,則根據(jù)所述預定的語法規(guī)則中的一個語法規(guī)則確定所述SQL語句的操作類型、操作字段和表名中的至少一者;如果不匹配,不對SQL語句進行語義解析。
[0026]優(yōu)選的,所述機器語言形式的預定的語法規(guī)則可以以語法分析樹形式存儲。語法分析樹的各級分支存儲著各個預定的語法??梢酝ㄟ^將識別出的詞、符號和序列表示的組合與語法分析樹的各級分支上的各個預定語法規(guī)則進行比較,來尋找匹配的預定語法規(guī)則。
[0027]根據(jù)一種優(yōu)選實施方式,在所述步驟C),當識別出的詞、符號和序列表示的組合與預定的語法規(guī)則中的一個語法規(guī)則匹配時,輸出所確定的所述SQL語句的操作類型、操作字段和表名中的至少一者,例如可以通過顯示器輸出所述SQL語句的操作類型、操作字段和表名以供用戶進行參考分析。
[0028]識別出的詞、符號和序列表示的組合與預定的語法規(guī)則不匹配,有可能是因為SQL語句還沒有輸入完整,用戶可能還會繼續(xù)進行輸入SQL語句。因而,根據(jù)另一種優(yōu)選實施方式,當識別出的詞、符號和序列表示的組合與預定的語法規(guī)則不匹配時,返回到步驟a),等待繼續(xù)接收輸入的SQL語句,以將后續(xù)接收的SQL語句結(jié)合在一起進行解析,這樣,就可以接收到完整的SQL語句并進行解析。如果在大于等于預定的時間期間內(nèi)沒有接收輸入的SQL語句,且識別出的詞、符號和序列表示的組合與預定的語法規(guī)則中的任何語法規(guī)則都不匹配,則表示SQL語句解析失敗,此時可以將表示解析失敗的信息作為解析結(jié)果輸出。
[0029]下面,以SQL語句“select A from TABLE”為例,來進一步描述本發(fā)明提供的用于數(shù)據(jù)審計系統(tǒng)的SQL語句解析方法的流程。首先,接收到的SQL語句“select A fromTABLE”。對該SQL語句中的字符逐個掃描,識別出詞“ select ”、詞“A”、序列表示“from”和詞“TABLE”??梢詫⑦@些詞和序列表示轉(zhuǎn)化成機器語言標記,諸如二進制形式表示的標記。然后,將轉(zhuǎn)換得到的機器語言標記與預先存儲在存儲器中的機器語言形式(例如二進制形式)的預定的語法規(guī)則進行比較。此時,可以在預定的語法規(guī)則中找到一個語法規(guī)則“select【列】from【表格】”與該機器語言標記相匹配,然后根據(jù)匹配的語法規(guī)則“select【列】from【表格】”,可以確定該SQL語句的操作類型為“select”,即刪除操作,操作字段為“A”,表格名為“TABLE”。這樣,就解析得到了該SQL語句的操作類型、操作字段和表名??梢詫⒔馕鼋Y(jié)果通過顯示器等輸出裝置輸出,以便用戶進行查閱分析等。
[0030]同時,本發(fā)明還提供了一種用于數(shù)據(jù)審計系統(tǒng)的SQL語句解析系統(tǒng),該系統(tǒng)包括:
[0031]接收模塊,用于接收輸入的SQL語句;
[0032]識別模塊,用于識別SQL語句中的詞、符號和序列表示的組合;
[0033]解析模塊,用于將識別出的詞、符號和序列表示的組合與預定的語法規(guī)則中的各個語法規(guī)則進行比較,當識別出 的詞、符號和序列表示的組合與預定的語法規(guī)則中的一個語法規(guī)則匹配時,則根據(jù)所述預定的語法規(guī)則中匹配的語法規(guī)則確定所述SQL語句的操作類型、操作字段和表名中的至少一者;當識別出的詞、符號和序列表示的組合與預定的語法規(guī)則中的任何語法規(guī)則都不匹配時,不對SQL語句進行語義解析。
[0034]其中,所述識別模塊用于對SQL語句進行識別。優(yōu)選的,可以通過對所述SQL語句中的字符進行逐個掃描,來識別SQL語句中的詞、符號和序列表示的組合。所述詞例如“select”等有實際意義的詞,所述符號例如“ + ”和等符號,所述序列表示諸如“from”等附在表示具體操作的詞語之后的沒有實際意義的詞。
[0035]所述解析模塊用于將識別出的詞、符號和序列表示的組合與預定的語法規(guī)則中的各個語法規(guī)則進行比較,以判斷識別出的詞、符號和序列表示的組合是否與預定的語法規(guī)則中的一個語法規(guī)則匹配。
[0036]通常,在計算機系統(tǒng)中,預定的語法規(guī)則以機器語言形式表示,例如以二進制形式表示。在這種情況下,所述識別模塊還用于將識別出的詞、符號和序列表示的組合轉(zhuǎn)化為機器語言標記,例如轉(zhuǎn)化成二進制形式表示的標記。從而,所述解析模塊通過將所述機器語言標記與機器語言形式的預定的語法規(guī)則進行比較,來判斷識別出的詞、符號和序列表示的組合是否與預定的語法規(guī)則中的一個語法規(guī)則匹配。
[0037]如果匹配,所述解析模塊則根據(jù)所述預定的語法規(guī)則中匹配的語法規(guī)則確定所述SQL語句的操作類型、操作字段和表名中的至少一者;如果不匹配,所述解析模塊則不對SQL語句進行語義解析。
[0038]優(yōu)選的,所述機器語言形式的預定的語法規(guī)則可以以語法分析樹形式存儲。語法分析樹的各級分支存儲著各個預定的語法。所述解析模塊可以通過將識別出的詞、符號和序列表示的組合與語法分析樹的各級分支上的各個預定語法規(guī)則進行比較,來尋找匹配的預定語法規(guī)則。
[0039]根據(jù)一種優(yōu)選實施方式,當識別出的詞、符號和序列表示的組合與預定的語法規(guī)則中的一個語法規(guī)則匹配時,所述解析模塊輸出所確定的所述SQL語句的操作類型、操作字段和表名中的至少一者,例如可以通過顯示器輸出所述SQL語句的操作類型、操作字段和表名以供用戶進行參考分析。
[0040]識別出的詞、符號和序列表示的組合與預定的語法規(guī)則中的任何語法都不匹配,有可能是因為SQL語句還沒有輸入完整,用戶可能還會繼續(xù)進行輸入SQL語句。因而,根據(jù)另一種優(yōu)選實施方式,當所述解析模塊識別出的詞、符號和序列表示的組合與預定的語法規(guī)則中的任何語法規(guī)則都不匹配時,等待所述接收模塊繼續(xù)接收輸入的SQL語句以將后續(xù)接收的SQL語句結(jié)合在一起進行解析,這樣,就可以接收到完整的SQL語句并進行解析。如果在大于等于預定的時間期間內(nèi),所述接收模塊沒有接收輸入的SQL語句,且所述解析模塊識別出的詞、符號和/或序列表示與預定的語法規(guī)則中的任何語法規(guī)則仍然不匹配,則表示SQL語句解析失敗,此時所述解析模塊可以將表示解析失敗的信息作為解析結(jié)果輸出。
[0041]利用本發(fā)明提供的用于數(shù)據(jù)審計系統(tǒng)的SQL語句解析方法和系統(tǒng),能夠準確識別SQL語句操作類型、操作的數(shù)據(jù)庫表名、列名等對象信息,并且與正則匹配方式相比,不需要編寫匹配規(guī)則,識別效率更高。
【權(quán)利要求】
1.一種用于數(shù)據(jù)審計系統(tǒng)的SQL語句解析方法,其中,該方法包括: a)接收輸入的SQL語句; b)識別SQL語句中的詞、符號和序列表示的組合; c)將識別出的詞、符號和序列表示的組合與預定的語法規(guī)則中的各個語法規(guī)則進行比較,當識別出的詞、符號和序列表示的組合與預定的語法規(guī)則中的一個語法規(guī)則匹配時,則根據(jù)所述預定的語法規(guī)則中匹配的語法規(guī)則確定所述SQL語句的操作類型、操作字段和表名中的至少一者;當識別出的詞、符號和序列表示的組合與預定的語法規(guī)則中的任何語法規(guī)則都不匹配時,不對SQL語句進行語義解析。
2.根據(jù)權(quán)利要求1所述的用于數(shù)據(jù)審計系統(tǒng)的SQL語句解析方法,其中,所述步驟b)包括: 對所述SQL語句中的字符進行逐個掃描,以識別SQL語句中的詞、符號和序列表示的組合 o
3.根據(jù)權(quán)利要求1所述的用于數(shù)據(jù)審計系統(tǒng)的SQL語句解析方法,其中, 所述步驟b)包括:將識別出的詞、符號和序列表示的組合轉(zhuǎn)化為機器語言標記; 所述步驟c)包括:將所述機器語言標記與機器語言形式的預定的語法規(guī)則中的各個語法規(guī)則進行比較。
4.根據(jù)權(quán)利要求3所述的用于數(shù)據(jù)審計系統(tǒng)的SQL語句解析方法,其中, 所述機器語言形式的預定的語法規(guī)則以語法分析樹形式存儲。
5.根據(jù)權(quán)利要求1所述的用于數(shù)據(jù)審計系統(tǒng)的SQL語句解析方法,其中, 所述步驟c)還包括:當識別出的詞、符號和序列表示的組合與預定的語法規(guī)則中的一個語法規(guī)則匹配時,輸出所確定的所述SQL語句的操作類型、操作字段和表名中的至少一者。
6.根據(jù)權(quán)利要求1所述的用于數(shù)據(jù)審計系統(tǒng)的SQL語句解析方法,其中, 所述步驟c)還包括:當識別出的詞、符號和序列表示的組合與預定的語法規(guī)則中的任何語法規(guī)則都不匹配時,返回到步驟a)等待繼續(xù)接收輸入的SQL語句以將后續(xù)接收的SQL語句結(jié)合在一起進行解析,直到在大于等于預定的時間期間內(nèi)沒有接收輸入的SQL語句為止,并將表示解析失敗的信息作為解析結(jié)果輸出。
7.一種用于數(shù)據(jù)審計系統(tǒng)的SQL語句解析系統(tǒng),其中,該系統(tǒng)包括: 接收模塊,用于接收輸入的SQL語句; 識別模塊,用于識別SQL語句中的詞、符號和序列表示的組合; 解析模塊,用于將識別出的詞、符號和序列表示的組合與預定的語法規(guī)則中的各個語法規(guī)則進行比較,當識別出的詞、符號和序列表示的組合與預定的語法規(guī)則中的一個語法規(guī)則匹配時,則根據(jù)所述預定的語法規(guī)則中匹配的語法規(guī)則確定所述SQL語句的操作類型、操作字段和表名中的至少一者;當識別出的詞、符號和序列表示的組合與預定的語法規(guī)則中的任何語法規(guī)則都不匹配時,不對SQL語句進行語義解析。
8.根據(jù)權(quán)利要求7所述的用于數(shù)據(jù)審計系統(tǒng)的SQL語句解析系統(tǒng),其中, 所述識別模塊通過所述SQL語句中的字符進行逐個掃描,以識別SQL語句中的詞、符號和序列表示的組合。
9.根據(jù)權(quán)利要求7所述的用于數(shù)據(jù)審計系統(tǒng)的SQL語句解析系統(tǒng),其中,所述識別模塊還用于將識別出的詞、符號和序列表示的組合轉(zhuǎn)化為機器語言標記;所述解析模塊還用于將所述機器語言標記與機器語言形式的預定的語法規(guī)則中的各個語法規(guī)則進行比較。
10.根據(jù)權(quán)利要求9所述的用于數(shù)據(jù)審計系統(tǒng)的SQL語句解析系統(tǒng),其中, 所述機器語言形式的預定的語法規(guī)則以語法分析樹形式存儲。
11.根據(jù)權(quán)利要求7所述的用于數(shù)據(jù)審計系統(tǒng)的SQL語句解析系統(tǒng),其中, 所述解析模塊當識別出的詞、符號和序列表示的組合與預定的語法規(guī)則中的一個語法規(guī)則匹配時,輸出所確定的所述SQL語句的操作類型、操作字段和表名中的至少一者。
12.根據(jù)權(quán)利要求7所述的用于數(shù)據(jù)審計系統(tǒng)的SQL語句解析系統(tǒng),其中, 所述解析模塊當識別出的詞、符號和序列表示的組合與預定的語法規(guī)則中的任何語法規(guī)則都不匹配時,等待所述接收模塊繼續(xù)接收輸入的SQL語句以將后續(xù)接收的SQL語句結(jié)合在一起進行解析,直到所述接收模塊在大于等于預定的時間期間內(nèi)沒有接收輸入的SQL語句為止,所述解析模塊`將表示解析失敗的信息作為解析結(jié)果輸出。
【文檔編號】G06F17/30GK103778185SQ201310742814
【公開日】2014年5月7日 申請日期:2013年12月27日 優(yōu)先權(quán)日:2013年12月27日
【發(fā)明者】張鳳羽 申請人:北京天融信軟件有限公司, 北京天融信網(wǎng)絡安全技術(shù)有限公司, 北京天融信科技有限公司