1、基于复杂SQL查询的有效审计 -陈玉 本文作者:Raghav Kaushik、Ravi Ramamurthy 本文的主要目的: (1)总结有关查询语句在审计中的运用和传统审计系统组成; (2)提出对于对于复杂SQL查询的高效审计。 (3)对比几种不同审计系统的效率,以证明作者 提出的算法的可行性。 审计 查询语句在审计中的作用 审计系统组成架构 查询优化 审计算法 Baseline查询审计算法 opt审计算法 OPTReorder算法 审计优化实践与总结 Future work 审计审计 “审计”是数据库安全的一个重要方面。 “审计”是DBMS达到C2以上安全级别必不可少的一项指标。 审计功能
2、就是用户对数据库的所有操作自动记录下来放入审计日志中。DBA利用审计跟踪的信息,重现导致现有状况的一系列事件,找出非法存取数据的人、时间、内容。查询语句在审计中的作用查询语句在审计中的作用 查询是审计算法的重要组成部分,查询语句的好坏直接影响到审计的效率。审计系统的组成架构审计系统的组成架构 图1 审计系统组成架构 审计系统由在线审计和线后审计两部分组成。其中,在线审计用于产生查询和更新日志和相关的用户id。而线下审计主要是产生审计日志。 审计日志通过分析数据库的过去和现在的状态来分析数据库的安全性。 查询优化查询优化 常见的查询语句有单表查询、连接查询、嵌套查询。 查询优化在关系数据库中有非
3、常重要的地位。 它减轻了用户的选择存取路径的负担,用户提出“干什么”,不必指出怎么干。总体审计算法总体审计算法 输入相关的查询和更新语句和相关用户id信息,记作W,审计表达式AE。输出为不安全的W。具体过程如下:采用数据库审计适当的数据库状态;用交替更新语句将W分成数个子查询块QW。对于每个QW,用QUERYAUDIT(QW,AE)找到所有在QW中所有不安全的查询。对于所有的更新语句U,用UpDATEAUDIT(U)检查U是不是安全的。更新数据库状态,返回所有的不安全的查询、更新语句和相关用户id。 输入:查询和更新语句以后相关用户ID,记为查询量W,审计表达式AE; 输出:W中不安全的部分。
4、用数据库日志查看所有的适当的数据库状态;用选择性的更新语句将W分成若干只查询块QW;对于所有的QW,调用QUERYAUDIT(QW,AE)找到所有QW中不安全的查询;对于所有的更新语句U,调用UPDATEAUDIT(U)检验U是否安全;更新数据库状态,返回所有的不安全的查询和更新以及相关用户ID。Baseline查询审计算法查询审计算法 输入QW的查询语句和相关用户id,现有数据库状态D和元组t,输出不安全的QW子块。对于每一个Q属于QW,检查Q(D)和Qt(D)是否相等;如果不相等,则Q是不安全的。 该算法执行一个查询和它的差然后再辨别结果。这样的算法其实并不是最优的,它对于复杂SQL得查询
5、效果不佳。opt审计算法审计算法实体等价原则 不同于传统的基于所有数据库实体的规则,这里的规则只是基于当前的数据库实体。它分为LHS和RHS。 图2 实体等价原则 例如: 1、select *from orders where o_orderdate1997-01-01 2、select *from orders where o_orderdate1998-01-01 我们从第二个查询语句开始,到达它的差的逻辑平面。具体过程如下:在LHS中重写原始的平面作为一个算子。用RHS代替LHS。消除冗余的选择算子获得希望得到的原始差的平面。 图3 实体等价原则的拓展(a)(b) 对于复杂的SQL查询,
6、我们用如图所示的视图表示。 Apply 代表子查询。 通过实体等价原则引申,建立复杂的结构,如(d)。(c)(d)图4 复杂SQL查询的实体等价规则拓展OPT查询审计算法的具体步骤查询审计算法的具体步骤输入:只查询语句QW和相关用户ID,以及表T中的元组t;输出:QW不安全的部分。让D作为数据语言与QW相联系;I为实体等价规则;对于所有的Q属于QW,定义P和P为Q(D)和Qt(D)的逻辑平面;用I看能否由P到P,否则看Q(D)和Qt(D)是否相等;如果相等,则I用新的实体等价规则替代,如果不相等,Q是不安全的。 该算法如果实体等价规则增加了,那么步骤四也会跟着增加,这是一个很大的工作量。对于复杂得查询,整个查询审计是比较费时的。OPTReorder算法算法 该算法主要是在前面算法的基础上的改进。我们将查询进行重组排列。重组排列之后,如果后面的查询是前面查询的子查询,那如果前面的查询时安全的,后面的也会是安全的。审计优化实践与总结审计优化实践与总结采用SQL Server 2008、TPC-H基准 图5 执行时间和执行次数对比图6 OPT和OPT-REORDER基于Baseline算法的时间效率对比图7 审计失败率对比Future work 进一步提高审计效率; 查询和更新语句的相互作用和它们怎样更好的联系; 怎样更好的提取不安全的查询;