在我的应用程序中,我使用带有附加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上运行。
答案 0 :(得分:1)
首先,请记住,这种东西会耗尽您的应用程序性能,因为您将在每次读写时加密和解密数据。话虽如此,这是一个解决方案:
您可以在数据库中启用“始终加密”以加密敏感数据。来自文档:
始终加密是一项旨在保护存储在Azure SQL数据库或SQL Server数据库中的敏感数据(如信用卡号或国家标识号(例如,美国社会保险号))的功能。 Always Encrypted允许客户端加密客户端应用程序内的敏感数据,并且永远不会泄露数据库引擎(SQL数据库或SQL Server)的加密密钥。
关于表现的说明:
由于Always Encrypted是一种客户端加密技术,因此大多数性能开销都在客户端而非数据库中观察到。除了加密和解密操作的成本之外,客户端的其他性能开销来源是:额外往返数据库以检索查询参数的元数据。 调用列主密钥库以访问列主密钥。
我不确定您是否可以使用嵌入式数据库文件实现这一目标。尝试使用SSMS打开它,并按照下面的指南。
假设您正在通过安装程序安装应用程序,则可以在安装程序中嵌入SQL Express实例。查看this答案以获取更多信息。
此外,通过使用嵌入式SQL Express安装,您可以在项目中启用Entity Framework自动迁移。