Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 企业数据审计_Entity Framework_Audit - Fatal编程技术网

Entity framework 企业数据审计

Entity framework 企业数据审计,entity-framework,audit,Entity Framework,Audit,我们当前的企业解决方案是由实体框架驱动的ASP.NET MVC应用程序。关于如何连接到变更事件以进行审核,有几个链接。我对这个不太感兴趣 我对企业级审计体系结构感兴趣。对于那些在企业层面上饱受战伤的人,您的审计解决方案是什么?是否在框架中序列化数据库中的对象。是否正在设置数据库触发器以审核表?您是否同时使用单独的数据库,这样您的审计增长不会影响您的应用程序数据库?我对这里经过验证的解决方案感兴趣。我知道在我们的技术选择(EF)中有选择,但我首先对基金会感兴趣。p> 链接将非常感谢。我没有任何链接

我们当前的企业解决方案是由实体框架驱动的ASP.NET MVC应用程序。关于如何连接到变更事件以进行审核,有几个链接。我对这个不太感兴趣

我对企业级审计体系结构感兴趣。对于那些在企业层面上饱受战伤的人,您的审计解决方案是什么?是否在框架中序列化数据库中的对象。是否正在设置数据库触发器以审核表?您是否同时使用单独的数据库,这样您的审计增长不会影响您的应用程序数据库?我对这里经过验证的解决方案感兴趣。我知道在我们的技术选择(EF)中有选择,但我首先对基金会感兴趣。p>
链接将非常感谢。

我没有任何链接,但在系统中,我很高兴在日常工作中维护这些链接。我们有一个审计表,它基本上存储了以下信息

TableName、PrimaryKeyValue、ModifiedColumn、OldValue、NewValue、ChangeUser、更改日期


现在,这对于审计速度非常有效,在我们的代码中,我们有一个自动实现审计日志记录的通用接口,但是从“审查”的角度来看,这并不是“最快”的方式来获取信息。(假设我们实际上没有做任何需要查看审核日志的事情…

我看到了几种解决方案,但我最喜欢的是简单性本身:

  • 创建镜像每个源表的审核表,添加一些额外的列以跟踪更改的日期和类型(如果支持,请插入、更新或删除)以及进行更改的用户。删除所有约束和索引(除非您希望进行大量搜索)

  • 在表更新逻辑内部(我们使用了过程,但没有理由不能使用OR/M或其他持久性层,如果有适当的挂钩),写入源表和审计表


这有很多好处,但最大的好处(在我看来)是不必担心或编写所有代码来管理客户端中成对写入操作的事务完整性。

我们最近不得不在企业中解决同样的问题。我们还需要能够恢复到以前的版本

我们最终审计了业务实体,而不是sql中的表。我们基本上序列化数据库中的记录,并跟踪从一个版本到下一个版本所做的更改。这种方法允许我们将以前的版本检索到业务实体中,然后通过调用相同的保存操作进行恢复。此恢复功能将由应用程序负责,因为必须在此处解决此问题,否则我们的服务可能需要了解有关参与应用程序的太多详细信息。提供了按版本、日期检索记录、查看历史记录以及审核更改的服务操作。这是一种针对不同应用程序组和内部不同实体的选择加入方法(并非数据库中的所有内容都需要审核,为什么要这样做)

然后,我们构建一个轻量级网站,该网站可以与该服务对话,并可以显示所有版本。我们构建了一种机制来显示添加/更新/删除以在版本之间进行比较(非常酷的ui表示),这允许用户查看谁更改了什么以及何时更改了什么。该服务可以发回指向url的链接以查看实体的版本。这允许我们的webaps+winform/wpf应用程序启动浏览器,以便用户可以看到更改


如果有人感兴趣,也许我可以将其打包并提供…

因此,基本上是一个增长表,这是在同一个数据库中吗?是的,这是正确的,而且我们目前也没有任何索引。对于某些人来说,它在同一个数据库中,但有另一个版本添加了“数据库”列并存储在外部。你如何处理关系的更改?你能解释一下你如何处理删除的记录吗。因此,基本上这是一个单独数据库中应用程序表的镜像?没错,除了在同一个数据库中,例如“Employee”和“EmployeeHistory”这样的表彼此并列。(尽管上面Craig Stuntz的评论与此相关。)回想起来,我没有理由说它假设了存储过程,所以我已经编辑掉了这些文本。这是否意味着一个数据库必须将所有内容写入两次?您注意到这样做对吞吐量有什么影响吗?让我再做一个重要的说明。我们非常希望能够返回并在应用程序中看到旧数据。这就是我们认为持久化序列化对象很有帮助的地方(不仅仅是记录delta)。数据库可以有多个文件组,表可以有多个分区。您可以有效地将单个数据库视为多个数据库,将单个表视为多个表。因此,您要获取EF对象并序列化它们,然后将它们存储在它们自己的审核表/数据库中?你如何处理亲子关系?