从 .NET Core 2.1 使用 Always Encrypted of SQL 服务器

Using Always Encrypted of SQL Server from .NET Core 2.1

我知道 Microsoft 尚未指定任何从 Core 中支持 Always Encrypted 的计划。 但是,经典 .NET Framework(4.5 及更高版本)支持此功能。 我们的 Core 2.1 项目对 Always Encrypted 的使用仅限于两​​个简单的查询,除了从 Core 2.1 降级之外,我们愿意采取其他途径来使用它。

有许多远程方法可以解决这些问题,但它们涉及远程处理(WCF 或 REST 用于另一个经典的 .NET)或通过 Service Fabric Actor(我们之前使用过)。

是否有任何干净的进程内方法来做到这一点?通过 ODBC 连接,例如,为这两个查询或类似的东西?

N.B。我们 运行 Windows。

根据 Microsoft Docs latest ODBC 驱动程序支持 Always Encrypted。以下代码有效。

using System;
using System.Data.Odbc;

namespace ConsoleApp2
{
    class Program
    {
        static void Main(string[] args)
        {
            using (var connection = new OdbcConnection(
                "Driver={ODBC Driver 17 for SQL Server};DSN=SQL2016;Server={SQL2016};Trusted_Connection=yes;ColumnEncryption=Enabled;Database=AndreyTest;"))
            {
                using (var cmd = new OdbcCommand("select SSN from TestTable", connection))
                {
                    connection.Open();
                    Console.WriteLine("Connected");
                    Console.WriteLine("SSN: " + Convert.ToString(cmd.ExecuteScalar()));
                    Console.ReadLine();
                    connection.Close();
                }
            }
        }
    }
}

如果我从连接字符串中删除 "ColumnEncryption=Enabled",输出变为 "SSN: System.Byte[]",即 SSN 未解密。

希望对您有所帮助!