博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
中安威士数据库审计之绑定变量审计
阅读量:3922 次
发布时间:2019-05-23

本文共 1554 字,大约阅读时间需要 5 分钟。

近年来,随着相关法律法规的完善、国家等级化保护要求,以及行业风险管理和内控指标的出台,安全审计产品慢慢的为大家所熟悉。而近年来数据盗窃和数据泄露等高危事件频发,数据安全也越来越受各大企业和单位的重视。数据库审计就是一款保护用户数据安全的产品。

上一期的数据库审计功能我们详述了双向审计,今天我们来聊一下绑定变量审计。

那么什么是绑定变量呢?

首先我们来看一下SQL语句的解析流程,如下图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZdVrKqxW-1603781688204)(http://www.csbit.cn/upload/images/2018/8/WX20180801-104055@2x.png)]

服务器进程接收到一条SQL语句,首先检查共享池中是否有之前解析过的相同的SQL语句,如果有,就从共享池的缓存库中找到之前解析生成的执行计划直接执行,SQL语句不需要再次解析,从而直接跳到执行阶段,这种解析称作软解析。

如果在共享池的库缓存中找不到对应的执行计划,则必须经过解析SQL的环节,生成执行计划,这种解析称作硬解析。

将解析过程进一步简化可以得到下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VfHefGHC-1603781688207)(http://www.csbit.cn/upload/images/2018/8/WX20180801-104233@2x.png)]

硬解析 涉及到大量的数据运算,会消耗大量的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。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-egkVnHZY-1603781688209)(http://www.csbit.cn/upload/images/2018/8/WX20180801-104444@2x.png)]

数据库是各种软件应用系统的基础设施,系统对于数据库的访问SQL千变万化,要想实现全面准确的,就要不断的跟进分析和研发,让审计的触角覆盖到数据库访问的每一个角落。

转载地址:http://cxhrn.baihongyu.com/

你可能感兴趣的文章
C# 9 新特性 —— 增强的模式匹配
查看>>
ASP.NET Core Controller与IOC的羁绊
查看>>
如何实现 ASP.NET Core WebApi 的版本化
查看>>
探索 .Net Core 的 SourceLink
查看>>
AgileConfig-如何使用AgileConfig.Client读取配置
查看>>
【gRPC】 在.Net core中使用gRPC
查看>>
整合.NET WebAPI和 Vuejs——在.NET单体应用中使用 Vuejs 和 ElementUI
查看>>
“既然计划没有变化快,那制订计划还有个卵用啊!”
查看>>
C#实现网页加载后将页面截取成长图片
查看>>
C# 在自定义的控制台输出重定向类中整合调用方信息
查看>>
【gRPC】ProtoBuf 语言快速学习指南
查看>>
C# 9 新特性 —— 补充篇
查看>>
Asp.Net Core使用Skywalking实现分布式链路追踪
查看>>
浅谈CLR基础知识
查看>>
Xamarin使XRPC实现接口/委托远程调用
查看>>
如何成功搞垮一个团队?
查看>>
.NET开源5年了,这些宝藏你还没get?
查看>>
【日常排雷】 .Net core 生产环境appsetting读取失败
查看>>
从内存中释放Selenium chromedriver.exe
查看>>
如何在 C# 中使用 MSMQ
查看>>