我需要审核企业Web应用程序中的修改操作(创建/删除/更新)。 然后,用户可能需要查看特定实体(例如,人)的更改历史,以决定是否执行操作。
据我所知,可以通过在.NET中使用像log4net,nlog,...这样的库来完成应用程序,或者还有其他特殊用于版本控制的库,我不知道。
或者它可以在数据库中完成,例如使用SQL Server的Change Data Capture。
使用内置数据库解决方案似乎更有效,但问题是:
在软件工程方面,将应用程序业务控制到数据库是否正确?
答案 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触发器)来帮助您审核该信息。