【问题标题】:SQL Server 2008 R2 Encryption - with Entity FrameworkSQL Server 2008 R2 加密 - 使用实体框架
【发布时间】:2012-02-22 12:06:03
【问题描述】:

我希望在我的应用程序中连接到的数据库上使用数据库加密。实体框架。

是否有一种简单的方法/最佳实践能够获取未加密的数据并将加密的数据写回数据库。我不是特别想手动编辑 edmx xml,但我正在努力寻找一些资源来告诉我如何实现这一点。

我打算使用对称密钥和三重 DES 加密算法。

【问题讨论】:

  • 所以这是关于存储加密数据,而不是安全通道?

标签: .net sql entity-framework encryption sql-server-2008-r2


【解决方案1】:

您所说的 SQL Server 2008 R2 加密是什么意思 - 这是一个非常模糊的问题,因为它有很多含义。

您的一般选择:

  • 透明数​​据加密 - SQL Server 的特性 - 整个数据库在 SQL Server 端加密。您的应用程序不需要更改,它应该可以与 EF 一起使用。
  • 单元级加密 - SQL Server 的功能 - 选定的列被加密并存储为 varbinary。这需要特殊的查询和存储命令,因此如果您想使用 EF,则必须使用专门的数据库视图和存储过程与您的数据库进行交互。如果您不想使用数据库视图和存储过程,则必须手动维护 EDMX,并将所有这些 SQL 命令写入其 SSDL 部分。
  • 在您的应用程序中执行加密 - 您将使用 ObjectMaterializedSavingChanges 事件自行处理解密和加密。您可能只能加密和解密字符串或二进制数据,因为您的属性数据类型不得更改(如果是字符串,您必须将加密值存储为 base64 字符串)。

【讨论】:

  • 感谢您的详尽回答。我已经打折了 TDE,因为它不会提供我需要的加密级别。我也不想在我的应用程序中加密,因为我觉得这不如 sql 加密有利。看起来您详细说明的第二个选项是我必须做的 - 因为我认为 EF 没有另一种方法可以按照我想要的方式工作。
  • @Ladislav Mrnka : 对于单元级加密,如果您使用 SP 和 Views 与 DB 交互,是什么阻止了一些黑客使用相同的 SP/Views 解密您的数据?
  • @ribald:这是关于在磁盘上加密数据。如果攻击者通过正常连接获得访问您的数据库的凭据,那么数据库级别的任何类型的透明或单元级别加密对于保护数据几乎没有什么作用。
【解决方案2】:

您可以创建一个返回解密数据的视图。

例如:

CREATE VIEW [your_view_name] as
SELECT 
CONVERT(varchar(200),DECRYPTBYPASSPHRASE('[your_symmetric_key]', [encrypted_field])) As [encrypted_field],
FROM [your_table_name]

然后,将您的视图作为实体添加到您的 EF 模型中。

要插入、更新或删除操作,请使用存储过程。

【讨论】:

  • 这意味着将对称密钥硬编码到视图定义中,对吧?任何有权访问该视图的人都可以查看它。
  • 我的前门在那边,它没有上锁,但以防万一你需要它,这是钥匙。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-20
  • 1970-01-01
  • 2015-04-18
  • 2012-06-22
  • 2015-03-22
相关资源
最近更新 更多