在生产服务器中,我看到有2个重要的表突然丢失了。这对我们来说绝对是一个惊喜。由于这个原因,我们的申请失败了。最后,我们可以使用旧备份创建表,然后应用程序恢复正常状态。
现在的问题是谁删除了表格,我怎样才能找到谁删除了它们?
有没有办法可以窥探事务日志以找到相同或类似的内容?
[UPDATE]
这是基于Windows的应用程序。此服务器中未配置Internet连接。 拥有此特权的唯一方是客户和我们公司。在这一点上,两人都互相指责。
[更新结束]
由于
Nikhil Sreenivas
答案 0 :(得分:7)
更重要的是,知道谁删除了表格,您应该限制用户的访问权限。
我认为这个用户有权删除表格,这有点不好。我的您的应用程序用户是sa
或拥有DB
的完全权限,您应该尽快更改 。
了解发生了什么,如果是Web应用程序,您可能会在Web服务器日志文件中找到一些提示。对于桌面应用程序,如果您有一些日志,这可能会有所帮助。如果您的用户可以直接访问数据库服务器,我认为您无法对其进行太多操作。
答案 1 :(得分:1)
是。事务日志几乎肯定会包含此信息,并且有一些工具可以让您检查日志。多年来Lumigent出售了一款名为Log Explorer的优质产品。我不确定他们还卖掉它;他们没有积极推广它,所以你不得不打电话给他们。 ApexSQL有一个类似的工具,我没有用过;但它的成本是999美元。
还有一些产品可以持续运行并监控您的数据库,以确保在出现类似情况时存在审计跟踪。当然现在为时已晚。
(完全披露:我曾经为Lumigent工作过。)
答案 2 :(得分:1)
默认情况下,SQL Server会在system trace中跟踪other things跟踪:
包括监视服务器的事件 启动和停止,对象创建和 删除,日志和数据文件自动 增长和其他数据库更改。
系统跟踪每隔一段时间都会被回收,但在大多数情况下,它会将数据保留数天。打开跟踪并查找Object:Deleted个事件。该记录将包含发生这种情况的时间,执行更改的用户的登录名,发出命令的应用程序名称和客户端主机名。
答案 3 :(得分:0)
有多少用户拥有表删除权限?也许你可以简单地问他们所有人。
答案 4 :(得分:0)
由于您没有设置正确监视数据库的工具,因此您可能难以获取此信息。最好的办法是决定如何防止问题再次发生。
你说在这一点上,客户和你的公司都互相指责。事实是,无论个人放弃了什么,都是你的公司的错,因为你没有采取行动来保护你的数据库,你应该在设计数据库时使用它。首先,没有用户应该拥有drop table权限。最多只有两个人应该有权在prod,dba和他或她的备用人员上放下一张桌子。如果您使用存储过程正确设置数据库以进行数据访问,那么不是管理员的任何人都无法以任何形式或形式直接访问这些表。这就是为什么存储过程是获得数据库安全性的最佳方式。
其次,即使它不是一个网络应用程序,你应该确保你的设计防止注入攻击,因为即使是公司用户也会心怀不满并尝试这样的策略。第三,您应该设置DDL触发器来跟踪谁对结构进行了更改。在解决您创建的问题时,您还应该了解客户是否愿意为重要表添加审计工作,以便能够跟踪谁进行了数据更改。