【问题标题】:How to encrypt MS SQL attached mdf file (user instance SQL Express)如何加密 MS SQL 附加的 mdf 文件(用户实例 SQL Express)
【发布时间】:2018-03-19 04:46:17
【问题描述】:

在我的应用程序中,我使用带有附加 mdf 文件的 SQL Express/LocalDB。 以下是一个示例连接字符串:

"data source=.\SQLEXPRESS;AttachDBFilename=|DataDirectory|database.mdf;Trusted_Connection=Yes; User Instance=true;Connection Timeout=30"

我需要对数据库进行加密,使其不易被第三方访问。

透明数据加密是完美的选择,但它不是一个选项,因为它仅适用于 SQL Server 的企业版。

我为 SQLite 找到了类似的解决方案,它似乎可以挂钩加密/解密算法(sqlcipher.net 和其他)。

还有一些 MSSQL 服务器的解决方案,这些解决方案相当昂贵(对我而言),并且只能在普通数据库(不是用户实例附加的 mdf 文件)上工作。

最后,对称加密是可能的并且受支持(至少在 SQL Express 上),但这意味着重大的应用程序更改。

我正在寻找一种以尽可能少的工作量加密整个数据库(或多个表中的数据)的选项。 提前感谢您的任何建议。

更新

出于监管目的 (GDPR) 需要对数据进行加密,以保护“静态数据”。

该应用程序是桌面应用程序,可在 Windows 上运行。

【问题讨论】:

  • 必须是 MS-SQL 吗?
  • 是的,MSSQL Express 或 LocalDB 是必需的,因为应用程序主要是开发的
  • 当您说“LocalDB”时,您只是指在 PC 上...对吗?如果需要数据保护 设计阶段的计划如果主要开发
  • 从 SQL Server 2016 SP1 开始,Always Encryptedavailable in all editions。以前仅适用于企业 SKU 的分区、压缩和其他功能也是如此。 Always Encrypted 将加密特定列,而不是像 TDE 那样加密整个数据库
  • 整个数据库是否必须加密?客户是否了解成本和管理要求?如lose the key, lose all data and backups?有多种机制可用于防止未经授权的访问。没关系,在 桌面 应用程序中,只有登录用户才能读取数据。除非磁盘被盗,否则最好的防御是使用 BitLocker 进行全盘加密

标签: c# sql-server encryption


【解决方案1】:

首先,请记住,此类内容会消耗您的应用程序性能,因为您将在每次读取和写入时加密和解密数据。话虽如此,这里有一个解决方案:

您可以在数据库中启用 Always Encrypted 以加密敏感数据。来自文档:

始终加密是一项旨在保护存储在 Azure SQL 数据库或 SQL Server 数据库中的敏感数据的功能,例如信用卡号或国民身份证号(例如美国社会保险号)。 Always Encrypted 允许客户端加密客户端应用程序中的敏感数据,并且永远不会向数据库引擎(SQL 数据库或 SQL Server)泄露加密密钥。

关于性能的说明:

因为 Always Encrypted 是一种客户端加密技术,所以大部分性能开销都在客户端而不是数据库中观察到。除了加密和解密操作的成本之外,客户端性能开销的其他来源是: 额外往返数据库以检索查询参数的元数据。 调用列主密钥存储以访问列主密钥。

我不确定您是否可以使用嵌入式数据库文件来实现这一点。尝试使用 SSMS 打开它并按照以下指南进行操作。

假设您通过安装程序安装应用程序,您可以在安装程序中嵌入 SQL Express 实例。查看this答案了解更多信息。

此外,通过使用嵌入式 SQL Express 安装,您可以在项目中启用 Entity Framework 自动迁移。

Here 是您在数据库中启用 Always Encrypted 的方式,here 是 Microsoft 文档中的一个运行示例。

【讨论】:

  • 如果你愿意考虑第三方产品,至少有两个可以提供TDE到SQL Express。我们的是Encryptionizer for SQL Server,另一个是 DBEncrypt。但它们的工作方式不同:加密器位于 SQL Server 进程和操作系统之间,而 DBEncrypt 使用旧的 Detours SDK(不再可用的 SFAIK)将自身注入内存中的 SQL Server 进程。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-21
  • 2014-05-21
  • 1970-01-01
  • 1970-01-01
  • 2014-01-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多