999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

面向數據庫性能的SQL語句解析與翻譯

2016-04-12 00:00:00崔娜
現代電子技術 2016年11期

摘 要: 信息泄漏事件不斷發生使得數據庫安全的重要性不斷提高?;赟QL解析能夠實現SQL到自然語言的翻譯,幫助非專業人員分析數據庫的訪問活動和識別風險。通過SQL詞法和語法的EBNF描述構造了可以用于LL的規則輸入,使用ANTLR工具生成了SQL詞法和語法解析器。進一步,SQL詞法和語法解析器實現了SQL語句到抽象語法樹的轉換。并通過解析抽象語法樹,將SQL語句翻譯成自然語言。最后,將SQL解析和翻譯功能應用在數據庫防火墻和安全審計系統中。

關鍵詞: SQL解析; LL解析器; ANTLR; 抽象語法樹; SQL翻譯; 數據庫安全

中圖分類號: TN918.91?34; TM417 文獻標識碼: A 文章編號: 1004?373X(2016)11?0099?04

Abstract: The continuous occurrence of information leakage incidents makes the importance of database security improve constantly. The SQL parse can realize the translation from SQL to natural language, and help the non?specialized people to analyze the database access activities and identify the risks. The rule input applied to LL was constructed by means of EBNF description of SQL morphology and syntax. The SQL morphology and parser are generated with ANTLR tool, which can realize the conversion from SQL statement to abstract syntax tree. The SQL statement can be translated into natural language by parsing the abstract syntax tree. Finally, SQL parse and translation function are applied to the database firewall and safety audit system.

Keywords: SQL parse; LL parser; ANTLR; abstract syntax tree; SQL translation; database security

0 引 言

近幾年,信息泄漏事件頻繁發生,用戶對數據庫的安全性越來越關注。由于數據庫本身的復雜性,數據庫的管理運行、日常維護和數據安全保護只能由專業的數據庫管理員進行。但是,很多使用數據庫的人并不熟悉數據庫,甚至完全不了解數據庫。SQL分析技術能夠幫助用戶快速抽取SQL語句中的字段、表、視圖及對它們的操作,快速識別SQL語句的風險。同時基于SQL分析技術能夠將SQL語句翻譯成自然語言,使之更容易被理解,有助于實現安全控制。

早期的SQL解析使用Lex,Yacc的比較多。雖然Oracle已經將ANTLR應用在SQL Developer的IDE中,但是SQL Developer并非開源使用。因此使用ANTLR進行SQL解析的研究目前還很少,進行SQL翻譯的工作還未見報道。在使用ANTLR解析SQL并且將結果進行進一步分析是一個新的嘗試。本文針對數據庫安全,基于LL文法,采用ANTLR工具,實現了SQL的詞法和語法解析器,并進一步實現了SQL語句到自然語言的翻譯。最后,將SQL解析和翻譯功能應用在數據庫防火墻和安全審計系統中,對于提高數據庫的安全防護能力具有很大的實際意義。

1 SQL解析器

1.1 SQL詞法解析器實現

SQL語言的詞法主要分為標識符、數字、注釋與提示、字符串、時間、區間和變量。基于ANTLR實現SQL詞法解析首先要定義詞法的fragment。所謂的fragment是詞的一部分,而不會出現在詞法解析的結果中。以數字和時間為例分析。

(1) 數字Number。在SQL語言中表示數值類型。數值類型包含整數部分、小數部分、符號部分、指數部分和類型部分,其中指數部分是一個大寫字母“E”或者一個小寫字母“e”加一個帶有符號的整數,如果不帶符號默認為“+”。數值類型中,整數部分和小數部分必須包含其中之一,其他部分都是可選的,只包含小數部分時允許“.”出現在數值的最前面,例如“.5”表示“0.5”。數字的DFA表示如圖1所示。

(2) 時間Datetime。時間格式比較固定,必須由關鍵字DATE開頭,后面是一個表示時間的字符串,如果不是表示時間的字符串,SQL語句認為是錯誤的語句。另外,時間戳也被認為是一種時間格式,必須是由關鍵字TIMESTAMP開頭,時間戳格式包含AT TIME ZONE可選結構,表示時區。時間的DFA表示如圖2所示。

根據這七種類型的自動機表示將其轉換成對應的EBNF表示。使用“*”、“+”替換DFA中的循環結構,“*”表示可以跳過的循環結構,“+”表示不可跳過的循環結構。使用“|”表示DFA中的選擇結構,在每個分支之間使用“|”表示選擇。使用“?”表示DFA中可跳過的結構,將“?”放在可選結構的后面。在每個單元上使用“()”將不可拆分的部分包含在內,就可以使用簡單的EBNF語句描述復雜的DFA。另外,對于SQL的保留字要做單獨的識別。例如:select要定義成SELECT:S E L E C T;這樣select無論是“Select”還是“seLECT”都能識別出來。針對不同的SQL語句它的保留字也是不一樣的,需要單獨定義語法文件。 SQL語言中是不區分大寫字母和小寫字母的,在ANTLR中單獨的字母應該被當作碎片來定義,不能出現在最終的解析結果中,使用“fragment”修飾。字母包含鍵盤上所有能夠輸入的符號以及鍵盤上不能直接輸入的UNICODE字符。SQL語言中使用的數字是阿拉伯數字0~9,單獨的數字也要使用“fragment”修飾。

1.2 SQL語法解析器實現

語法解析器實現過程中需要將所有的語言模式轉化為EBNF描述的規則語句。SQL語言的范式使用的是EBNF描述,要將其轉換成EBNF描述的規則。EBNF范式的好壞雖然不會影響到解析的效率,解析效率只與被解析的字符串的長度有關系,但是會影響到解析器生成的效率。壞的EBNF規則會導致生成的過程中出現大量的遞歸調用和棧操作,生成的時間和內存會成指數級增長。所以EBNF的規則還是有很多細節需要注意。規則的深度不能太深,并且需要或關系的規則盡量將K值控制到最低,因為規則生成的復雜度是(K*N)M。其中,K是向后查看的token數;N是或關系連接的多個規則;M是規則嵌套的層數。由于一個子規則經常被多個規則引用,所以子規則會影響所有引用它的規則的生成效率。降低子規則的層數和減小K值是有效的提高生成效率的方法。N值一般難以降低,除非規則本身就有冗余,但是這種情況比較少見。

使用ANTLR將語法文件編譯成解析器,實現過程類似于詞法分析。輸入由String變成tokens,ANTLR自身的語法不變。使用全部的語法生成語法解析器,在生成過程中系統采用LL(K)分析方法。ANTLR支持預測功能,可以在特定的地方使用預測。設置回溯位置,對輸入的tokens進行預測,降低解析時間和消耗的資源。 解析的結果可以得到每一個token的屬性、內容和值。再對生成的一維AST樹做遞歸下降,將AST樹的二維層次結構補全,得到具有層次和附屬關系的二維語法樹。AST樹上的節點對于解析來說并不都是必須的,在生成過程中將不需要的節點刪除,留下必須的結果,精簡AST樹對于快速提取重要信息有很大的幫助。在AST樹生成的過程中直接嵌入SQL語句檢查代碼,同時可以在解析過程中直接根據token的類型判斷輸入詞的意義,從而將SQL中最重要的表、視圖、字段直接提取出來,同時判斷出SQL的類型和操作對象的類型。更進一步,將SQL中存在的安全隱患的類似緩沖區溢出和SQL注入攻擊的風險直接檢測出來。

2 SQL翻譯

2.1 SQL語句AST的構建

ANTLR語法解析的輸出結果就是抽象語法樹。將語法解析的結果設置為AST,ANTLR每一個規則解析之后就能生成AST結構。默認情況下生成一維語法樹,所有的結果在同一個層次上。如果需要自定義抽象語法樹的返回結果,需要在語法解析過程中加入AST 構建規則。ANTLR的抽象語法樹構建語法非常簡單,標準語法只有三種:

(1) “^”,前面的符號作為父節點;

(2) “!”,前面的節點不出現在語法樹上;

(3) “?>^(……)”,“?>”左側是語法解析語句,右側是抽象語法樹生成語句,括號內是一棵子樹,第一個符號是樹的根,其他元素是第一個元素的子節點。例如:(A+B)?> ^(+A B)。

由于SQL語言是結構化的查詢語句,在構建抽象語法樹上有先天的優勢。構建語法樹時只需要考慮SQL中查詢的主體,忽略不需要的部分,其中最重要的就是表、字段、視圖和在表、字段、視圖上的操作。查詢語句是SQL語句中最復雜的語句,可以使用嵌套和遞歸的方式,語法結構十分靈活。由于其他語言相比于查詢語言簡單很多。本節用查詢語句舉例說明SQL語句抽象語法樹生成過程。

2.2 AST轉換成自然語言

SQL語句的語言結構更接近英文的語言結構,與中文的語言結構差別較大,簡單的對關鍵字替換不考慮語義是不能達到翻譯效果的,只會讓結果更加匪夷所思,舉例說明:

SELECT concat(select user (),′??′,database()), name FROM TABLE(SELECT date, user, action, name FROM logs WHERE id=if(ascii(substr((SELECT user())),1,1)=1),1,0)) WHERE ‘admin’in (SELECT name FROM user);

直接替換翻譯結果為:

查詢concat(查詢user (),′??′, database ()), name從邏輯表(查詢date, user, action, name從logs條件滿足id等于if(ascii(substr((查詢user()),1,1))等于1,1,0)條件滿足‘admin’在(查詢name從user)。

使用樹解析器將抽象語法樹轉換成自然語言。由于抽象語法樹采用遞歸的方式表示語法結構,在解析的過程中也使用遞歸的方式,并將語法習慣調整為漢語語言的語法習慣。在轉換的過程中補充虛詞和連接詞,增加語言的連貫性。最后對翻譯結果進行格式化,增加縮進便于閱讀??紤]漢語的閱讀習慣,可以將較長的句子翻譯成子句的形式,最后,根據數據庫建模表和數據庫方法表,可以將翻譯結果中的方法名、字段名、表名等翻譯成中文,翻譯時只要判斷出被翻譯內容的類型,然后查找相應的數據表,就能將剩下的英文部分翻譯成中文,生成最終結果為:

模塊1:

查詢獲取用戶方法(user)的執行結果的返回數據

模塊2:

從用戶表(user)中查詢姓名字段(name)的返回數據

條件1:

標識字段(id)等于條件判斷方法(if)[轉換成ascii編碼方法(ascii)[子串方法(substr)[{模塊1},1,1]的返回結果]]的返回結果等于1,1,0]的返回結果

條件2:

字串‘admin’在[{模塊2}]里

模塊3:

從日志表(logs)中查詢滿足{條件1}條件的日期字段(date)和用戶字段(user)和動作字段(action)和姓名字段(name)的返回數據

模塊4:

邏輯表[{模塊3}]

模塊5:

查詢方法用戶方法(user)執行結果的返回數據

模塊6:

連接字符串方法(concat)[{模塊5}, ′??′, 方法數據(database)的執行結果]的執行結果

主查詢:

從{模塊4}中查詢滿足{條件2}條件的{模塊6}和姓名字段(name)的返回數據。

翻譯過程中需要調整語序,語序的調整主要使用棧實現,將需要調整語序的句子放入棧中,返回時再從棧中取出。樹解析器翻譯的過程如下:

(1) 當前指針在根節點,獲取節點,判斷節點類型,類型不一樣,Tree Walker進入不同的解析模塊,這里以SELECT語句為例;

(2) 獲取一個子節點,判斷節點的類型;

(3) 如果是SELECT語句,那么就調用select_tree_walker,然后調整語序,執行stack.push操作,將結果先緩存。如果是FROM語句,調用from_tree_walker的結果放入output流中。如果是WHERE語句,調用where_tree_walker,調用stack.pop將SELECT語句出棧,和WHERE語句合并格式,結果放入到output流中;

(4) tree_waker是一個遞歸的過程,在解析過程中,將查詢的條件和子模塊生成獨立的翻譯模塊;

(5) tree_waker在執行的過程中遇到需要查詢建模表和函數表的情況,將查詢的結果輸出;

(6) 重復步驟(2)~步驟(5)過程,直到input流為空。

Tree Walker對部分葉節點的翻譯規則如表1所示。

3 系統實現與效果分析

本系統目前已在數據庫審計和防火墻產品有所應用,數據庫審計與防火墻引擎設置界面如圖3所示。要對數據庫進行審計或者建立防火墻,先要添加數據庫引擎。審計數據獲取方式有很多種,在設置界面進行設置。

規則設置界面部分截圖如圖4所示。規則可以設置表、字段、SQL類型等,SQL解析中能夠獲取的所有信息都可以在規則界面上設置。通過對SQL語句進行解析獲取語句的類型,然后對不同類型的SQL語句設置不同的規則。

檢索界面如圖6所示??梢詫徲嬋罩具M行檢索,獲取數據庫用戶的操作行為。

告警界面如圖7所示。SQL語句觸發告警規則就會產生告警,在告警界面上可以查看告警細節。

圖7中select 1 from db_queue_tables where 1=2,其中條件1=2是常量比較,判定SQL語句可能是SQL注入語句,產生高風險告警。然后通過SQL翻譯將SQL語句翻譯成對應的中文,select 1 from db_queue_tables where 1=2的翻譯結果為“從表dba_queue_tabkes中查詢滿足條件1=2的值1的返回結果”。

最新流量界面如圖8所示。在最新流量界面可以實時顯示最新的SQL操作,隨時監控SQL操作動態?;赟QL解析和翻譯的數據庫審計和防火墻產品可以在審計模式對操作進行溯源,起到對不法分子進行震懾的作用。防火墻模式可以通過阻斷方式對風險進行控制,從而提升數據庫系統的安全性。

4 結 論

本文通過分析標準SQL語言的詞法規則和語法規則,并基于ANTLR設計并實現了SQL詞法解析器和語法解析器;使用SQL詞法解析器和語法解析器實現了SQL語句輔助分析功能,實現了SQL語句的詞法分析和語法樹生成;通過解析語法樹提取SQL信息并將SQL語句翻譯成自然語言;并將SQL解析和翻譯的功能應用在數據庫綜合審計系統中。SQL解析和翻譯模塊已經被應用在商業數據庫防火墻和安全審計系統中,并且被部署到多個數據中心。系統可以監控數據庫的所有活動,阻斷危險操作和攻擊,從而達到增強數據庫安全的目的,為保障數據庫及信息系統的安全逐步發揮作用。

本文設計了一種基于反激式直流變換器的動力電池均衡電路,給出了系統建模方法,并在PSIM環境下完了系統仿真電路,針對8種典型非均衡狀態進行了全面的仿真實驗,最后通過實驗證明了系統建模的有效性。由于建模過程忽略了變換器磁阻、磁滯、磁飽和現象,同時簡化了電路寄生參數,需要進一步完善。

參考文獻

[1] 張博,類艷春,廉小偉.數據庫安全漏洞淺析[J].保密科學技術,2012(3):23?25.

[2] 劉三獻.基于ANTLR的Gaussian詞法分析器和語法分析器的分析與設計[D].蘭州:蘭州大學,2009.

[3] 閆紅巖.SQL語句分析及數據庫安全研究[J].貴陽:貴州大學,2006.

[4] 侯智斌,孫彥飛,呂曹芳.基于入侵容忍技術的數據庫安全策略研究[J].現代電子技術,2011,34(7):78?80.

[5] PARR T, FISHER K. LL (*): the foundation of the ANTLR parser generator [C]// Proceedings of 32nd ACM SIGPLAN Conference on Programming Language Design and Implementation. [S.l.]: ACM, 2011: 425?436.

[6] SALOMAA K, YU S. NFA to DFA transformation for finite languages over arbitrary alphabets [C]// Proceedings of 1996 First International Workshop on Implementing Automata. London: Springer, 1996: 149?158.

[7] LOUDEN K C. Compiler construction: principles and practice [M]. New York: Cengage Learning, 2000: 21?148.

[8] DATE C J, DARWEN H. A guide to the SQL standard [M]. New York: Addison?Wesley, 1987.

主站蜘蛛池模板: 亚洲色成人www在线观看| 国产精品露脸视频| 国产日韩欧美成人| 亚洲大尺码专区影院| 亚洲精品视频免费| 一本大道香蕉中文日本不卡高清二区| 91视频区| 亚洲美女AV免费一区| 国产91高清视频| 激情国产精品一区| 久久影院一区二区h| 国产精品久久久免费视频| 亚洲三级影院| 免费女人18毛片a级毛片视频| 一级香蕉视频在线观看| 国产日韩丝袜一二三区| 色婷婷亚洲十月十月色天| 一级爱做片免费观看久久| 久青草免费视频| 午夜精品一区二区蜜桃| 色播五月婷婷| 一区二区三区四区精品视频| 伊人久久大线影院首页| 国产免费怡红院视频| 亚洲中文字幕久久精品无码一区| 波多野结衣一区二区三区四区视频 | 精品伊人久久大香线蕉网站| 91丝袜在线观看| 露脸真实国语乱在线观看| 国产肉感大码AV无码| 免费在线观看av| 成人va亚洲va欧美天堂| 欧美日韩北条麻妃一区二区| 精品国产香蕉伊思人在线| 国产成人h在线观看网站站| 欧美性猛交xxxx乱大交极品| 久久国产精品无码hdav| 亚洲午夜综合网| 老色鬼欧美精品| 日韩精品毛片| 国产精品第三页在线看| 伊人精品成人久久综合| 中文字幕日韩丝袜一区| 亚洲女同欧美在线| 成人免费一区二区三区| 国产成人AV综合久久| 欧美日韩一区二区在线播放| 亚洲天堂色色人体| 国产欧美日韩精品第二区| 欧洲一区二区三区无码| 国产精女同一区二区三区久| 97在线公开视频| 尤物在线观看乱码| 青青青国产免费线在| 全色黄大色大片免费久久老太| 狠狠操夜夜爽| 国产精品成人啪精品视频| 日本少妇又色又爽又高潮| 茄子视频毛片免费观看| 成人无码区免费视频网站蜜臀| 成年人久久黄色网站| 欧洲日本亚洲中文字幕| 国产精品思思热在线| 亚洲欧美一级一级a| 免费国产无遮挡又黄又爽| 欧美综合一区二区三区| 全午夜免费一级毛片| 日韩性网站| 欧美日韩第二页| 青青草久久伊人| 亚洲色精品国产一区二区三区| 精品福利视频导航| 国产福利免费在线观看| 亚洲黄网在线| 日本手机在线视频| 92午夜福利影院一区二区三区| 国产成人高清在线精品| 国产精品熟女亚洲AV麻豆| 国产资源站| 蜜桃视频一区| 久久综合九九亚洲一区| 国产极品粉嫩小泬免费看|