数据库安全关键技术之SQL语法特征技术
作者:安华金和 发布时间:2016-12-30

SQL语法特征技术在数据库安全产品的应用中非常关键,比如数据库防火墙(DBFirewall)需要有效扑获SQL语句的特征,以及为了快速地对SQL语句进行策略判定,以实现数据库防火墙的高效处理,通过SQL语法特征技术的引入能够实现对SQL语句的重写。

SQL语句重写是指在不改变原语义的情况下,对数据库防火墙捕捉到的SQL语句进行重写,替换原语句中的参数值。

SQL重写能够提高管理效率和操作速度,它是一个抽象的过程,SQL重写包括以下几个方面:

1.除了单双引号内的内容,小写字母全部变为大写字母;

2.准确区分正负号和加减号;

3.将SQL语句中的数值、单引号引起的字符串各自重写为统一的占位符;

4.将注释、换行重写为空格,将连续的空格合并为1个,去掉运算符两端等不影响语义的空格

以如下SQL语句为例:

Select +0.25 * money,sum(id) From “testdb”.accounts 

Where id = ' G1792 '  or name !=‘’/*this message come from Lisa*/

XSeure-DBF在SQL重写的基础上,根据SQL语法,对SQL进行了多级分类。SQL多级分类是将具有相同操作行为的不同语句合并为一类,为SQL信息的查看和策略的定制提供了便利,且SQL分类编码操作后,易于后续的计算、操作和存储。

SQL分类主要分为三级,分类的方向由细到粗,即二级分类是在一级分类的基础上进行的,三级分类是在二级的基础上进行的。

一级分类

基于目前的SQL重写,即替换所有的可变“参数”数据为固定的“参数(例如,#)”,并且将所有谓词全部大写化(格式化为大写字母)等。也就是说,一级分类的输出是经过“重写”后的SQL语句。

二级分类

在一级分类的基础上,对所有的谓词、函数、比较运算符进行编码后,生成摘要的字符串编码,该编码就是SQL的二级分类码。

三级分类

在二级分类的基础上,对所有的谓词比较运算符进行编码后,生成的摘要字符串编码,该编码就是SQL三级分类码。

根据SQL分类的原则,假如有如下SQL语句:

1:SELECT salary*1.5 FROM employees WHERE job_id ='PU_CLERK';

2:SELECT salary*2 FROM employees WHERE job_id='SA_MAN';

3:SELECT employee_id FROM department WHERE department_name = 'HR';

4:SELECT department_id FROM employees WHERE salary <5000;

5:SELECT sum(salary) FROM employees WHERE job_id ='PU_CLERK';

6:SELECT max(salary) FROM employees WHERE job_id='PU_CLERK';

那么按照分类码,DBFirewall看到的分析SQL,由三级到一级如下呈现:

SELECT  FROM  WHERE  =

SELECT FROM WHERE = 

SELECT SALARY*0 FROM EMPLOYEES WHERE JOB_ID='#' 

SELECT EMPLOYEE_ID FROM DEPARTMENT WHERE DEPARTMENT_NAME='#'

SELECT  SUM FROM WHERE =

SELECT SUM(SALARY) FROM EMPLOYEES WHERE JOB_ID='#‘

SELECT  MIN FROM WHERE =

SELECT MIN(SALARY) FROM EMPLOYEES WHERE JOB_ID='#‘

SELECT DEPARTMENT_ID FROM EMPLOYEES WHERE SALARY<0

SELECT  MIN FROM WHERE <

SELECT DEPARTMENT_ID FROM EMPLOYEES WHERE SALARY<0

SQL语句格式化重写后的结果为:

SELECT 0*MONEY,SUM(ID) FROM “testdb”.ACCOUNTS WHERE ID=’#’ OR NAME!=’’

SQL语法特征技术是数据库通讯协议解析能力的一个关键技术点,这个专利性的技术已经被行业领先的数据库安全厂商所掌握,将这项技术应用到数据库防火墙产品中,能够有效提高SQL解析能力,实现更为精准的危险语句拦截,提高数据库安全性能。