Azure SQL 和 EF6 审计记录
AzureSQL and EF 6 Auditing Records
我目前有一个系统,其 EF 6 绑定到 Azure SQL 后端。每个应用程序实体都有一个用于创建者、最后修改者、删除者的字段。这些用户字段中的每一个都与用户实体 table 中的用户相关联。该应用程序适用于一家刚刚将部分内部流程转移到网上的小公司。到目前为止它运行良好,但现在公司正在显着增长,他们希望添加对业务更重要的功能。因此,我必须更新我的审计模式,以更好地指示系统在任何时间点发生的事情(不仅仅是最后一次修改,而是在任何更改发生之前的数据的每次修改和快照以及其他一些不同的项目)。
是否有处理捕获审计记录(创建、修改、删除等)的最佳方法?
目前,我正在考虑重写 EF6 的 SaveChanges/Async 方法并捕获更改前的记录,post 保存并序列化它们并将它们保存到带有时间戳和用户 ID 的 documentdb。我知道这应该可行,但是有没有更好的方法可以让我不在我的代码中这样做并且可以在其他地方处理?我也在考虑将序列化的实体树发布到 EventGrid,然后让 webjob 订阅该 EventGrid 并让它处理审计,但我不确定这是否过大。
我知道如果我使用的是 SQL 服务器,我可以执行 ChangeDataCapture,但这在 AzureSQL 中不可用。
更新:
有一个已提出的已经回答的问题,它讨论了覆盖 SaveChanges/Async 方法以更新特定跟踪实体的值作为一种审计方式。这将按照我上面概述的方式在一般意义上起作用。但是,我需要像 SQL 中的 ChangeDataCapture 这样的东西,其中保存了对行的每个更改,因此可以创建记录的历史跟踪以准确查看发生了什么以及谁做了什么。虽然我相信我计划的处理事情的方式会奏效,但下面是更好的答案(接受的答案)。时间 tables 的答案将使我能够立即开始记录每一行的变化,并从该数据中,能够准确地看到谁在什么时间点做了什么。
要跟踪 "what has happened in the system at any point in time",您可以使用 Azure SQL 内置的功能,临时表。 "Temporal Tables are a new programmability feature of Azure SQL Database that allows you to track and analyze the full history of changes in your data, without the need for custom coding"。参见:
https://docs.microsoft.com/en-us/azure/sql-database/sql-database-temporal-tables
我目前有一个系统,其 EF 6 绑定到 Azure SQL 后端。每个应用程序实体都有一个用于创建者、最后修改者、删除者的字段。这些用户字段中的每一个都与用户实体 table 中的用户相关联。该应用程序适用于一家刚刚将部分内部流程转移到网上的小公司。到目前为止它运行良好,但现在公司正在显着增长,他们希望添加对业务更重要的功能。因此,我必须更新我的审计模式,以更好地指示系统在任何时间点发生的事情(不仅仅是最后一次修改,而是在任何更改发生之前的数据的每次修改和快照以及其他一些不同的项目)。
是否有处理捕获审计记录(创建、修改、删除等)的最佳方法?
目前,我正在考虑重写 EF6 的 SaveChanges/Async 方法并捕获更改前的记录,post 保存并序列化它们并将它们保存到带有时间戳和用户 ID 的 documentdb。我知道这应该可行,但是有没有更好的方法可以让我不在我的代码中这样做并且可以在其他地方处理?我也在考虑将序列化的实体树发布到 EventGrid,然后让 webjob 订阅该 EventGrid 并让它处理审计,但我不确定这是否过大。
我知道如果我使用的是 SQL 服务器,我可以执行 ChangeDataCapture,但这在 AzureSQL 中不可用。
更新: 有一个已提出的已经回答的问题,它讨论了覆盖 SaveChanges/Async 方法以更新特定跟踪实体的值作为一种审计方式。这将按照我上面概述的方式在一般意义上起作用。但是,我需要像 SQL 中的 ChangeDataCapture 这样的东西,其中保存了对行的每个更改,因此可以创建记录的历史跟踪以准确查看发生了什么以及谁做了什么。虽然我相信我计划的处理事情的方式会奏效,但下面是更好的答案(接受的答案)。时间 tables 的答案将使我能够立即开始记录每一行的变化,并从该数据中,能够准确地看到谁在什么时间点做了什么。
要跟踪 "what has happened in the system at any point in time",您可以使用 Azure SQL 内置的功能,临时表。 "Temporal Tables are a new programmability feature of Azure SQL Database that allows you to track and analyze the full history of changes in your data, without the need for custom coding"。参见:
https://docs.microsoft.com/en-us/azure/sql-database/sql-database-temporal-tables