【问题标题】:Is this an appropriate database design if I wanted to audit my table?如果我想审计我的表,这是一个合适的数据库设计吗?
【发布时间】:2018-09-21 05:00:30
【问题描述】:

这是我第一次为 PoS WPF 应用程序创建审核日志,我想知道我究竟如何实施审核系统,因为似乎每个可用选项都有其起伏。到目前为止,我没有阅读大量文章/线程,而是缩小了一些关于审计日志的常见做法:

1.触发器 - 不幸的是,由于我的应用程序的性质,我无法使用触发器,因为它无法知道哪个用户完成了操作。所以我所做的是创建一个存储过程,它将处理客户插入以及客户日志插入及其详细信息。 Customer_Id 将在使用存储过程时由应用程序提供。

2。有一个新旧值 - 我最初的计划是只包括后者,因为我可以用它之前的行中的新值引用它的旧值,但是存储旧值和新值似乎更明智、更复杂——明智的。

3.为日志使用单独的数据库 / 4. 外键 - 这可能是我主要关心的问题,如果我决定为审计表使用单独的数据库,那么我无法为客户和员工设置外键参与。

我创建了一个模型 erd,其中包含要在 wpf 应用程序上显示的主从表结果,以向管理员显示日志,并且非常希望您对可能出现的问题的想法(还有一个员工表,但是我忘了说):

https://ibb.co/dheaNK

这里有一些信息可能会有所帮助:

  1. 数据库将与 wpf 应用程序一起驻留,后者是一台计算机。

  2. 客户数量将少于 1000。

  3. 正式员工人数为3人。

  4. 管理员数量为2。

【问题讨论】:

    标签: sql-server database-design


    【解决方案1】:

    您可以在 SQL Server 数据库上为特定表启用CDC Change Data Capture 这将使您能够收集记录在特殊表中的数据库表上的所有数据更改。 你也可以参考official documents

    这里是 DML 命令列表以及如何在为源数据库表创建的 CDC 表中记录数据更改

    CDC 的优点在于它是 SQL Server 的默认设置,您无需为日志记录做任何事情。唯一的要求是 SQL Server 代理应该正在运行,以便更改可以反映在日志表上。

    【讨论】:

    • 我如何才能知道是哪个员工做出了改变?在我的头顶上,因为会有一个登录表,如果更改是在他们的登录/注销日期时间之间完成的,我应该将其用作提交更改的用户的基础吗?
    • 哦,我还考虑过添加另一列带有预定选项的“原因”,以便管理员对创建/编辑/启用/禁用背后的原因有更好的了解,那将如何并入疾控中心?
    • CDC日志表实际上是源表的反映。如果您在登录表中添加这些列,您也会在 CDC 表中看到这些值
    • 事实上,对于登录跟踪,您还可以使用 SQL Server 审计功能 kodyaz.com/t-sql/sql-server-login-auditing.aspx 。当然,在这种情况下,您将无法提供原因等其他信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-01
    • 2010-09-24
    • 2021-10-15
    • 2013-07-09
    • 1970-01-01
    相关资源
    最近更新 更多