【发布时间】:2013-09-19 13:49:31
【问题描述】:
我正在尝试使用SecurEntity 为我的应用程序中的某些表实现列加密。
我正在使用依赖注入将 DbContext 的单个实例注入到我的所有存储库中。
DbContext 类有一个附加到 SaveChanges 事件处理程序的事件,如果正在保存的更改保存在应加密的对象上,则该事件处理程序调用 SecurEntity Encrpyt 方法。
还有一个附加到 ObjectMaterialized 事件处理程序的事件,该事件处理程序在最初从数据库中检索加密对象时对其进行解密。
当我在登录期间调试应用程序时,用户对象(应加密的表之一)、用户对象从数据库中检索并成功解密。然后它会更新一些属性,例如上次登录日期,这些更改会保存并成功加密。
我的问题是稍后在登录过程中,再次检索 User 对象,但它没有触发 ObjectMaterialized 事件,因此它没有被解密。
我认为这是因为由于依赖注入而使用了单个 DbContext,并且实体框架已经有一个正在跟踪的实例。
有没有人知道如何解决这个问题?我正在开发一个将托管在 Azure 上的应用程序,因此透明数据加密不是我的选择,我需要实现某种形式的加密。
【问题讨论】:
-
请注意,SecurEntity 的当前实现有一个致命的安全漏洞,这意味着从证书生成的密钥实际上从未使用过。有关快速而肮脏的修复,请参阅securentity.codeplex.com/workitem/7376
标签: c# azure encryption entity-framework-5