.net+mssqlserver2005环境,数据库中有20多张表,但就这一个表出问题。
IIS日志上没有被SQL注入的痕迹,SQL端口防火墙只对WEB服务器开放,怀疑有两种可能:
1、程序BUG。
程序中有地方对该表有操作,在非常特殊的条件下触发,UPDATE或DELETE事件,但是在整个项目中查找表名关键字,未果。
存储过程中也没有类似操作。可能性基本排除。
2、公司内部有人登录服务器进行操作。
目前来看,虽然没有动机,但这种可能性最大,我想针对该表进行监控,如果数据发生变化时,记录客户端消息,如时间、应用程序、客户端IP等,但是找不到办法。
我尝试在触发器中查询系统表[活动监视器],但在after操作之后,系统表中已经查不到相关操作,请问有什么办法吗?
------解决方案--------------------
可以通过创建审计来监视具体表的操作,select,insert,delete都可以
给你个例子
- SQL code
USE masterCREATE SERVER AUDIT testAudit TO FILE(FILEPATH='D:\TempSelectAudit\')GOCREATE DATABASE AUDIT SPECIFICATION testAudSpec FOR SERVER AUDIT testAuditADD (SELECT ON HumanResources.Employee BY Public)GOUSE masterSELECT is_state_enabled,* FROM sys.server_file_auditsUSE AdventureWorksSELECT is_state_enabled,* FROM sys.database_audit_specificationsGOUSE masterALTER SERVER AUDIT testAudit WITH (STATE=ON)GOUSE AdventureWorksALTER DATABASE AUDIT SPECIFICATION testAudSpec WITH (STATE=ON)GOSELECT session_server_principal_name, statement, *FROM fn_get_audit_file ('D:\TempSelectAudit\*',NULL, NULL)