我想在 Web 应用程序中实现“取消删除”功能,以便用户可以改变主意并恢复已删除的记录。关于如何实现这一点的想法?我考虑过的一些选项实际上是删除有问题的记录并将更改存储在单独的审计表中,或者不删除记录并使用布尔“已删除”列将其标记为已删除。后一种解决方案需要额外的应用程序逻辑来在正常情况下忽略“已删除”的记录,但会更容易在应用程序端实现恢复记录。
我的老板昨天收到一个客户的询问,询问他们如何找出谁删除了他们 SQL Server 数据库中的某些数据(如果重要的话,它是快速版)。
我认为这可以从事务日志中找到(前提是它没有被截断) - 这是正确的吗?如果是这样,您实际上如何查找这些信息?
我需要在项目上设置历史功能以跟踪先前的更改。
假设我现在有两个表:
NOTES TABLE (id, userid, submissionid, message)
SUBMISSIONS TABLE (id, name, userid, filepath)
示例:我在笔记中有一行,用户想要更改消息。我想在更改之前和更改之后跟踪它的状态。
在这些表中的每一个中设置一列的最佳方法是什么,该列将说明某个项目是否“旧”。0 如果活动或1 如果删除/不可见。
我还想创建一个历史 ( AUDIT TRAIL) 表,其中包含id先前状态的 ,id新状态的 ,这些 id 与哪个表相关?
我们有一个只有大约 500 行的表,但这对我们来说非常重要。
我想查看发生在此表上的所有更改。应使用时间戳跟踪更改。
我不希望在应用程序代码中进行跟踪,因为我也想跟踪通过psqlshell发生的更改。
我对特定于 PostgreSQL 的解决方案感到满意,因为在这种情况下我没有使用不同的数据库。
今天早些时候,我注意到我所有的 Azure SQL 数据库服务器都从 v11 更新到了 v12。我是公司中唯一应该接触这些拨号的人,但不是我公司中唯一可以访问的人。由于这次升级不是我发起的,我想知道是谁发起的,以及这个计划外的更新是什么时候发生的。
我知道我可以写一封电子邮件给我公司的每个人,并礼貌地向WTF询问信息,但我宁愿用尽可能多的事实开始对话。另外,我倾向于认为这是 Microsoft/Azure SNAFU,因为升级所有服务器感觉太刻意了。
我可以使用以下方法执行查询:
SELECT deqs.last_execution_time AS [Time]
,dest.TEXT AS [Query]
FROM sys.dm_exec_query_stats AS deqs
CROSS APPLY sys.dm_exec_sql_text(deqs.sql_handle) AS dest
ORDER BY deqs.last_execution_time DESC
Run Code Online (Sandbox Code Playgroud)
但我也在寻找username执行这些查询的列。
我正在设计我的第一个电子商务模式。我已经阅读了一段时间的主题,并且对 anorder_line_item和 a之间的关系感到有些困惑product
一个product可以被购买。它有各种细节,但最重要的是unit_price。
Anorder_line_item有一个外键,指向product_id购买的、quantity购买的和unit_price客户购买产品的时间点。
我读过的大部分内容都说应该明确添加unit_priceon order_line_item(即不通过 引用product_id)。有道理,因为商店将来可能会改变价格,这会弄乱订单报告、跟踪、完整性等。
我不明白的是,为什么直接将unit_price值保存到order_line_item?
创建一个记录unit_pricea 更改的审计/历史表不是更好product吗?
当order_line_item被创建,所述的外键product_audit表,并将该价格可以从那里检索(通过引用)。
在我看来,使用这种方法有很多好处(减少重复的数据、价格变化历史等),那么为什么不更频繁地使用它呢?我还没有遇到使用这种方法的电子商务模式的例子,我错过了什么吗?
UDPATE:我的问题似乎与Slowly Changed Dimension 相关。我仍然感到困惑,因为缓慢变化的维度与数据仓库和 OLAP 相关。那么,缓慢变化的维度类型可以应用于我的主要业务事务流程数据库 (OLTP) 吗?我想知道我是否混合了很多概念,非常感谢一些指导。
在设置审计跟踪时,跟踪谁在表中更新或插入记录没有问题,但是,跟踪谁删除记录似乎更成问题。
我可以通过在插入/更新字段中包含“UpdatedBy”来跟踪插入/更新。这允许 INSERT/UPDATE 触发器通过inserted.UpdatedBy. 但是,使用删除触发器不会插入/更新数据。有没有办法将信息传递给删除触发器,以便它知道谁删除了记录?
这是一个插入/更新触发器
ALTER TRIGGER [dbo].[trg_MyTable_InsertUpdate]
ON [dbo].[MyTable]
FOR INSERT, UPDATE
AS
INSERT INTO AuditTable (IdOfRecordedAffected, UserWhoMadeChanges)
VALUES (inserted.ID, inserted.LastUpdatedBy)
FROM inserted
Run Code Online (Sandbox Code Playgroud)
使用 SQL Server 2012
有没有办法审核 MySQL 的登录?我希望能够为每个员工创建一个用户名,从而创建登录的审计跟踪。然而,谷歌搜索没有出现好的结果。
我们可以审计的越多越好。至少,知道谁何时登录会很好。最好看看谁在什么时候执行了什么查询。日志主要是为了告诉客户我们有它们,因为数据库中有潜在的敏感信息。
显然,能够审计每个用户(以及何时)执行的查询也将使我们能够更好地查明安全问题的原因,如果出现安全问题。
audit ×10
mysql ×3
sql-server ×3
delete ×2
postgresql ×1
schema ×1
transaction ×1
trigger ×1
upgrade ×1