3

通过OleDbConnection 类 (System.Data.OleDb.dll)使用提供程序“sqloledb.1”的旧版软件仍在使用 TLS1.2 的 Windows Server 2019 上运行。而在带有 TSL1.2 的 Server 2016 或 2012 R2 上却不是?

Windows Server 2016 收到以下错误,这是预期的,因为它使用不支持 TLS1.2 的 sqloledb。正如这里所见,这是众所周知的

[DBNETLIB][ConnectionOpen (SECCreateCredentials()).]SSL Security error.

Windows Server 2019 有效,我不知道为什么。是否在努力寻找 sqloledb 并默认使用支持 TLS1.2 的新驱动程序 (MSOLEDBSQL)?

所有服务器都安装了相同版本的Microsoft OLE DB Driver for SQL Server,18.5。

尝试了不同版本的 SQL Server,2017 和 2019。

更新

显示版本信息的 sqloledb.dll 属性

服务器 2019

sqloledb 服务器 2019

服务器 2016

在此处输入图像描述

4

2 回答 2

3

sqloledb是 Windows 的一部分,最近更新为支持 TLS 1.2。请参阅KB4580390

因此,从“Windows 10,版本 1809,Windows Server 版本 1809”开始,这应该可以工作。

在运行的 Windows 10 20H2 上进行本地测试

static void Main(string[] args)
{

    using (var con = new OleDbConnection("Provider=sqloledb;data source=localhost;trusted_connection=yes;Network Library=DBMSSOCN"))
    {
        con.Open();
        Console.WriteLine("Hello");
        Console.ReadKey();
    }
}

在服务器上强制协议加密的地方:

在此处输入图像描述

并捕获此 XEvent:

CREATE EVENT SESSION [tls] ON SERVER 
ADD EVENT sqlsni.sni_trace(
    WHERE ([sqlserver].[like_i_sql_unicode_string]([text],N'%Handshake%')))

捕获此调试消息:

text    SNISecurity Handshake Handshake succeeded. Protocol: TLS1.2 (1024), Cipher: AES 256 (26128), Cipher Strength: 256, Hash: SHA 384 (32781), Hash Strength: 0, PeerAddr: 127.0.0.1 
于 2021-06-11T22:11:23.810 回答
1

SQL Server OLEDB 提供程序

OLEDB 提供者 提供 最低 SQL Server TLS 安装有
SQLOLEDB 视窗 2000 SQL Server 7 (70) TLS 1.0 视窗
SQLNCLI SQL 服务器 2005 SQL Server 7 (70) 是的 手动
SQLNCLI10 SQL Server 2008 SQL Server 2000 (80) 是的 手动
SQLNCLI11 SQL Server 2012 SQL Server 2005 (90) 是的 手动
MSOLEDBSQL SQL 服务器 2016 SQL Server 2005 (90) 是的 手动

众所周知,Windows 附带的 SQL Server 驱动程序不支持 TLS 1.0 以上的任何内容。但我喜欢 David Browne 的回答,他暗示 Windows 10 将支持 TLS 1.2。

于 2021-06-11T22:30:30.650 回答