问题标签 [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.
sql - Updating a table (with audit trigger using Service Broker) in a Transaction
We have implemented Auditing capability using service broker and have implemented triggers on the tables that need to be audited. The issue we are facing is when we try to update an auditable table from within a transaction, it throws up an error -
The current transaction cannot be committed and cannot support operations that write to the log file. Roll back the transaction.
However, if we remove the trigger from the auditable table, it all works absolutely fine. is it not possible to have a table (with trigger) be updated within a transaction or are we missing something at our end ?
Update Transaction
Trigger
Stored Proc (procAuditSendData) called from within the trigger
( @AuditedData XML ) AS BEGIN BEGIN TRY DECLARE @dlgId UNIQUEIDENTIFIER, @dlgIdExists BIT SELECT @dlgIdExists = 1
END
mysql - 如何设计带有 undo-redo 的 SQL 数据库?
我试图弄清楚如何设计我的数据库表以允许撤消重做。
假设您有一个具有以下结构的任务表:
现在假设在几天内多次登录并进行了多次编辑;但用户想回到其中一个版本。
- 您是否有一个单独的表来跟踪更改 - 或者 - 您是否会尝试将更改保留在任务表中(“幽灵”行,因为没有更好的术语)?
- 您会跟踪所有列还是只跟踪每次更改的列?
如果重要的话,我正在使用 MySQL。另外,如果重要的话,我希望能够显示历史记录(ala Photoshop)并允许用户切换到任何版本。
额外问题:您会在更改时保存整个memo
单元格还是尝试仅保存增量?我问的原因是因为memo
单元格可能很大,每次修订只能更改一个单词或字符。诚然,保存增量需要解析,但如果不经常期望撤消,那么节省空间而不是处理时间不是更好吗?
感谢您的帮助。
database - 数据历史跟踪最佳实践
我们需要在某个表上跟踪数据修改。我们需要一些关于如何完成这项任务的建议。我们有两条街道要遵循。1)创建一个表,记录如下:userid、修改日期、表名、fieldname、fieldtype、fieldvalue。这样,我们将使用触发器进行跟踪。
2)在我们需要跟踪历史的所有表上添加一个状态字段,称为状态。该字段将具有以下值:I = 插入 - D = 删除 - M = 已修改,具有相对日期和修改。这样我们总能知道最新的有效行和之前的所有数据修改 3) 就在你的脑海里 你有什么建议?
sql-server-2008 - 如何在 SQL Server 2008 中写入外部审计数据库?
我有一个 SQL Server 2008 数据库,其中有 10 个 Windows 用户,他们都有权插入、更新和删除表。每个表都有一个触发器,用于写入不同数据库中的审计表。
目前为此,我还必须授予用户对审计数据库的写入权限,否则触发器将引发错误。
我只能为每个单独的用户授予插入权限,但我希望可能有一个更优雅的解决方案来解决这个问题。特别是从用户被删除/添加的角度来看,这意味着将它们设置在两个数据库而不是一个数据库中。
理想情况下,我想使用一个帐户来完成所有审计工作。
database - SQL Server 2005 审计
背景 我有一个生产 SQL Server 2005 服务器,4 个不同的应用程序连接到该服务器并进行更改。没有外键,在某些情况下也没有主键。不幸的是,将整个事情扔掉并从头开始不是一种选择。所以我的解决方案是开始将每个应用程序迁移到服务层方法,以便只有一个应用程序直接连接到数据库。
但是,在编写该服务层并迁移所有应用程序之前,需要解决一些问题。
因此,与其进行更改并希望它们不会破坏 4 个写得不好的应用程序中的任何一个(无法快速测试所有功能),我的解决方案是开始审核数据库
问题 如何审计 SQL Server 2005 上的每个用户正在访问/更新/调用哪些存储过程、表、列、视图。
我可以找出哪些表正在更新,但我不知道哪些列和哪些用户。我也不知道某些表是否仅通过存储过程/视图访问。
我知道 SQL Server 2008 具有更好的审计功能,但如果我可以在不花钱的情况下做到这一点,那就太好了。也就是说,如果最好的解决方案是升级或购买也是一种选择的软件。
sql-server - SQL-Server 触发更新以进行审计
我找不到一种简单/通用的方法来注册审计表,在某些表上更改了列。
我尝试以这种方式在更新后使用触发器来做到这一点:
首先是审计表定义:
接下来是任何表中的 AFTER UPDATE 触发器:
问题
- 当我使用 exec 函数时,Inserted 和 Deleted 丢失了上下文
- 似乎 colnumber 它并不总是一个相关数字,似乎如果您创建一个包含 20 列的表,然后删除一个并创建另一个,最后一个有一个数字 > @colcount
我一直在为整个网络寻找解决方案,但我无法弄清楚
任何想法?
谢谢!
c# - “只获取更新”设计
我的系统只需要从服务器获取更新。如何设计我的数据库?有审计表还是有其他设计机制?我的计划是从我的设备发送一个更新 ID,并检索新的更新。如何真正实现这一点?
sql - 使用审计表时查询帮助
假设我有两张表,一张包含以下列称为租约期:
租户交易名称、套件 ID、租赁 ID、建筑 ID
另一个,称为lease_period_audit,具有以下内容:
audit_date、audit_type、tenant_trading_name、suite_id、lease_id、building_id
每次在lease_period 上更新记录并在lease_period_audit 上进行条目,状态为“已更新”。我正在尝试查找仅对tenant_trading_name 字段进行的所有更新,但没有任何成功。到目前为止,我有以下内容:
我的思维过程中的缺陷在哪里?如何做到这一点/我应该如何考虑这个?
api - PUT vs POST 在审计表或修订历史情况下
假设我有一个更新记录的 REST 方法。这显然是一个 POST,因为它正在更新资源。然而,在同一个动议中,需要在审计或修订历史表中创建新记录。
这里是否有使用 POST 或 PUT 的标准或最佳实践?
REST 方法是来自用户端发生的事情,还是来自数据库中发生的事情?
一种可能性是只调用一种方法,该方法更新一个表中的记录并在另一个表中创建新记录。
另一种可能性是强制 POST 只更新一个表,并且需要一种额外的方法来在审计表中执行 PUT。这迫使使用 2 种方法并将责任推给开发人员,我不太热衷于此。
sql - 在内部查询中选择最大值<在外部查询中选择另一个
我有两个审计表:Trip_aud 和 Event_aud。它们是在 Envers 中创建的,但我使用 SQL 查询它们。它们与域表基本相同,除了每次更改时都会增加一个修订值,并且在审计表中插入一些元组。
当 Trip 从某个状态(PLANNING
-> EXECUTING
)发生变化时,我会存储它的当前修订版,因此之后我可以将执行的内容(例如,离开时间)与计划的内容进行比较。这些事件(离开、停止、等待......)存储在 Event 中,并带有指向 Trip 的指针。事件也被审计。
Envers 像 CVS 系统一样工作:如果我在给定修订版中查询某个元素,它会搜索最大修订版小于给定修订版的元组。我感兴趣的版本是 Trip 中的版本,当它改变状态时存储。如何从给定修订版的行程中选择所有事件?
这是桌子的样子。org_rev
是状态更改的行程修订。
如果我想要第 3 版的旅行和活动,我会得到
在修订版 44 中,当规划完成时,它是
我进行了以下查询来比较计划和执行,但它什么也没返回!它在 EVENT_AUD 中进行自联接,驱逐仅在修订顺序上不同的元组重复项,并尝试选择rev
小于org_rev
行程的最大值。
奇怪的是,如果我t.org_rev
用 44 替换,它可以工作!我究竟做错了什么?
谢谢你的帮助!
META:是否希望以 CSV、XML、INCLUDE INTO 或其他任何形式提供一个小数据库示例,以便人们可以测试我要求的 SQL?我怎样才能附上这个问题?