您的位置:首页 > 数据库

sql语句相似度统计的说明

2013-05-27 12:25 1091 查看
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语法基础上再行设计和延伸。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: