如何加密MS SQL附加的mdf文件(用户实例SQL Express)

时间:2018-02-12 12:44:54

标签: c# sql-server encryption

在我的应用程序中,我使用带有附加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上运行。

1 个答案:

答案 0 :(得分:1)

首先,请记住,这种东西会耗尽您的应用程序性能,因为您将在每次读写时加密和解密数据。话虽如此,这是一个解决方案:

您可以在数据库中启用“始终加密”以加密敏感数据。来自文档:

  

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

关于表现的说明:

  

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

我不确定您是否可以使用嵌入式数据库文件实现这一目标。尝试使用SSMS打开它,并按照下面的指南。

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

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

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

相关问题