日期:2014-05-18  浏览次数:20664 次

有一个表,数据莫明被修改、删除,甚至insert垃圾数据
.net+mssqlserver2005环境,数据库中有20多张表,但就这一个表出问题。

IIS日志上没有被SQL注入的痕迹,SQL端口防火墙只对WEB服务器开放,怀疑有两种可能:
1、程序BUG。
程序中有地方对该表有操作,在非常特殊的条件下触发,UPDATE或DELETE事件,但是在整个项目中查找表名关键字,未果。
存储过程中也没有类似操作。可能性基本排除。

2、公司内部有人登录服务器进行操作。
目前来看,虽然没有动机,但这种可能性最大,我想针对该表进行监控,如果数据发生变化时,记录客户端消息,如时间、应用程序、客户端IP等,但是找不到办法。

我尝试在触发器中查询系统表[活动监视器],但在after操作之后,系统表中已经查不到相关操作,请问有什么办法吗?

------解决方案--------------------
可以通过创建审计来监视具体表的操作,select,insert,delete都可以
给你个例子
SQL code

USE master
CREATE SERVER AUDIT testAudit TO FILE(FILEPATH='D:\TempSelectAudit\')
GO


CREATE DATABASE AUDIT SPECIFICATION testAudSpec FOR SERVER AUDIT testAudit
ADD (SELECT ON HumanResources.Employee BY Public)
GO


USE master
SELECT is_state_enabled,* FROM sys.server_file_audits
USE AdventureWorks
SELECT is_state_enabled,* FROM sys.database_audit_specifications
GO


USE master
ALTER SERVER AUDIT testAudit WITH (STATE=ON)
GO
USE AdventureWorks
ALTER DATABASE AUDIT SPECIFICATION testAudSpec WITH (STATE=ON)
GO


SELECT session_server_principal_name, statement, *
FROM fn_get_audit_file ('D:\TempSelectAudit\*',NULL, NULL)