【问题标题】:Who deleted my sql table rows?谁删除了我的sql表行?
【发布时间】:2011-02-26 02:29:51
【问题描述】:

我有一个 SQL 表,正在从中删除数据。没有人知道数据是如何被删除的。我添加了一个触发器并知道时间,但是没有运行会删除数据的作业。每当从此表中删除行时,我还添加了一个触发器。然后我将删除的行和 SYSTEM_USER 插入到日志表中,但这并没有多大帮助。我有什么更好的办法来了解谁以及如何删除数据?是否有可能获得服务器ID或其他东西?感谢您的任何建议。

抱歉:我使用的是 SQL Server 2000。

**update 1*:了解数据是如何被删除的很重要——最好我想知道正在执行的 DTS 包或 SQL 语句。

【问题讨论】:

  • 您是否打开了日志记录?这是 MySQL 吗?您可以随时嗅探网络流量以查看哪些 IP 已连接到您的服务器。

标签: sql sql-server-2000 triggers


【解决方案1】:

只是猜测,但您是否在其中一个父表(由外键引用的表)上删除了级联。如果是这样,当您删除父行时,子表中的条目也会被删除。

【讨论】:

    【解决方案2】:

    如果恢复模式设置为“完全”,您可以查看日志。

    除此之外,删除对表的所有删除授权。如果它仍然发生,那么执行此操作的任何人都具有 root/dbo 访问权限 - 所以请更改密码...

    【讨论】:

      【解决方案3】:

      尝试暂时记录所有事务,即使它会损害性能。 MS 提供了一个 mssql 分析器,如果需要,包括快速版本。有了它,您应该能够记录事务。作为探查器的替代方案,您可以使用 trace_build 存储过程将活动转储到参考文件中,然后对单词“删除”或其他类似关键字的任何实例只使用“ctrl-f”。有关详细信息,请参阅此 SO 页面...

      Logging ALL Queries on a SQL Server 2008 Express Database?

      另外,这听起来可能很愚蠢,但请调查一下您所看到的内容未被删除的可能性。相反,调查记录是否只是被“更新”、“如果已经存在则替换”、“更新”或任何你喜欢的称呼。在 Mysql 中,这是 'INSERT ... ON DUPLICATE KEY UPDATE' 语句。我不确定 MSSQL 变体。

      【讨论】:

        【解决方案4】:

        您的数据库采用哪种恢复模式?如果它已满,Redgate log Rescue 是免费的,并且适用于 SQL2000,它可能会帮助您检索已删除的数据。 Overview Video 确实似乎显示了一个用户列。

        Or you could roll your own query against fn_dblog

        【讨论】:

          【解决方案5】:

          更改所有密码。给尽可能少的人删除权限。

          【讨论】:

            猜你喜欢
            • 2014-03-07
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-07-29
            • 1970-01-01
            • 2019-04-19
            • 1970-01-01
            • 2013-09-09
            相关资源
            最近更新 更多