sql语句相似度统计的说明
1.需求描述:
sql相似度統計是針對數據庫審計中采集到sql語句及其滿足一定相似度的sql語句統計其執行次數,用于判斷是否高危,對于次數執行相對低的給予告警。在統計sql語句執行次數上,要判斷同類sql語句的相似度,達到一定相似度的可以定位為同一類sql語句。
?
2.實現描述:
——輸入:相似度值,比如90%;操作對象,比如表名Table_name;操作類型,比如insert into、select;執行次數,比如超過10000次則可以不再統計;
——操作:
1)?sql語句結構分離
對sql語句進行結構分離,將sql語法基本結構和語句其他字符分別用數據結構接收。
比如insert into table_name(field_1,field_2) values(‘value_1’,’value_2’),結構抽離后如下:
Para_1=insert into——操作類型
Para_2=table_name——操作對象
Para_3=(field_1,field_2)——插入字段
Para_4= values
Para_5=(‘value_1’,’value_2’)
2)條件判斷
提取符合操作類型和操作對象的sql語句。
3)sql語法結構匹配
進行sql語法結構匹配,結構相同才進行下一步字符相似度匹配。比如兩條sql語句都是insert into # values#,則語法結構相同。
4)相似度匹配
根據輸入的相似度值,對語法結構外的字符進行順序匹配,滿足閥值則定義這兩條語句是相似,增加執行次數。
——輸出:sql語句及其匹配的sql語句執行次數。
案例:sql語句1:select field_1 from table_1 where filed_2=tmp2
Sql語句2:select field_2 from table_1 where field_3=tmp3
輸入:70%相似度,操作對象為table_1,全部操作類型;
操作:
對sql語句進行結構分離后,先進行條件判斷,sql語句1和sql語句2都是table_1對象;
然后進行結構匹配,sql語句1和sql語句2都是select#from#where#的基本結構,匹配滿足,進入字符相似度匹配;
相似度匹配上有字段和條件,sql語句1的field1和sql語句2的field2相似度順序字符匹配達到5/6,大于70%;sql語句1的filed_2=tmp2和sql語句2的field_3=tmp3相似度順序字符匹配達到達到6/12,小于70%;二者平均下來4/5,大于70%,滿足閥值,這兩個sql語句是相似的,執行次數分別加1。
5)基本sql語法結構
| select#from#where# |
| insert into#values# |
| update#set#where# |
| delete from#where# |
| create# |
| backup# |
| drop# |
| alter#add# |
| truncate#drop storage |
| lock#in# |
| grant# |
| revoke# |
| deny# |
| rollback# |
| commit# |
| call # |
可在基本sql語法基礎上再行設計和延伸。
總結
以上是生活随笔為你收集整理的sql语句相似度统计的说明的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: (转载)java工程师15本必读书籍推荐
- 下一篇: (转载)Web 开发人员需知的 Web