【问题标题】:What is the best method of logging data changes and user activity in an SQL database?在 SQL 数据库中记录数据更改和用户活动的最佳方法是什么?
【发布时间】:2013-08-09 11:37:20
【问题描述】:

我正在启动一个新应用程序,并且想知道最好的日志记录方法是什么。数据库中的某些表需要记录每个更改以及进行更改的用户。其他表可能只需要记录最后修改时间。

在以前的应用程序中,我使用了不同的方法来做到这一点,但想听听其他人做了什么。

我尝试了以下方法:

  1. 在表格中添加一个“修改过的”日期时间字段以记录上次编辑的时间。
  2. 添加一个辅助表,仅用于记录主表中的更改。辅助表中的每一行代表主表中的一个更改字段。因此,主表中的一次记录更新可能会在辅助表中创建多条记录。
  3. 添加一个类似于 no.2 的表,但它记录三个或四个表的编辑,在附加字段中引用它相关的表。

你会使用什么方法并且会推荐?

还有什么是记录已删除数据的最佳方式?我从不喜欢用户可以从数据库中永久删除记录的想法,所以通常我有一个布尔字段“已删除”,当它被删除时它会更改为 true,然后它将在模型级别从所有查询中过滤掉.对此有何其他建议?

最后一个.. 记录用户活动的最佳方法是什么?目前我有一个记录登录/注销/密码更改等的表,根据操作是什么,给它一个代码 1,2,3 等。

希望我没有在这个问题上塞进太多东西。谢谢。

【问题讨论】:

  • 您应该查看“更改数据捕获”(CDC)。这是一个众所周知的数据库习语。 technet.microsoft.com/en-us/library/bb522489(v=sql.105).aspx
  • 您使用的是什么 RDBMS 系统?很多时候,RDBMS 将提供工具来捕获更改。跟踪登录活动也是供应商特有的。
  • @duffymo 这个方法会记录谁也做了更改?看起来它只是记录 sql 查询,我认为那里必须有一些控制器代码才能捕获此信息
  • 也许吧。你几乎没有提供任何细节,所以我的回答没有解决它们。深入了解它。

标签: sql database logging


【解决方案1】:

我知道这是一个非常古老的问题,但我想添加更详细的答案,因为这是我在谷歌上搜索到的关于 db logging 的第一个链接。

记录数据变化的方式基本上有两种:

  • 在应用服务器层
  • 在数据库层

如果可以,请在服务器端使用日志记录。它更加清晰和灵活。

如果您需要登录数据库层,您可以使用触发器,正如@StanislavL 所说。但是触发器会降低您的数据库性能并限制您将更改日志存储在同一个数据库中。

另外,您可以查看事务日志监控。 例如,在 PostgreSQL 中,您可以使用 逻辑复制 机制将 json 格式的更改从您的数据库流式传输到任何地方。

在单独的服务中,您可以接收、处理和记录任何形式和任何数据库中的更改(例如,只需将您获得的 json 放入 Mongo)

【讨论】:

    【解决方案2】:

    您可以向任何被跟踪的表添加触发器以监听插入/更新/删除。在触发器中,只需检查 NEW 和 OLD 值并将它们写入带有列的特殊表中

    table_name
    entity_id
    modification_time
    previous_value
    new_value
    user
    

    很难找出进行更改的用户,但如果您在您收听的表中添加changed_by 列,则可能。

    【讨论】:

      猜你喜欢
      • 2016-03-29
      • 1970-01-01
      • 2011-06-04
      • 2015-10-09
      • 2011-09-09
      • 2014-07-18
      • 2018-11-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多