代码之家  ›  专栏  ›  技术社区  ›  Abe Miessler

跟踪神秘更新SQL的技巧?

  •  2
  • Abe Miessler  · 技术社区  · 14 年前

    我刚开始一份新工作,有人给了我一个漏洞来追踪和修复。基本问题是数据库记录中的一个字段正在被清除,没有人知道原因。到目前为止,我试过:

    • 检查表中的触发器, 没有。
    • 使用SQL监视表 最后一对的服务器探查器 希望这一错误 会再次发生但不幸的是 没有。
    • 检查所有的代码 插入/更新,但我没有看到 任何会导致这种情况的事情 问题。

    有没有人有其他的建议可以找到什么可以更新这个记录?我不是在检查我应该做的事情吗?有没有其他的信息来源,我应该看看?

    4 回复  |  直到 14 年前
        1
  •  2
  •   Jeffrey Jochum    14 年前

    创建将写入历史记录表的触发器。包括写入日期和用户的列。

        2
  •  2
  •   Remus Rusanu    14 年前

    :fn-dblog()将至少显示更新发生的时间(按顺序,而不是时间),以及该事务执行的其他操作。从有关此事务执行的其他操作的信息以及此时其他事务正在执行的操作来看,您至少应该能够缩小更新发生的上下文范围,从该上下文开始,代码检查是继续执行的可行选项。

    读取日志需要。。。日志,因此数据库应处于完全恢复模式。

        3
  •  0
  •   Sadhir    14 年前
    select
    schema_name = s.name,
    object_name = o.name
    from sys.sql_modules m join sys.objects o on m.object_id = o.object_id
        join sys.schemas s on o.schema_id = s.schema_id
    where definition like '%FieldName%'
    

    此查询将查看数据库中的所有对象(存储过程、函数、视图),并查找引用“FieldName”的任何位置。我将检查此查询返回的所有对象,以查看是否对该字段执行了任何异常操作。这可能非常乏味,因为它返回的结果可能比您所关心的要多,但这是捕获字段的所有引用的可靠方法

        4
  •  0
  •   Community CDub    7 年前

    如果您使用的是SQL Server 2008,则可以使用扩展事件来获取违规语句的完整堆栈跟踪。此处为示例代码 Create Trigger to log SQL that affected table?