数据库安全审计技术之参数化语句审计(2)
作者: 安华金和 发布时间:2017-02-04

前文中,我们简单介绍了数据库安全审计技术中难点之一:参数化语句的审计。SQL语句的句柄维护和参数还原是数据库审计中两个技术关键点。在实际审计中,即使简单的SQL语句,也可能出现漏审,而对于更为复杂的批量参数绑定的语句,数据库安全审计产品的语句解析能力能够则明显显现。

批量参数绑定是DBMS提供商为了提供更为高效的数据操作速度,而提供的一批参数发送,语句多次执行;该方式通过更少的网络通讯次数、更少的SQL层的语境切换等大幅度提高编程效率。这种执行方式在一般的编程中很少使用,但在类似于电信运营商的计费系统这样的环境,对性能的要求很高,往往需要每秒接近上万条的插入或更新,则是一种较为常见的使用方式;因此对于运行商、证券金融、互联网这样的瞬时交易量非常大,需要采用最为高效的数据处理方式的应用环境需要对这种参数绑定方式兼容。

下面是一个批量插入的示例,仅仅是为了检验审计产品是否支持该功能:

PreparedStatement statement = connection.prepareStatement("INSERT INTO Tbl1 VALUES(?, ?)");

//记录1

statement.setInt(1, 1);

statement.setString(2, "Cujo");

statement.addBatch();

//记录2

statement.setInt(1, 2);

statement.setString(2, "Fred");

statement.addBatch();

//记录3

statement.setInt(1, 3);

statement.setString(2, "Mark");

statement.addBatch();

//批量执行上面3条语句.

int [] counts = statement.executeBatch(); 

在上面实例中,我们需要考察所使用的数据库审计产品,能否准确地审计下3条插入语句并且每条语句都能准确地匹配上相应的参数;或者审计为1条插入语句,3组参数。

这只是批量插入中一个不算困难的挑战,更为复杂的是更大批量的情况,Oracle和SQL Server这样的考虑更为精细的产品,会对数据采用压缩的处理方式,比如对重复值的表达,对Null值的表达等;数据库审计产品是否能有效地还原每个批量成员的值,将会是一个挑战。

当前我们所见到的绝大多数数据库审计产品在批量参数绑定的执行语句的情况下,都无法准确审计下批量查询中所执行的语句和对应的参数。正是基于多年的数据库内核研发经验,安华金和的技术团队拥有对复杂SQL语句的理解和分析能力,对于类似上面的复杂语句形式,安华金和的数据库安全审计产品依然能够准确解析并审计记录。