代码之家  ›  专栏  ›  技术社区  ›  Brandon Wood

在SQL Server中实现审计表的建议?

  •  29
  • Brandon Wood  · 技术社区  · 16 年前

    我过去使用过的一个简单方法基本上就是创建第二个表,它的结构与我要审计的表的结构相同,然后在主表上创建一个更新/删除触发器。在更新/删除记录之前,当前状态将通过触发器保存到审核表中。

    虽然有效,但审计表中的数据并不是最有用或最容易报告的。我想知道是否有人有更好的方法来审核数据更改?

    这些记录的更新不应该太多,但它是高度敏感的信息,因此对客户来说,所有的更改都是经过审计和容易报告的,这一点很重要。

    6 回复  |  直到 8 年前
        1
  •  17
  •   Greg Hurlman    16 年前

    你期望这张桌子的书写和阅读量是多少?

    我使用了一个审计表,表、列、oldValue、newValue、用户和changeDateTime的列都是通用的,足以处理数据库中的任何其他更改,虽然有很多数据写入了该表,但该数据的报告足够稀疏,可以在一天中的低使用时间段运行。

    补充: 如果数据量与报告量存在问题,则可以将审计表复制到只读数据库服务器,从而允许您在必要时运行报告,而不会使主服务器陷入工作困境。

        2
  •  6
  •   John Emeres    11 年前

    我们用两张桌子设计这个。

    其中一个表包含有关事务的数据(数据库、表名、架构、列、触发事务的应用程序、启动事务的登录的主机名、日期、受影响的行数以及更多)。

    第二个表只用于存储数据更改,以便在需要时撤消更改并报告旧/新值。

    另一种选择是为此使用第三方工具,例如 ApexSQL Audit 或者更改SQL Server中的数据捕获功能。

        3
  •  2
  •   Community Egal    5 年前

    我发现这两个链接很有用:

    使用clr和单审计表。
    Creating a generic audit trigger with SQL 2005 CLR

    为每个被审计的表使用触发器和单独的审计表。
    How do I audit changes to SQL Server data?

        4
  •  1
  •   Mark Harrison    16 年前

    是否有内置的审计包?Oracle有一个很好的包,它甚至可以将审计更改发送到一个单独的服务器,而不需要任何修改SQL的坏人访问。

    他们的例子太棒了…它显示了如何警告任何修改审计表的人。

        5
  •  1
  •   GateKiller    16 年前

    OmniAudit 可能是一个很好的解决方案。我以前从未使用过它,因为我很乐意编写自己的审计程序,但听起来不错。

        6
  •  1
  •   Community Egal    7 年前

    我使用格雷格在他的 answer 并使用从表触发器调用的存储过程填充审计表。