【问题标题】:Using Always Encrypted of SQL Server from .NET Core 2.1从 .NET Core 2.1 使用 SQL Server 的 Always Encrypted
【发布时间】:2018-10-19 23:14:24
【问题描述】:

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

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

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

注意我们在 Windows 上运行。

【问题讨论】:

    标签: dapper always-encrypted .net-core-2.1 entity-framework-core-2.1


    【解决方案1】:

    根据Microsoft Docs 最新ODBC 驱动程序支持始终加密。以下代码有效。

    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 未解密。

    我希望这会有所帮助!

    【讨论】:

    • 奇怪的是没有人知道这一点!我将连接字符串修改为独立的:Driver={ODBC Driver 13 for SQL Server};Trusted_Connection=yes;ColumnEncryption=Enabled;Server=localhost;Database=MyDbName;
    猜你喜欢
    • 2017-04-23
    • 1970-01-01
    • 1970-01-01
    • 2017-10-25
    • 1970-01-01
    • 2018-07-13
    • 1970-01-01
    • 1970-01-01
    • 2018-08-14
    相关资源
    最近更新 更多