SQL Server 2012:一种查看数据库是否已被篡改的方法?

时间:2013-12-26 17:24:53

标签: sql sql-server database sql-server-2012

我有一个微妙的情况,我的数据库中的一些记录莫名其妙地丢失了。每个记录都有一个序号,数字序列会跳过整个块。我的服务器程序还保存了接收并发布到数据库的所有事务的日志文件,这些丢失的记录确实出现在日志中,但不出现在数据库中。缺失记录的间隙恰好与日志中显示的记录的日期和时间一致。

该项目目前仍处于开发阶段,包括在我办公室的开发计算机上运行的服务器程序(由我在Visual Basic 2010中编写)。系统通过他们的iPhone从我们的现场人员检索数据(运行我也开发的专用应用程序)。数据库位于我们服务器机房中的另一台服务器上。

除了我以外,没有人可以访问我的开发服务器,后者保存着日志文件,但是还有一个人可以完全访问托管数据库的服务器:我们的头脑IT人员抱怨他相信他应该是这个项目的开发人员。

我很难相信他会破坏我的数据,但到目前为止还没有其他解释我可以看到。

无论如何,我的抱怨已经足够了。我需要知道的是,有没有办法确定谁对我的数据库做了什么?

4 个答案:

答案 0 :(得分:4)

如果您使用标识作为“序列号”,并且插入语句错误输出,即使没有插入记录,标识值仍会增加。除了“篡改”之外,这个问题的另一个可能原因。

答案 1 :(得分:1)

答案 2 :(得分:1)

如果您想实时了解更改,建议您考虑使用SqlDependency。这样,当数据发生变化时,您将立即收到警报,并可以立即检查哪个用户正在使用数据库(这也可以使用代码完成)。

您可以使用this代码示例。

考虑到这一点,您可以使用触发器并写入表活动用户来建立相同的效果。当然,如果您怀疑某人正在调查数据,使用SqlDependency可能是更好的方法,因为数据将存储在篡改数据库之外。

答案 3 :(得分:1)

您可以运行跟踪,例如远程探查器跟踪,它将获取包含DELETE关键字的所有SQL查询。这样,没有人会意识到查询被跟踪。您还可以定期查询默认跟踪以获取最后DELETE个命令: Maintaining SQL Server default trace historical events for analysis and reporting