Sql語句處理方法和系統(tǒng)的制作方法
【專利摘要】本發(fā)明涉及一種SQL語句處理方法和系統(tǒng),該SQL語句處理方法,包括以下步驟:獲取原始SQL語句;濾除原始SQL語句中的冗余字段,以獲取濾除冗余字段的第一SQL語句;替換第一SQL語句中的變量值,以獲取第二SQL語句;對第二SQL語句進(jìn)行結(jié)構(gòu)化處理,獲取結(jié)構(gòu)化SQL語句;對結(jié)構(gòu)化SQL語句進(jìn)行操作關(guān)聯(lián)處理,獲取所述原始SQL語句對應(yīng)的SQL語句原型。上述的SQL語句處理方法和系統(tǒng),不僅方便用戶查閱,而且減少了審計(jì)的數(shù)據(jù)量。
【專利說明】
SQL語句處理方法和系統(tǒng)
技術(shù)領(lǐng)域
[0001]本發(fā)明涉及數(shù)據(jù)庫技術(shù)領(lǐng)域,特別是涉及一種SQL語句處理方法和系統(tǒng)。
【背景技術(shù)】
[0002]目前當(dāng)前常見的數(shù)據(jù)庫系統(tǒng)主要是關(guān)系型數(shù)據(jù)庫,數(shù)據(jù)庫審計(jì)產(chǎn)品在對數(shù)據(jù)庫系統(tǒng)進(jìn)行審計(jì)時(shí),通常使用SQL語句與數(shù)據(jù)庫系統(tǒng)進(jìn)行交互,因此審計(jì)的數(shù)據(jù)一般來自這些關(guān)系數(shù)據(jù)庫的SQL語句。
[0003]但是直接審計(jì)SQL語句時(shí),各種復(fù)雜的SQL命令交織在數(shù)據(jù)庫系統(tǒng)的各個(gè)部分,不利于審計(jì)查看。另外,每個(gè)SQL語句都存在一些例如空格、注釋等的冗余字段。而且每個(gè)SQL語句的常數(shù)參數(shù)、條件語句的值、表名等信息均不相同,因此導(dǎo)致審計(jì)數(shù)據(jù)量巨大,處理海量數(shù)據(jù)對硬件要求較高。
【發(fā)明內(nèi)容】
[0004]基于此,有必要針對上述技術(shù)問題,提供一種SQL語句處理方法和系統(tǒng),不僅方便用戶查閱,而且減少了審計(jì)的數(shù)據(jù)量。
[0005]—種SQL語句處理方法,包括以下步驟:
[0006]獲取原始SQL語句;
[0007]濾除所述原始SQL語句中的冗余字段,以獲取濾除冗余字段的第一SQL語句;
[0008]替換所述第一SQL語句中的變量值,以獲取第二 SQL語句;
[0009]對所述第二SQL語句進(jìn)行結(jié)構(gòu)化處理,獲取結(jié)構(gòu)化SQL語句;
[0010]對所述結(jié)構(gòu)化SQL語句進(jìn)行操作關(guān)聯(lián)處理,獲取所述原始SQL語句對應(yīng)的SQL語句原型。
[0011]在其中一個(gè)實(shí)施例中,在所述獲取原始SQL語句的步驟之后,還包括:
[0012]對所述原始SQL語句進(jìn)行詞法語法分析,得到基于SQL語法元素和SQL語法字段的SQL特征庫,其中,所述SQL語法元素包括所述冗余字段和所述變量值。
[0013]在其中一個(gè)實(shí)施例中,所述對所述第二SQL語句進(jìn)行結(jié)構(gòu)化處理,獲取結(jié)構(gòu)化SQL語句的步驟包括:
[0014]提取所述第二SQL語句中的SQL語法字段作為結(jié)構(gòu)框架,獲取相同結(jié)構(gòu)框架下的所述結(jié)構(gòu)化SQL語句,其中,所述SQL語法字段包括命令、表名、條件。
[0015]在其中一個(gè)實(shí)施例中,所述對所述結(jié)構(gòu)化SQL語句進(jìn)行操作關(guān)聯(lián)處理的步驟包括:將所述結(jié)構(gòu)化SQL語句中的相似的SQL語法元素進(jìn)行歸類合并。
[0016]在其中一個(gè)實(shí)施例中,還包括:建立所述冗余字段、所述變量值以及所述SQL語句原型的對應(yīng)關(guān)系;
[0017]將不同的原始SQL語句對應(yīng)的SQL語句原型統(tǒng)一存儲,根據(jù)所述對應(yīng)關(guān)系將所述同一SQL語句原型對應(yīng)的不同的變化部分分別存儲,其中,所述變化部分包括變量值和冗余字段。
[0018]一種SQL語句處理系統(tǒng),包括:
[0019]原始SQL語句獲取模塊,用于獲取原始SQL語句;
[0020]第一SQL語句獲取模塊,用于濾除所述原始SQL語句中的冗余字段,以獲取濾除冗余字段的第一 SQL語句;
[0021]第二SQL語句獲取模塊,用于替換所述第一 SQL語句中的變量值,以獲取第二 SQL語句;
[0022]結(jié)構(gòu)化SQL語句獲取模塊,用于對所述第二SQL語句進(jìn)行結(jié)構(gòu)化處理,獲取結(jié)構(gòu)化SQL語句;
[0023]SQL語句原型獲取模塊,用于對所述結(jié)構(gòu)化SQL語句進(jìn)行操作關(guān)聯(lián)處理,獲取所述原始SQL語句對應(yīng)的SQL語句原型。
[0024]在其中一個(gè)實(shí)施例中,還包括:SQL語句詞法語法分析模塊,用于對所述原始SQL語句進(jìn)行詞法語法分析,得到基于SQL語法元素和SQL語法字段的SQL特征庫,其中,所述SQL語法元素包括所述冗余字段和所述變量值。
[0025]在其中一個(gè)實(shí)施例中,結(jié)構(gòu)化SQL語句獲取模塊還用于:提取所述第二SQL語句中的SQL語法字段作為結(jié)構(gòu)框架,獲取相同結(jié)構(gòu)框架下的所述結(jié)構(gòu)化SQL語句,其中,所述SQL語法字段包括命令、表名、條件。
[0026]在其中一個(gè)實(shí)施例中,SQL語句原型獲取模塊還用于:將所述結(jié)構(gòu)化SQL語句中的相似SQL語法元素進(jìn)行歸類合并。
[0027]在其中一個(gè)實(shí)施例中,還包括:存儲模塊,用于建立所述冗余字段、所述變量值以及所述SQL語句原型的對應(yīng)關(guān)系;將不同的原始SQL語句對應(yīng)的SQL語句原型統(tǒng)一存儲,根據(jù)所述對應(yīng)關(guān)系將所述同一SQL語句原型對應(yīng)的不同的變化部分分別存儲,其中,所述變化部分包括變量值和冗余字段。
[0028]上述實(shí)施例的SQL語句處理方法和系統(tǒng),通過對原始SQL語句進(jìn)行濾除冗余字段、替換變量值、結(jié)構(gòu)化以及操作關(guān)聯(lián)處理后,回溯出原始SQL語句對應(yīng)的SQL語句原型,審計(jì)時(shí)用戶只需直接查看SQL語句原型即可,因此不僅方便用戶查閱,而且減少了審計(jì)的數(shù)據(jù)量。
【附圖說明】
[0029]圖1為一個(gè)實(shí)施例的數(shù)據(jù)庫系統(tǒng)運(yùn)行框架示意圖;
[0030]圖2為一個(gè)實(shí)施例的SQL語句處理方法的流程圖;
[0031 ]圖3為另一個(gè)實(shí)施例的SQL語句處理方法的流程圖;
[0032]圖4為一個(gè)實(shí)施例的SQL語句處理系統(tǒng)的結(jié)構(gòu)框圖;
[0033]圖5為另一個(gè)實(shí)施例的SQL語句處理系統(tǒng)的結(jié)構(gòu)框圖。
【具體實(shí)施方式】
[0034]通常數(shù)據(jù)庫系統(tǒng)的運(yùn)行框架,如圖1所示,Web服務(wù)器通過一個(gè)核心交換機(jī)(或多個(gè)交換機(jī))訪問數(shù)據(jù)庫(Databas^DB)t3Web服務(wù)器對DB進(jìn)行訪問和操作完成對各種信息的增、刪、改、查等的基礎(chǔ)功能。管理員通過運(yùn)維區(qū)域的運(yùn)維服務(wù)器對數(shù)據(jù)庫的訪問和維護(hù)操作,例如數(shù)據(jù)庫的例行巡檢、必要的管理運(yùn)維等。數(shù)據(jù)庫審計(jì)裝置對用戶訪問數(shù)據(jù)庫的海量SQL語句進(jìn)行記錄、分析和匯報(bào)。
[0035]—般情況下,Web服務(wù)器對數(shù)據(jù)庫的訪問和/或操作請求是由程序產(chǎn)生的,這些訪問和/或操作請求通過各種中間件等來訪問數(shù)據(jù)庫。例如一個(gè)網(wǎng)站,要判斷一個(gè)用戶登陸是否成功,那么可能會設(shè)計(jì)一個(gè)用戶的表,存放在數(shù)據(jù)庫中。如果需要查詢的時(shí)候,會將用戶名、密碼的hash值組裝成一條select查詢語句,到數(shù)據(jù)庫中去查詢(實(shí)現(xiàn)方法很多,這里只是對某個(gè)系統(tǒng)舉個(gè)例)。所有對用戶登陸是否成功的判斷,都可以歸納為一個(gè)SQL語句原型,例如:select*from user where user_name=,,user”and user_passwd=,,5f7d4c3a”。其中user_name字段和user_passwd的值會隨著不同用戶而變化。
[0036]類似的,其他的功能模塊也會有這樣的特性,例如某個(gè)報(bào)表翻頁的查詢語句可以為:select top m*from aclog.A2015121lwhere user_id not in(select top n*fromaclog.U20151211 order by traffic_down_f1w desc)order by user_total desc,其中一些具體表示用戶頁數(shù)或者每頁數(shù)量的數(shù)值會有所不同,但程序設(shè)計(jì)一般是根據(jù)這個(gè)SQL語句原型來構(gòu)建的。
[0037]在一個(gè)實(shí)施例中,如圖2所示,提出了一種SQL語句處理方法,該方法包括以下步驟:
[0038]步驟102,獲取原始SQL語句。
[0039]在本實(shí)施例中,數(shù)據(jù)庫審計(jì)裝置從數(shù)據(jù)庫服務(wù)器中獲取流量數(shù)據(jù),并從這些流量數(shù)據(jù)中提取用于處理的原始SQL語句。
[0040]步驟104,濾除原始SQL語句中的冗余字段,以獲取第一 SQL語句。
[0041 ]在本實(shí)施例中,冗余字段是指原始SQL語句中的無用成分,這些冗余字段包括無用的空格、Tab、注釋等。濾除原始SQL語句中的無用成分(冗余字段)后,將得到第一 SQL語句。
[0042 ]例如,可以使用REPLACE函數(shù)批量替換原始SQL語句中的冗余字段。
[0043]步驟106,替換第一 SQL語句中的變量值,獲取第二 SQL語句。
[0044]變量值包括第一SQL語句中會隨不同的操作或訪問而發(fā)生變化的變量。例如,判斷條件、參數(shù)等。這些變量值可以為字符串、數(shù)值、時(shí)間日期中的至少一種。
[0045]在一個(gè)實(shí)施例中,可以采用占位符替換第一SQL語句中的變量值,以得到不包含變量值的第二SQL語句。在本實(shí)施例中,占位符可以為表格抽象的任意值,也可以是固定值。
[0046]例如,查詢語句:SELECTTOP 100 desc,sum(val)from aclog.U20151112 wheregroup_id=,,5c2b97c6,,and user_id! = “35cc2f9b,,order by total_flow desc。其中,數(shù)值“100”,group_id字段和user_id字段的值會發(fā)生變化。采用占位符(例如#)替換數(shù)值“100”,group_id字段和user_id字段后,得到的第二SQL語句為:SELECT T0P#desc,sum(val)from aclog.U20151112where group_id=,,#,,and user_id! = “#,’order by total_flow desc。
[0047]步驟108,對第二SQL語句進(jìn)行結(jié)構(gòu)化處理,獲取結(jié)構(gòu)化SQL語句。
[0048]將相同結(jié)構(gòu)框架下的第二SQL語句中的確定性字段提取出來,然后將這些確定性字段作為支撐性的結(jié)構(gòu)化框架。
[0049]在一個(gè)實(shí)施例中,可以根據(jù)數(shù)據(jù)操作類型劃分第二SQL語句的結(jié)構(gòu)框架。通常情況下,數(shù)據(jù)操作類型包括:查詢語句:select,DML(數(shù)據(jù)操作語句):insert ,update ,delete,merge等;DDL(數(shù)據(jù)定義語句):create ,alter,drop,truncate等;DCL(數(shù)據(jù)控制語句):revoke ,grant等;事務(wù)控制語句:commit,roolback,savepoint等。相同結(jié)構(gòu)框架是指同一數(shù)據(jù)操作類型的SQL語句。
[0050]在本實(shí)施例中,確定性字段包括命令、表名、條件等的確定的SQL語法元素。
[0051 ] 步驟110,對結(jié)構(gòu)化SQL語句進(jìn)行操作關(guān)聯(lián)處理,獲取原始SQL語句對應(yīng)的SQL語句原型。
[0052]在一個(gè)實(shí)施例中,操作關(guān)聯(lián)處理包括將具有相同邏輯的運(yùn)算,如函數(shù)等或者內(nèi)嵌代碼等進(jìn)行歸類合并處理。
[0053]根據(jù)預(yù)先建立的規(guī)則對上述實(shí)施例獲取的結(jié)構(gòu)化SQL語句進(jìn)行操作關(guān)聯(lián)處理后,便可得到原始SQL語句對應(yīng)的SQL語句原型。
[0054]上述實(shí)施例的SQL語句處理方法,通過對原始SQL語句進(jìn)行濾除冗余字段,替換變量值、結(jié)構(gòu)化以及操作關(guān)聯(lián)處理后,回溯出原始SQL語句對應(yīng)的SQL語句原型,用戶查看SQL語句原型便可顯示對應(yīng)的原始SQL語句,不僅方便用戶查閱,而且減少了審計(jì)的數(shù)據(jù)量。
[0055]進(jìn)一步地,對于從數(shù)據(jù)庫獲取的每一條SQL語句都經(jīng)過上述步驟102至步驟110的操作來簡化,從而了解某個(gè)用戶常見的SQL操作,如果發(fā)現(xiàn)了異常的訪問,便可及時(shí)采取相應(yīng)的措施處理。
[0056]在一個(gè)實(shí)施例中,如圖3所示,在獲取原始SQL語句的步驟之后,該方法還包括:
[0057]步驟112,對原始SQL語句進(jìn)行詞法語法分析,得到基于SQL語法元素和SQL語法字段的SQL特征庫,其中,SQL語法元素包括冗余字段和變量值。
[0058]基于SQL詞法語法分析,建立基于SQL語法元素和SQL語法字段的SQL特征庫,該SQL特征庫用于(I)詞法分析,經(jīng)過詞法分析,可得到如下的SQL語法元素:
[0059]冗余字段:包括空格、Tab、注釋等。注釋為插入到SQL語句或腳本中起解釋語句作用的文本。
[0060]標(biāo)識符:諸如表、視圖、列、數(shù)據(jù)庫和服務(wù)器等對象的名稱。
[0061]數(shù)據(jù)類型:定義數(shù)據(jù)對象(如列、變量和參數(shù))所包含的數(shù)據(jù)類型。
[0062]函數(shù):它可以有零個(gè)、一個(gè)或多個(gè)輸入值,并返回一個(gè)標(biāo)量值或者表格形式的值的集合。函數(shù)示例包括將多個(gè)值相加的SUM函數(shù)、確定兩個(gè)日期之間相差多少個(gè)時(shí)間單位的DATEDIFF函數(shù)等。
[0063]表達(dá)式:表達(dá)式的示例包括常量、返回單值的函數(shù)、列或變量的引用。
[0064]運(yùn)算符:與一個(gè)或多個(gè)簡單表達(dá)式一起使用構(gòu)造一個(gè)更為復(fù)雜的表達(dá)式。例如,將 (負(fù)號)運(yùn)算符和常量12組合在一起得到常量-12。
[0065]保留關(guān)鍵字:保留下來由SQLServe使用的詞。數(shù)據(jù)庫中的對象名不應(yīng)使用這些字詞。(2)語法分析,經(jīng)過語法分析,可得到的SQL語法字段包括SQL語句的語句結(jié)構(gòu),例如是單語句還是多語句,語句之間的結(jié)構(gòu)等。
[0066]基于上述實(shí)施例的SQL語句的詞法語法分析,得到基于SQL語法元素和SQL語句字段的SQL特征庫,該SQL語句的處理方法基于得到的SQL特征庫對原始SQL語句進(jìn)行一系列處理,提高了 SQL語句處理的效率和準(zhǔn)確率。
[0067]在一個(gè)實(shí)施例中,對第二SQL語句進(jìn)行結(jié)構(gòu)化處理,獲取結(jié)構(gòu)化SQL語句的步驟包括:
[0068]提取第二SQL語句中的SQL語法字段作為結(jié)構(gòu)框架,并獲取相同結(jié)構(gòu)框架下的結(jié)構(gòu)化SQL語句,其中,SQL語法字段包括命令、表名或者視圖名、條件。
[0069]經(jīng)過上述實(shí)施例的SQL語法分析獲取SQL語法字段后,提取出第二 SQL語句中的語法字段作為結(jié)構(gòu)框架,對相同結(jié)構(gòu)框架下的SQL語句進(jìn)行抽象識別,得到結(jié)構(gòu)化的SQL語句。
[0070]例如,第二SQL語句為查詢語句:SELECT TOPSdesc,sum(val ) f r omaclog.U20151112 where group」d=,,#,,and user_id! = “#,,order by total_flow desc,其中,表名U20151112是隨時(shí)間變化的,由于很多數(shù)據(jù)庫會按天周月小時(shí)等方式切割來優(yōu)化表的大小,因此,可以通過內(nèi)置庫以及學(xué)習(xí)算法用來識別這種表的優(yōu)化。識別出這種20151112后,對這部分進(jìn)行結(jié)構(gòu)化處理,即采用占位符替換變化的部分。例如,上述示例的第二SQL語句結(jié)構(gòu)化得到的結(jié)構(gòu)化SQL為:SELECT T0P#desc,sum(val)from aclog.U*wheregroup_id=,,#,,and user_id! = “#,’order by total_flow desc。
[0071]在一個(gè)實(shí)施例中,對結(jié)構(gòu)化SQL語句進(jìn)行操作關(guān)聯(lián)處理的步驟包括:將結(jié)構(gòu)化SQL語句中的相似的SQL語法元素進(jìn)行歸類合并。
[0072]在本實(shí)施例中,相似的SQL語法元素包括函數(shù)或者內(nèi)嵌代碼等。
[0073]例如,將結(jié)構(gòu)化SQL語句中的相似的SQL語法元素進(jìn)行歸類合并包括將相同字段的多個(gè)函數(shù)運(yùn)算進(jìn)行歸類合并?;蛘邔⑾嗤侄蔚亩鄠€(gè)內(nèi)嵌代碼段進(jìn)行歸類合并。例如,將SELECT T0P#desc , sum(val)from aclog.U*where group_id =,,#,,and user_id! = “#,,order by total_flow desc中的函數(shù)運(yùn)算進(jìn)行合并后得到的SQL語句原型為:SELECT TOP#desc,func<sum>(val)from aclog.U*where group_id=,,#,,and user_id! = “#,,order bytotal_f low func〈desc,asc>。其中,func表示將sum(val)操作以及條件中的desc操作表示為函數(shù)(操作),尖括號里面的內(nèi)容表示函數(shù)的無序集合。
[0074]通過上述的關(guān)聯(lián)處理,將相同或相似的操作歸類合并,獲取一個(gè)結(jié)構(gòu)化的模式串,便于后續(xù)閱讀查看。
[0075]在一個(gè)實(shí)施例中,所述方法還包括:建立冗余字段、變量值以及SQL語句原型的對應(yīng)關(guān)系,
[0076]并將不同的原始SQL語句對應(yīng)的SQL語句原型統(tǒng)一存儲,將同一 SQL語句原型對應(yīng)的不同的變化部分分別存儲,其中,變化部分包括變量值和冗余字段。
[0077]在本實(shí)施例中,在上述實(shí)施例中的步驟102?步驟110的對SQL語句的處理過程中,依次建立每個(gè)原始SQL語句的冗余字段、變量值、以及SQL語句原型之間的對應(yīng)關(guān)系(例如可以是建立索引的方式),并將相同的模式串即SQL語句原型統(tǒng)一存儲,變化部分(包括變量值和冗余字段)分開存儲。
[0078]通過將相同的模式串部分統(tǒng)一存儲,變化部分分別存儲的方式,不僅減少了存儲空間,而且方便對SQL語句進(jìn)行記錄、還原,提高了數(shù)據(jù)庫審計(jì)效率。
[0079]在一個(gè)實(shí)施例中,如圖4所示,在一個(gè)實(shí)施例中,還提出一種SQL語句處理系統(tǒng)400,系統(tǒng)400包括:原始SQL語句獲取模塊402,第一 SQL語句獲取模塊404,第二 SQL語句獲取模塊406,結(jié)構(gòu)化SQL語句獲取模塊408和SQL語句原型獲取模塊410。
[0080]原始SQL語句獲取模塊402,用于獲取原始SQL語句。第一SQL語句獲取模塊404,用于濾除原始SQL語句中的冗余字段,以獲取濾除冗余字段的第一SQL語句。第二SQL語句獲取模塊406,用于替換第一SQL語句中的變量值,以獲取第二SQL語句。結(jié)構(gòu)化SQL語句獲取模塊408,用于對第二SQL語句進(jìn)行結(jié)構(gòu)化處理,獲取結(jié)構(gòu)化SQL語句。SQL語句原型獲取模塊410,用于對結(jié)構(gòu)化SQL語句進(jìn)行操作關(guān)聯(lián)處理,獲取原始SQL語句對應(yīng)的SQL語句原型。[0081 ]在一個(gè)實(shí)施例中,如圖5所示,系統(tǒng)400還包括:SQL語句詞法語法分析模塊412 AQL語句詞法語法分析模塊412,用于對原始SQL語句進(jìn)行詞法語法分析,得到基于SQL語法元素和SQL語法字段的SQL特征庫,其中,SQL語法元素包括冗余字段和變量值。
[0082]基于上述實(shí)施例的SQL語句的詞法語法分析,得到基于SQL語法元素和SQL語句字段的SQL特征庫,該SQL語句的處理方法基于得到的SQL特征庫對原始SQL語句進(jìn)行一系列處理,提高了 SQL語句處理的效率和準(zhǔn)確率。在一個(gè)實(shí)施例中,結(jié)構(gòu)化SQL語句獲取模塊408還用于:提取第二 SQL語句中的SQL語法字段作為結(jié)構(gòu)框架,獲取相同結(jié)構(gòu)框架下的結(jié)構(gòu)化SQL語句,其中,SQL語法字段包括命令、表名、條件。
[0083]在本實(shí)施例中,提取出第二SQL語句中的語法字段作為結(jié)構(gòu)框架,對相同結(jié)構(gòu)框架下的SQL語句進(jìn)行抽象識別,得到結(jié)構(gòu)化的SQL語句。
[0084]在一個(gè)實(shí)施例中,SQL語句原型獲取模塊410還用于:將結(jié)構(gòu)化SQL語句中的相似SQL語法元素進(jìn)行歸類合并。
[0085]在本實(shí)施例中,通過關(guān)聯(lián)處理,將相同或相似的操作歸類合并,獲取一個(gè)結(jié)構(gòu)化的模式串,便于后續(xù)閱讀查看。
[0086]在一個(gè)實(shí)施例中,如圖5所示,該系統(tǒng)400還包括:存儲模塊414。存儲模塊414,用于建立冗余字段、變量值以及SQL語句原型的對應(yīng)關(guān)系;將不同的原始SQL語句對應(yīng)的SQL語句原型統(tǒng)一存儲,根據(jù)對應(yīng)關(guān)系將同一 SQL語句原型對應(yīng)的不同的變化部分分別存儲,其中,變化部分包括變量值和冗余字段。
[0087]在本實(shí)施例中,通過將相同的模式串部分統(tǒng)一存儲,變化部分分別存儲的方式,不僅減少了存儲空間,而且方便對SQL語句進(jìn)行記錄、還原,提高了數(shù)據(jù)庫審計(jì)效率。以上所述實(shí)施例的各技術(shù)特征可以進(jìn)行任意的組合,為使描述簡潔,未對上述實(shí)施例中的各個(gè)技術(shù)特征所有可能的組合都進(jìn)行描述,然而,只要這些技術(shù)特征的組合不存在矛盾,都應(yīng)當(dāng)認(rèn)為是本說明書記載的范圍。
[0088]以上所述實(shí)施例僅表達(dá)了本發(fā)明的幾種實(shí)施方式,其描述較為具體和詳細(xì),但并不能因此而理解為對發(fā)明專利范圍的限制。應(yīng)當(dāng)指出的是,對于本領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明構(gòu)思的前提下,還可以做出若干變形和改進(jìn),這些都屬于本發(fā)明的保護(hù)范圍。因此,本發(fā)明專利的保護(hù)范圍應(yīng)以所附權(quán)利要求為準(zhǔn)。
【主權(quán)項(xiàng)】
1.一種SQL語句處理方法,其特征在于,包括以下步驟: 獲取原始SQL語句; 濾除所述原始SQL語句中的冗余字段,以獲取濾除冗余字段的第一SQL語句; 替換所述第一SQL語句中的變量值,以獲取第二SQL語句; 對所述第二 SQL語句進(jìn)行結(jié)構(gòu)化處理,獲取結(jié)構(gòu)化SQL語句; 對所述結(jié)構(gòu)化SQL語句進(jìn)行操作關(guān)聯(lián)處理,獲取所述原始SQL語句對應(yīng)的SQL語句原型。2.根據(jù)權(quán)利要求1所述的方法,其特征在于,在所述獲取原始SQL語句的步驟之后,還包括: 對所述原始SQL語句進(jìn)行詞法語法分析,得到基于SQL語法元素和SQL語法字段的SQL特征庫,其中,所述SQL語法元素包括所述冗余字段和所述變量值。3.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述對所述第二SQL語句進(jìn)行結(jié)構(gòu)化處理,獲取結(jié)構(gòu)化SQL語句的步驟包括: 提取所述第二 SQL語句中的SQL語法字段作為結(jié)構(gòu)框架,獲取相同結(jié)構(gòu)框架下的所述結(jié)構(gòu)化SQL語句,其中,所述SQL語法字段包括命令、表名、條件。4.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述對所述結(jié)構(gòu)化SQL語句進(jìn)行操作關(guān)聯(lián)處理的步驟包括:將所述結(jié)構(gòu)化SQL語句中的相似的SQL語法元素進(jìn)行歸類合并。5.根據(jù)權(quán)利要求1至4中任一項(xiàng)所述的方法,其特征在于,還包括:建立所述冗余字段、所述變量值以及所述SQL語句原型的對應(yīng)關(guān)系; 將不同的原始SQL語句對應(yīng)的SQL語句原型統(tǒng)一存儲,根據(jù)所述對應(yīng)關(guān)系將所述同一SQL語句原型對應(yīng)的不同的變化部分分別存儲,其中,所述變化部分包括變量值和冗余字段。6.一種SQL語句處理系統(tǒng),其特征在于,包括: 原始SQL語句獲取模塊,用于獲取原始SQL語句; 第一 SQL語句獲取模塊,用于濾除所述原始SQL語句中的冗余字段,以獲取濾除冗余字段的第一 SQL語句; 第二SQL語句獲取模塊,用于替換所述第一SQL語句中的變量值,以獲取第二SQL語句; 結(jié)構(gòu)化SQL語句獲取模塊,用于對所述第二 SQL語句進(jìn)行結(jié)構(gòu)化處理,獲取結(jié)構(gòu)化SQL語句; SQL語句原型獲取模塊,用于對所述結(jié)構(gòu)化SQL語句進(jìn)行操作關(guān)聯(lián)處理,獲取所述原始SQL語句對應(yīng)的SQL語句原型。7.根據(jù)權(quán)利要求6所述的系統(tǒng),其特征在于,還包括: SQL語句詞法語法分析模塊,用于對所述原始SQL語句進(jìn)行詞法語法分析,得到基于SQL語法元素和SQL語法字段的SQL特征庫,其中,所述SQL語法元素包括所述冗余字段和所述變量值。8.根據(jù)權(quán)利要求7所述的系統(tǒng),其特征在于,結(jié)構(gòu)化SQL語句獲取模塊還用于:提取所述第二 SQL語句中的SQL語法字段作為結(jié)構(gòu)框架,獲取相同結(jié)構(gòu)框架下的所述結(jié)構(gòu)化SQL語句,其中,所述SQL語法字段包括命令、表名、條件。9.根據(jù)權(quán)利要求7所述的系統(tǒng),其特征在于,SQL語句原型獲取模塊還用于:將所述結(jié)構(gòu)化SQL語句中的相似SQL語法元素進(jìn)行歸類合并。10.根據(jù)權(quán)利要求6至9任一項(xiàng)所述的系統(tǒng),其特征在于,還包括: 存儲模塊,用于建立所述冗余字段、所述變量值以及所述SQL語句原型的對應(yīng)關(guān)系;將不同的原始SQL語句對應(yīng)的SQL語句原型統(tǒng)一存儲,根據(jù)所述對應(yīng)關(guān)系將所述同一 SQL語句原型對應(yīng)的不同的變化部分分別存儲,其中,所述變化部分包括變量值和冗余字段。
【文檔編號】G06F17/30GK105912594SQ201610205606
【公開日】2016年8月31日
【申請日】2016年4月5日
【發(fā)明人】朱雋
【申請人】深圳市深信服電子科技有限公司