问题标签 [audit-tables]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
979 浏览

database-design - 对于包含大量记录的审计表,这是一个好的设计吗?

我有一个表格,可以按每件单品跟踪库存数据。这是表格的简化版本(排除了一些非关键字段):

每次给定部分发生问题时,都会创建一个新的审计记录。例如,我的产品 ABC 第一次添加到库存时,我会得到如下记录:

如果 ABC 序列号 555 的成本发生变化,我得到一个新记录:

如果这件作品被售出,我会得到另一张唱片:

如果引入一条新的 ABC,我得到这个记录:

我需要能够在任何时间点尽可能快地获得一组给定产品的现有库存价值。

使用上面的示例,如果我想获取 2009 年 1 月 2 日的产品 ABC 的库存值,我需要为每个唯一的产品/序列号组合选择01/03/之前的最新记录2009 年,状态为“OnHand”,然后将费用加起来。(我不能 100% 确定这个 select 语句在这一点上会是什么样子,但我会做一些实验)。

我的问题:对于我所描述的审计表类型,这是一个好的结构吗?也就是说,如果索引得当,它是否适合快速查询?(我试图想象当这张表增长到数百万行时会发生什么。)

我是否应该将历史记录拆分到一个单独的表中,并且只将每个 ProductID/SerialNumber 组合的最新记录留在“活动”表中?

任何反馈/建议/评论/链接表示赞赏。

谢谢!

0 投票
1 回答
2339 浏览

mysql - 获取触发器以仅在审计表中插入更改的列值

我正在使用触发器将更改存储在审计表中,我只想存储已更改列中的值。

目前这也将未更改的值存储在审计表中,这是不可取的。

仅将更改的列存储在我的审计表中的最佳方法是什么?

0 投票
4 回答
2768 浏览

sql-server - 在 MS SQL Server 中尽量减少锁定附加表的建议?

我正在编写一些将在生产中运行的日志记录/审计代码(不仅仅是在抛出错误时或在开发时)。在阅读了 Coding Horror 在死锁和日志记录方面的经验后,我决定应该寻求建议。(Jeff 的“不记录”解决方案对我不起作用,这是法律规定的安全审计)

是否有合适的隔离级别来最小化争用和死锁?我可以添加到插入语句或存储过程中的任何查询提示?

我非常关心除审计表之外的所有事务的事务完整性。这个想法是,将记录这么多,如果一些条目失败,这不是问题。如果日志记录停止了其他一些事务——那就不好了。

我可以登录到数据库或文件,尽管登录到文件的吸引力较小,因为我需要能够以某种方式显示结果。记录到文件将(几乎)保证记录不会干扰其他代码。

0 投票
2 回答
2374 浏览

sql-server-2005 - 审计触发器:使用 INSERTED 或 DELETED 系统表

最近在我们的讨论中出现了如何审计表的话题……所以我喜欢你对解决这个问题的最佳方法的看法。我们在我们的数据库中混合了这两种方法(这并不好),因为每个以前的 DBA 都做了他/她认为正确的方法。所以我们需要改变它们以遵循任何一种模型。

方法 1:仅在审计表中存储那些从主表中替换/删除的记录(使用系统表 DELETED)。因此,对于主表中的每个 UPDATE 和 DELETE,被替换的记录被插入到审计表中,其中 'Audit_Type' 列作为枯萎的 'U' (用于 UPDATE )或 'D' (用于 DELETE)

INSERT 未经审计。对于任何记录的当前版本,您总是查询主表。对于历史,您可以查询审计表。

优点:看起来很直观,可以存储以前版本的记录缺点:如果您需要了解特定记录的历史记录,则需要将审计表与主表连接起来。

方法 2:在审计表中存储进入主表的每条记录(使用系统表 INSERTED)。

在主表中插入/更新/删除的每条记录也存储在审计表中。因此,当您插入一条新记录时,它也会插入到审计表中。更新后,新版本(来自 INSERTED)表存储在 Audit 表中。删除时,旧版本(来自 DELETED)表存储在审计表中。

优点:如果您需要了解特定记录的历史,您可以将所有内容集中在一个位置。

虽然我没有在这里列出所有方法,但每种方法都有其优点和缺点?

0 投票
1 回答
492 浏览

.net - Web 应用程序审计

当应用程序作为系统帐户连接到数据库时,如何审计 Web 应用程序特别是数据库更改?

我想使用一个简单的数据库触发器来写入审计表,但我不确定如何添加已登录的用户而不是实际执行工作的帐户。

我已经阅读了一些关于身份流的文章,但我并不完全理解这个概念。

0 投票
4 回答
9248 浏览

hibernate - 如何从我的审计表中删除条目?

我目前正在使用 Hibernate Envers。

如何删除与我要删除的实体相关的审计表中的条目?我的实体与其他实体没有关系。

我发现我必须在onPostDelete自定义侦听器的方法中这样做:

我已经阅读了文档,论坛,很多东西,但我无法弄清楚。也许不可能,我不知道。

以前有人做过吗?

0 投票
1 回答
583 浏览

database-design - 审计表数据库设计:为连接表创建审计表是否有意义

我们正在为那些需要在 PostgreSQL 8.4 上使用触发器进行审计的实体表创建单独的审计表。

我们有一些连接表。例如:Family_Contact 是一个连接表。

家庭有 1 个或多个联系人。每个联系人都有一个地址。所以,我们有下面的表结构。

为了审计一个家庭,我们需要以下表格,这些表格是上述表格的副本。

Family_Contact_audit 是一个 AUDIT 连接表。

问题:为联接表创建单独的 AUDIT 表是否有意义?有替代品吗?我们将使用审计表进行报告。

谢谢,

0 投票
1 回答
1364 浏览

sql - 比较两行数据之间的值并仅显示不同的列

在以前的应用程序版本中,我们使用特定字段作为主键,但由于该字段可能代表不同系统中的不同身份,因此我们将其设为非重要字段(即不是主键或复合主键的一部分)我们没有其他系统,但用户仍然使用该字段作为主要的识别方法。

问题在于审计......以前我使用单个表对数据库进行所有审计,使用浮动的通用触发器使用新值旧值模式转储数据。除了一件事,这仍然可以正常工作。我已将联系信息移动到一个单独的表中,该表与原始表的新主键相关联。因此,当进行更改时,审核日志中会显示不熟悉和未使用的主键,而不是现在无关紧要的 foreignSystemID ...

我开始采用一对一的复制审计方法,以便对任何表的任何更改现在都写入不同模式中的镜像。问题归结为向用户显示更改。他们习惯于查看仅显示特定医生更改值的报告...

我的问题是使用 sql 查询和 Crystal 报告,我如何才能只显示审计表中行之间的更改列值。我看过枢轴命令,但我认为这对我没有帮助。我还查看了脚本中比较列并确定它们是否不同并将它们写入表中的代码。

我真的在这里旋转,这是我要解决的关键问题。在此先感谢您的帮助...

我们已经足够早地投入生产,如果需要我可以改变我的变更跟踪方法,但它需要尽快。谢谢

编辑:

我的老板和我在这方面做了一些工作,这就是我们开始的工作......我想获得更多的意见和选择......以及......谢谢......

0 投票
1 回答
17844 浏览

oracle - “按会话审核创建会话”与“按访问审核创建会话”?

当我通过以下方式为创建会话启用审核时:

然后我查询以下内容:

结果是:

但是,当我通过以下方式为创建会话启用审核时:

然后我查询以下内容:

结果是一样的:

为什么?你有什么主意吗?

0 投票
3 回答
1803 浏览

sql-server-2008 - TransactionScope + 审计表 + 在存储过程中提交事务

我的公司正在使用 SQL Server 2008。我正面临一个存在事务问题的审计表。

我有一个存储过程。

我有一块 VB.net 代码

但是,没有记录插入 AUDIT_TABLE。我在 MSDN http://msdn.microsoft.com/en-us/library/ms189336.aspx中找到了原因

我的问题是如何使用存储过程插入记录 AUDIT_TABLE。

谢谢!