功能介绍数据安全管理专家--保护核心数据,捍卫网络安全。我们一直在努力! 在这里我们会为您提供***的安全资讯、安全知识、解决方案等,敬请期待!
近年来,随着相关法律法规的完善、国家等级化保护要求,以及行业风险管理和内控指标的出台,安全审计产品慢慢的为大家所熟悉。而近年来数据盗窃和数据泄露等高危事件频发,数据安全也越来越受各大企业和单位的重视。数据库审计就是一款保护用户数据安全的产品。
上一期的数据库审计功能我们详述了双向审计,今天我们来聊一下绑定变量审计。
那么什么是绑定变量呢?
首先我们来看一下SQL语句的解析流程,如下图所示:
服务器进程接收到一条SQL语句,首先检查共享池中是否有之前解析过的相同的SQL语句,如果有,就从共享池的缓存库中找到之前解析生成的执行计划直接执行,SQL语句不需要再次解析,从而直接跳到执行阶段,这种解析称作软解析。
如果在共享池的库缓存中找不到对应的执行计划,则必须经过解析SQL的环节,生成执行计划,这种解析称作硬解析。
将解析过程进一步简化可以得到下图:
硬解析 涉及到大量的数据运算,会消耗大量的CPU资源,例如下两条语句单独执行需要完整的硬解析两遍:
select * from userinfo where userid =’N0001’;
select * from userinfo where userid =’N0002’;
但如果运用绑定变量执行:
select * from userinfo where id= :1;
使:1分别等于100和200,则数据库解析时用占位符,然后再传值执行,这样就只需要执行一次硬解析,两SQL复用同一个执行计划,节省了硬解析的资源开销。
假设某条语句被重复执行了非常多次,那么使用绑定变量带来的好处是巨大的,能极大的节省资源,提高速度,因此是一种重要的性能优化手段被广泛应用于对性能有要求的系统中。
对数据库审计的影响
因为绑定变量的采用,传统的审计只能审计到含有变量字符的SQL,不包含具体值,这样会造成信息的丢失。
例如执行语句:
select * from userinfo where userid=:1; 1:=’N0006’;
传统方式的审计日志只会记录如下语句:
select * from userinfo where name=:1;
这样会造成如下后果:
(一)对审计日志中查询条件中的的具体值做检索时会导致检索结果不准确;
(二)不能审计到正确的SQL语句。
完整还原
不漏审是检验数据库审计系统的基本标准,如果要得到全面准确的审计,对绑定变量审计的功能必不可少,我们没有忽视这一小小细节,我们的审计功能很早就可以***审计到绑定变量的具体值,并还原成完整的语句,不遗漏任何一条SQL。
数据库是各种软件应用系统的基础设施,系统对于数据库的访问SQL千变万化,要想实现全面准确的审计,就要不断的跟进分析和研发,让审计的触角覆盖到数据库访问的每一个角落。