18

我正在开发一个新的网络应用程序,我需要将数据库中的任何更改存储到审计表中。此类审计表的目的是,稍后在实际的物理审计中,我们可以确定在某种情况下发生了什么,谁编辑了什么以及在进行复杂计算时 db 的状态是什么。所以大多数审计表将被写入而不是读取。有时可能会生成报告。

我一直在寻找可用的解决方案

  1. AuditTrail - 简单,这就是我倾向于它的原因,我可以理解它的单个文件代码。
  2. Reversion - 看起来使用起来很简单,但不确定如果需要修改它会有多容易。
  3. rcsField 似乎非常复杂,对我的需求来说太多了

我还没有尝试过这些,所以我想知道一些真实的经验以及我应该使用哪一个。例如,哪一个更快使用更少的空间,易于扩展和维护?

4

3 回答 3

8

就我个人而言,我更喜欢在数据库中创建审计表并通过触发器进行填充,以便存储任何更改,甚至是来自查询窗口的临时查询。我永远不会考虑不基于数据库本身的审计解决方案。这很重要,因为对数据库进行恶意更改或进行欺诈的人不太可能通过 Web 界面而是直接在后端这样做。与外部黑客相比,这些事情更多来自心怀不满或盗窃的员工。如果您已经在使用 ORM,那么您的数据将面临风险,因为权限位于表级别而不是它们所属的 sp 级别。因此,更重要的是您要捕获对 dat 的任何可能更改,而不仅仅是来自 GUI 的更改。我们有一个动态过程来创建审计表,只要将新表添加到数据库中就会运行。由于我们的审计表只填充更改而不是整个记录,因此我们不需要在每次添加字段时都更改它们。

此外,在评估可能的解决方案时,请确保您考虑恢复数据以撤消特定更改的难度。一旦你有了审计表,你会发现这是你需要做的最重要的事情之一。还要考虑在数据库模式更改时维护信息的难度。

选择一个解决方案,因为它似乎是最容易理解的,通常不是一个好主意。在满足要求、安全性等之后,这应该是您选择标准中最低的。

于 2009-05-04T15:10:02.973 回答
3

我无法为您提供其中任何一个的真实经验,但想进行观察。

我假设 AuditTrail 是指Django wiki 上的 AuditTrail。如果是这样,我想你会想看看HistoricalRecords由同一作者(Marty Alchin aka @gulopine)在他的书Pro Django中开发的。它应该与 Django 1.x 一起工作得更好。

这是我将在即将到来的项目中使用的方法,不是因为它从技术角度必然优于其他方法,而是因为它符合该应用程序审计跟踪的“真实世界”期望。

于 2009-05-04T07:28:12.227 回答
2

正如我在我的问题中所说,rcField 似乎满足了我的需求,这很简单,我想将任何更改存储到我的表中,并且稍后可能会返回这些更改以生成一些报告。

所以我测试了 AuditTrail 和 Reversion Reversion 似乎是一个更好的完整应用程序,具有许多功能(我不需要),据我所知,它以 XML 或 YAML 格式将数据保存在单个表中,我认为

  1. 将在单个表中生成太多数据
  2. 要读取该数据,我可能无法使用已经存在的数据库工具。

AuditTrail 在这方面胜出,它为每个表生成一个相应的审计表,因此可以轻松跟踪更改,每个表的数据更少,并且可以轻松操作和用户生成报告。

所以我要使用 AuditTrail。

于 2009-05-17T06:35:11.830 回答