本技術(shù)涉及數(shù)據(jù)庫領(lǐng)域,并且更具體地,涉及一種結(jié)構(gòu)化查詢語言sql防御的方法、系統(tǒng)以及計(jì)算設(shè)備。
背景技術(shù):
1、在當(dāng)前的結(jié)構(gòu)化查詢語言(structured?query?language,sql)引擎中,通過執(zhí)行用戶的sql語句為用戶提供數(shù)據(jù)查詢服務(wù)。隨著技術(shù)的發(fā)展,sql引擎層出不窮,在帶給我們解決方案多樣性的同時(shí),也暴露出一定的問題,比如用戶輸入的sql語句的質(zhì)量良莠不齊,低質(zhì)量的sql語句會給平臺或系統(tǒng)帶來的不可預(yù)料的沖擊。對于大sql語句或爛sql語句會造成系統(tǒng)的癱瘓,導(dǎo)致服務(wù)不可用。對于慢sql語句會影響系統(tǒng)的穩(wěn)定性,主要表現(xiàn)是服務(wù)器線程池被占滿,造成雪崩效應(yīng),其它正常sql無法正常執(zhí)行,出現(xiàn)系統(tǒng)假死現(xiàn)象。
2、相關(guān)的技術(shù)方案中,通過業(yè)務(wù)層對sql語句進(jìn)行解析和防御,一方面,由于在業(yè)務(wù)層中對sql語句進(jìn)行解析判斷,需要改造業(yè)務(wù)層的業(yè)務(wù)流程。另一方面,由于在業(yè)務(wù)層中需要對sql語句進(jìn)行解析判斷,對于符合要求的sql語句需要發(fā)送給sql引擎,sql引擎在對sql語句進(jìn)行處理時(shí),還需要對sql語句再次進(jìn)行解析,性能損耗較高。另一方面,每個(gè)sql引擎各自針對自己的sql語法進(jìn)行sql語句的解析和防御,這樣不僅靈活性差,可擴(kuò)展性也較差,sql語法的通用性不足。
3、因此,如何增強(qiáng)sql防御的靈活性和可擴(kuò)展性成為亟需要解決的技術(shù)問題。
技術(shù)實(shí)現(xiàn)思路
1、本技術(shù)提供一種結(jié)構(gòu)化查詢語言sql防御的方法、系統(tǒng)以及計(jì)算設(shè)備,該方法能夠增強(qiáng)sql防御的靈活性和可擴(kuò)展性。
2、第一方面,提供了一種結(jié)構(gòu)化查詢語言sql防御的方法,該方法應(yīng)用于sql防御系統(tǒng),該sql防御系統(tǒng)包括sql防御規(guī)則配置單元和多個(gè)sql引擎,該方法包括:該sql防御規(guī)則配置單元通過統(tǒng)一的入口為該多個(gè)sql引擎配置對應(yīng)的sql防御規(guī)則,每個(gè)該sql防御規(guī)則中包括生效的sql引擎以及對應(yīng)的執(zhí)行動作,該多個(gè)sql引擎對應(yīng)的sql防御規(guī)則的格式相同;該sql防御規(guī)則配置單元根據(jù)每個(gè)該sql防御規(guī)則中生效的sql引擎,將配置的sql防御規(guī)則分別發(fā)送給對應(yīng)的sql引擎,以便于該sql引擎根據(jù)獲得的sql防御規(guī)則對接收到的sql語句進(jìn)行防御。
3、上述技術(shù)方案中,通過一個(gè)統(tǒng)一的入口為多個(gè)sql引擎配置并下發(fā)格式相同的sql防御規(guī)則,由sql引擎基于獲得的sql防御規(guī)則對接收到的sql語句進(jìn)行防御。這樣,一方面,業(yè)務(wù)層不需要對sql語句進(jìn)行解析,直接在sql引擎對sql語句進(jìn)行解析和防御,性能損耗較較低。另一方面,由于可以為多個(gè)sql引擎配置sql防御規(guī)則,并且sql防御規(guī)則的格式相同,增強(qiáng)了靈活性、可擴(kuò)展性以及sql語法的通用性。
4、結(jié)合第一方面,在第一方面的某些實(shí)現(xiàn)方式中,該多個(gè)sql引擎包括第一sql引擎,該方法還包括:該第一sql引擎從該sql防御規(guī)則配置單元獲取對應(yīng)的至少一個(gè)sql防御規(guī)則,該至少一個(gè)sql防御規(guī)則包括第一sql防御規(guī)則;該第一sql引擎從業(yè)務(wù)層接收到第一sql語句;該第一sql引擎根據(jù)該第一sql語句滿足該第一sql防御規(guī)則,執(zhí)行該第一sql防御規(guī)則中的動作。
5、上述技術(shù)方案中,sql引擎可以自主對sql語句進(jìn)行防御,避免低質(zhì)量的sql語句對大數(shù)據(jù)分析處理平臺或數(shù)據(jù)庫造成的不可預(yù)料的沖擊,使得防御更加準(zhǔn)確。并且,由于在sql引擎直接對sql語句先進(jìn)行解析,在業(yè)務(wù)層不需要對sql語句進(jìn)行解析,使得性能損耗較低,業(yè)務(wù)層無改造,易實(shí)施落地。
6、結(jié)合第一方面,在第一方面的某些實(shí)現(xiàn)方式中,該sql防御規(guī)則配置單元根據(jù)每個(gè)該sql防御規(guī)則中生效的sql引擎,在加載周期內(nèi)自動將配置的sql防御規(guī)則分別發(fā)送給對應(yīng)的sql引擎。
7、上述技術(shù)方案中,在加載周期內(nèi)自動將配置的sql防御規(guī)則分別發(fā)送給對應(yīng)的sql引擎,這樣,sql引擎可以在加載周期內(nèi)自動加載sql防御規(guī)則,而不需要重啟sql引擎,也不需要中斷業(yè)務(wù)。
8、結(jié)合第一方面,在第一方面的某些實(shí)現(xiàn)方式中,該sql防御規(guī)則包括提示類的sql防御規(guī)則、攔截類的sql防御規(guī)則、熔斷類的sql防御規(guī)則。
9、結(jié)合第一方面,在第一方面的某些實(shí)現(xiàn)方式中,第一sql防御規(guī)則為該提示類的sql防御規(guī)則,該第一sql引擎繼續(xù)執(zhí)行該第一sql語句。
10、結(jié)合第一方面,在第一方面的某些實(shí)現(xiàn)方式中,該方法還包括:該第一sql引擎向用戶顯示該第一sql語句的提示信息。
11、上述技術(shù)方案中,可以通過客戶端向用戶顯示該第一sql語句的提示信息,提高用戶的交互體驗(yàn)。
12、結(jié)合第一方面,在第一方面的某些實(shí)現(xiàn)方式中,該第一sql防御規(guī)則為該攔截類的sql防御規(guī)則或該熔斷類的sql防御規(guī)則,該第一sql引擎停止執(zhí)行該第一sql語句。
13、結(jié)合第一方面,在第一方面的某些實(shí)現(xiàn)方式中,該方法還包括:該第一sql引擎向用戶顯示該第一sql語句被停止執(zhí)行的原因。
14、上述技術(shù)方案中,可以通過客戶端向用戶顯示該第一sql語句被停止執(zhí)行的原因,提高用戶的交互體驗(yàn)。
15、結(jié)合第一方面,在第一方面的某些實(shí)現(xiàn)方式中,該第一sql引擎自動在加載周期內(nèi)加載該至少一個(gè)sql防御規(guī)則。
16、上述技術(shù)方案中,sql引擎可以在加載周期內(nèi)自動加載sql防御規(guī)則,而不需要重啟sql引擎,也不需要中斷業(yè)務(wù)。
17、結(jié)合第一方面,在第一方面的某些實(shí)現(xiàn)方式中,該sql防御規(guī)則中還包括生效的租戶列表以及規(guī)則標(biāo)識id。
18、第二方面,提供了一種結(jié)構(gòu)化查詢語言sql防御的系統(tǒng),該系統(tǒng)包括sql防御規(guī)則配置單元和多個(gè)sql引擎:該sql防御規(guī)則配置單元,用于通過統(tǒng)一的入口為該多個(gè)sql引擎配置對應(yīng)的sql防御規(guī)則,每個(gè)該sql防御規(guī)則中包括生效的sql引擎以及對應(yīng)的執(zhí)行動作,該多個(gè)sql引擎對應(yīng)的sql防御規(guī)則的格式相同;該sql防御規(guī)則配置單元,還用于根據(jù)每個(gè)該sql防御規(guī)則中生效的sql引擎,將配置的sql防御規(guī)則分別發(fā)送給對應(yīng)的sql引擎,以便于該sql引擎根據(jù)獲得的sql防御規(guī)則對接收到的sql語句進(jìn)行防御。
19、結(jié)合第二方面,在第二方面的某些實(shí)現(xiàn)方式中,該多個(gè)sql引擎包括第一sql引擎,該第一sql引擎,用于從該sql防御規(guī)則配置單元獲取對應(yīng)的至少一個(gè)sql防御規(guī)則,該至少一個(gè)sql防御規(guī)則包括第一sql防御規(guī)則;該第一sql引擎,還用于從業(yè)務(wù)層接收到第一sql語句;該第一sql引擎,還用于根據(jù)該第一sql語句滿足該第一sql防御規(guī)則,執(zhí)行該第一sql防御規(guī)則中的動作。
20、結(jié)合第二方面,在第二方面的某些實(shí)現(xiàn)方式中,該sql防御規(guī)則配置單元具體用于:根據(jù)每個(gè)該sql防御規(guī)則中生效的sql引擎,在加載周期內(nèi)自動將配置的sql防御規(guī)則分別發(fā)送給對應(yīng)的sql引擎。
21、結(jié)合第二方面,在第二方面的某些實(shí)現(xiàn)方式中,該sql防御規(guī)則包括提示類的sql防御規(guī)則、攔截類的sql防御規(guī)則、熔斷類的sql防御規(guī)則。
22、結(jié)合第二方面,在第二方面的某些實(shí)現(xiàn)方式中,第一sql防御規(guī)則為該提示類的sql防御規(guī)則,該第一sql引擎具體用于:繼續(xù)執(zhí)行該第一sql語句。
23、結(jié)合第二方面,在第二方面的某些實(shí)現(xiàn)方式中,該第一sql引擎,還用于向用戶顯示該第一sql語句的提示信息。
24、結(jié)合第二方面,在第二方面的某些實(shí)現(xiàn)方式中,該第一sql防御規(guī)則為該攔截類的sql防御規(guī)則或該熔斷類的sql防御規(guī)則,該第一sql引擎具體用于:停止執(zhí)行該第一sql語句。
25、結(jié)合第二方面,在第二方面的某些實(shí)現(xiàn)方式中,該第一sql引擎,還用于向用戶顯示該第一sql語句被停止執(zhí)行的原因。
26、結(jié)合第二方面,在第第二方面的某些實(shí)現(xiàn)方式中,該第一sql引擎自動在加載周期內(nèi)加載該至少一個(gè)sql防御規(guī)則。
27、結(jié)合第二方面,在第二方面的某些實(shí)現(xiàn)方式中,該sql防御規(guī)則中還包括生效的租戶列表以及規(guī)則標(biāo)識id。
28、第三方面,提供了一種計(jì)算設(shè)備集群,包括至少一個(gè)計(jì)算設(shè)備,每個(gè)計(jì)算設(shè)備包括處理器和存儲器;該至少一個(gè)計(jì)算設(shè)備的處理器用于執(zhí)行該至少一個(gè)計(jì)算設(shè)備的存儲器中存儲的指令,以使得該計(jì)算設(shè)備集群執(zhí)行第一方面或第一方面任意一種可能的實(shí)現(xiàn)方式中的方法。
29、可選地,該處理器可以是通用處理器,可以通過硬件來實(shí)現(xiàn)也可以通過軟件來實(shí)現(xiàn)。當(dāng)通過硬件實(shí)現(xiàn)時(shí),該處理器可以是邏輯電路、集成電路等;當(dāng)通過軟件來實(shí)現(xiàn)時(shí),該處理器可以是一個(gè)通用處理器,通過讀取存儲器中存儲的軟件代碼來實(shí)現(xiàn),該存儲器可以集成在處理器中,可以位于該處理器之外,獨(dú)立存在。
30、第四方面,提供了一種芯片,該芯片獲取指令并執(zhí)行該指令來實(shí)現(xiàn)上述第一方面以及第一方面的任意一種實(shí)現(xiàn)方式中的方法。
31、可選地,作為一種實(shí)現(xiàn)方式,該芯片包括處理器與數(shù)據(jù)接口,該處理器通過該數(shù)據(jù)接口讀取存儲器上存儲的指令,執(zhí)行上述第一方面以及第一方面的任意一種實(shí)現(xiàn)方式中的方法。
32、可選地,作為一種實(shí)現(xiàn)方式,該芯片還可以包括存儲器,該存儲器中存儲有指令,該處理器用于執(zhí)行該存儲器上存儲的指令,當(dāng)該指令被執(zhí)行時(shí),該處理器用于執(zhí)行第一方面以及第一方面中的任意一種實(shí)現(xiàn)方式中的方法。
33、第五方面,提供了一種包含指令的計(jì)算機(jī)程序產(chǎn)品,當(dāng)該指令被計(jì)算設(shè)備集群運(yùn)行時(shí),使得該計(jì)算設(shè)備集群執(zhí)行如上述第一方面以及第一方面的任意一種實(shí)現(xiàn)方式中的方法。
34、第六方面,提供了一種計(jì)算機(jī)可讀存儲介質(zhì),包括計(jì)算機(jī)程序指令,當(dāng)該計(jì)算機(jī)程序指令由計(jì)算設(shè)備集群執(zhí)行時(shí),該計(jì)算設(shè)備集群執(zhí)行如上述第一方面以及第一方面的任意一種實(shí)現(xiàn)方式中的方法。
35、作為示例,這些計(jì)算機(jī)可讀存儲包括但不限于如下的一個(gè)或者多個(gè):只讀存儲器(read-only?memory,rom)、可編程rom(programmable?rom,prom)、可擦除的prom(erasableprom,eprom)、flash存儲器、電eprom(electrically?eprom,eeprom)以及硬盤驅(qū)動器(harddrive)。
36、可選地,作為一種實(shí)現(xiàn)方式,上述存儲介質(zhì)具體可以是非易失性存儲介質(zhì)。