2

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

据我所知,它可以通过使用.NET 中的 log4net、nlog 等库来完成,或者可能还有其他我不知道的版本控制专用库。

或者它可以在数据库中完成,例如使用SQL Server 的更改数据捕获

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

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

4

4 回答 4

2

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

  • 应用程序:应用程序保留详细的日志操作以进行调试/调整。
  • 数据库:“官方”审计数据保存在数据库中,并作为我们存储过程的一部分添加。位于数据库中使得访问、控制访问变得微不足道,并使实时监控变得容易。
于 2013-03-13T09:43:23.547 回答
2

对于允许我们跟踪每个表的更改的基本审计,包括表中的数据,记录更改的内容、时间和人员,我们使用AutoAudit很幸运。它是一个开源包,可以为数据库中的任何或所有表添加自动审计。

我只在相对较小的项目(少于 20 个表,同时只有少数几个用户)上亲自尝试过,但效果很好。设置几乎不费吹灰之力,开箱即用的功能满足了我们的需求。

2013 年 11 月发布了对 AutoAudit 3.20 版的重大升级,具有以下新增功能:

  • 处理最多 5 个 PK 列的表

  • 性能提升比 2.00 版快 90%

  • 改进的历史数据检索 UDF

  • 处理需要 quotename [ ] 的列/表名称

  • 存档过程以使实时审计表更小/更快,但在存档 AutoAudit 表中保留旧数据

你可以在这里找到它。

于 2013-04-23T21:41:56.763 回答
1

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

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

SQL Server 审计(数据库引擎)

变更数据捕获并不是真正为审计而设计的,它旨在用于提供源系统上已更改的数据的摘要,以便可以轻松地被另一个系统使用。

编辑:

因此,如果您需要保留实际更改的数据,那么 CDC 可以做到这一点,但您将无法看到是谁更改了它,因此它不是审计。CDC 和审计的组合可以工作,但设置起来会很复杂。

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

于 2013-03-13T09:41:24.127 回答
0

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

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

于 2015-01-29T23:21:22.813 回答