坑爹的sQL Server 2008 R2审核功能

本来想要的功能,是想对用户表密码字段发起的查询,都生成一个审计记录。

 

数据库版本如下,即(SQL Server 2008 R2 + SP1 + CU6):

Microsoft SQL Server 2008 R2 (SP1) - 10.50.2811.0 (Intel X86)   Apr  6 2012 02:04:21  

Copyright (c) Microsoft Corporation  Enterprise Edition on Windows NT 5.2 <X86> (Build 3790: Service Pack 2)

 

看帮助文档,网上搜索相关信息,打补丁,折腾了差不多一整天,得出了这么个坑爹的结论:

1. 如果查询的内容是以参数的形式执行,那么生成的审核记录,根本得不到这个参数的值;

2.不能对指定字段的进行审核,例如我想只审核用户表的密码字段的查询。这个根本做不到。

 

这个问题,在微软的bug库中,也有很多人反映:

http://connect.microsoft.com/SQLServer/feedback/details/624935/sql-server-2008-database-audit-on-insert-update-and-delete-actual-sql-and-not-parameter-values

 

--创建一个服务器审核
use master
go
CREATE SERVER AUDIT DML_Audit
TO  FILE (FILEPATH='D:\XIAOTest\DML_Audit\',MAXSIZE=5MB,MAX_ROLLOVER_FILES=30)
go
alter SERVER AUDIT DML_Audit with (state=on)
go


--创建一个数据库审核规范:DML审核
use mydb
go
CREATE database AUDIT SPECIFICATION SELECT_Audit_Spec
FOR SERVER AUDIT DML_Audit

    ADD (SELECT ON dbo.tbUser by dbo,xiao)
WITH (state = ON)
GO

--然后分别执行如下语句以生成审核记录:

select * from tbuser

select * from tbuser where userid='000005'

exec dbo.tbUser_GetUserInfo '系统管理员'

 

--然后这坑爹的审核记录出来了:

第二行与第三行正常,第四行审核出来的就是执行的存储过程tbUser_GetUserInfo里面的内容:

select a.*,b.DeptName from tbUser a left join tbDept b on a.DeptID=b.DeptID where a.UserName=@UserName 

丫的,传入参数,这坑爹的SQL Server 2008 R2根本追踪不出这个具体的参数值!我很想当面问一下开发这个破功能的人:要这个审核功能有什么用?微软使用这个功能在什么实践中?

 

 

坑爹的审核,还不止如此:

SQL Server 2008 R2的在线帮助文档“ALTER DATABASE AUDIT SPECIFICATION”,有写这样的例子,可以指定某个字段进行审核:

但实际上,当你这么干时,却会出现错误33211:

消息 33211,级别 15,状态 1,第 0 行
不能为实体级审核指定子实体(如列)的列表。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值