始终在 Entity Framework 核心支持中加密
Always Encrypted in Entity Framework Core Support
自 EF Core 2.1 起,Always Encrypted SQL 尚不支持服务器功能。
我同时使用 SQL Server 2016 和 Azure SQL,所有客户端都是基于 Windows。
- 我们可以在等待功能实现的同时使用ADO.NET来实现吗?
- 是否有任何第三方 NuGet 或付费组件这样做?
- 关于如何使用 .NET Core 2.1 加密数据库中的几个列,而无需在我们等待 EF 团队实现它时滚动我自己的算法的任何其他建议?
不要扮演你自己的实现。我们最终做的是在我们的解决方案中创建一个单独的 Windows Classic Desktop class 库项目,该项目使用加密列处理 table 的数据层。我们在该项目中将 Dapper 用于 ORM,它支持加密列。它确实限制了我们可以做的一些事情,因为我们的数据层的其余部分是通过 EF Core 但它有效。
由于您使用的是 Azure SQL,我还建议您使用 Microsoft Azure Key Vault 来存储列主密钥。请参阅 NuGet 包 Microsoft.SqlServer.Management.AlwaysEncrypted.AzureKeyVaultProvider。 .NET Core 也不支持此 NuGet 包。
现在 .Net Core 3.1 支持此功能,在较低版本上您将很难实现它,另请参阅我关于在 .Net Core 3.1 上实现它的回答:
看到这个githubissue/comment
https://github.com/dotnet/SqlClient/issues/11#issuecomment-520100830
澄清一下:Microsoft.Data.SqlClient 应该在 .Net Core 3.1 上使用
自 EF Core 2.1 起,Always Encrypted SQL 尚不支持服务器功能。
我同时使用 SQL Server 2016 和 Azure SQL,所有客户端都是基于 Windows。
- 我们可以在等待功能实现的同时使用ADO.NET来实现吗?
- 是否有任何第三方 NuGet 或付费组件这样做?
- 关于如何使用 .NET Core 2.1 加密数据库中的几个列,而无需在我们等待 EF 团队实现它时滚动我自己的算法的任何其他建议?
不要扮演你自己的实现。我们最终做的是在我们的解决方案中创建一个单独的 Windows Classic Desktop class 库项目,该项目使用加密列处理 table 的数据层。我们在该项目中将 Dapper 用于 ORM,它支持加密列。它确实限制了我们可以做的一些事情,因为我们的数据层的其余部分是通过 EF Core 但它有效。
由于您使用的是 Azure SQL,我还建议您使用 Microsoft Azure Key Vault 来存储列主密钥。请参阅 NuGet 包 Microsoft.SqlServer.Management.AlwaysEncrypted.AzureKeyVaultProvider。 .NET Core 也不支持此 NuGet 包。
现在 .Net Core 3.1 支持此功能,在较低版本上您将很难实现它,另请参阅我关于在 .Net Core 3.1 上实现它的回答:
看到这个githubissue/comment https://github.com/dotnet/SqlClient/issues/11#issuecomment-520100830
澄清一下:Microsoft.Data.SqlClient 应该在 .Net Core 3.1 上使用