数据库或应用程序中的审计

时间:2013-03-13 09:34:22

标签: sql-server logging auditing cdc

我需要审核企业Web应用程序中的修改操作(创建/删除/更新)。 然后,用户可能需要查看特定实体(例如,人)的更改历史,以决定是否执行操作。

据我所知,可以通过在.NET中使用像log4net,nlog,...这样的库来完成应用程序,或者还有其他特殊用于版本控制的库,我不知道。

或者它可以在数据库中完成,例如使用SQL Server的Change Data Capture

使用内置数据库解决方案似乎更有效,但问题是:

在软件工程方面,将应用程序业务控制到数据库是否正确?

4 个答案:

答案 0 :(得分:2)

在我公司的应用程序中,我们登录这两个地方,但用于不同的用途:

  • 应用程序:应用程序保留详细的日志操作以进行调试/调整。
  • 数据库:“官方”审核数据保存在数据库中,并作为存储过程的一部分添加。在数据库中,访问,控制访问和实时监控变得简单易行。

答案 1 :(得分:2)

对于基本审核,它允许我们跟踪每个表的更改,包括表中的数据,记录更改内容,何时以及由谁,我们与AutoAudit一起运气好。它是一个开源软件包,可以为数据库中的任何或所有表添加自动审计。

我只是亲自在相对较小的项目(少于20个表,只有少数几个同时用户)上尝试过它,但它运行得很好。设置几乎不需要任何努力,开箱即用的功能满足了我们的需求。

AutoAudit版本3.20的重大升级于2013年11月发布,具有以下附加功能:

  • 处理最多包含5个PK列的表

  • 性能提升比版本2.00快<90%

  • 改进了历史数据检索UDF

  • 处理需要引用[]

  • 的列/表名称
  • 存档过程,以保持实时审核表更小/更快但保留旧数据存档AutoAudit表

你可以找到它here

答案 2 :(得分:1)

您使用的SQL Server版本和版本是什么? SQL Server 2008 +原生支持审计,这是2008和2008 R2中的企业版功能,我相信,但SQL Server 2012标准版中提供了服务器级审计,只有数据库级审计才是企业功能。

有关详细信息,请参阅以下链接:

SQL Server Audit (Database Engine)

更改数据捕获并非真正用于审计,它旨在用于提供源系统上已更改的数据摘要,以便其他系统可以轻松使用它。

编辑:

因此,如果您需要保留已更改的实际数据,那么CDC可以执行此操作,但您将无法查看是谁更改了它,因此它不是审计。 CDC和审计的组合可以起作用,但设置起来会很复杂。

最简单的方法可能是使用触发器来更新,插入和删除维护历史表,添加审核信息,例如修改发生的时间以及执行操作的人员。这也意味着您不必使用SQL Server的企业版,因为可以在所有版本上定义触发器。

答案 3 :(得分:0)

是的,我建议在数据库中执行此操作。这个解决方案会更快。 在软件工程方面,它是正确的,因为您将使用数据库作为解决方案,但您将创建另一个层(UI)以从数据库中检索信息。

如果您的SQL Server不是企业版,您可能需要手动创建触发器,或者购买帮助工具(如apexsql触发器)来帮助您审核该信息。