Ric*_*Web 6 sql-server sqloledb
通过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.
Run Code Online (Sandbox Code Playgroud)
Windows Server 2019 可以工作,但我不知道为什么。是否很难找到 sqloledb 并默认使用支持 TLS1.2 的新驱动程序 (MSOLEDBSQL)?
所有服务器都安装了相同版本的Microsoft OLE DB Driver for SQL Server,即 18.5。
尝试了不同版本的 SQL Server,2017 和 2019。
更新
显示版本信息的 sqloledb.dll 属性
服务器2019
服务器2016
| OLE DB 提供程序 | 描述 | 可用 | 最低 SQL Server | 最大TLS | 安装有 | 状态(截至 2022 年第三季度) |
|---|---|---|---|---|---|---|
SQLOLEDB |
“用于 SQL Server 的 Microsoft OLE DB 提供程序” | 视窗2000 | SQL Server 7.0 (70) | 传输层安全协议1.0 | Windows(MDAC) | 已弃用 |
SQLOLEDB(2021 年更新) |
“用于 SQL Server 的 Microsoft OLE DB 提供程序” | Windows 10 1809+ | SQL Server 7.0 (70) (TLS 1.2 需要 SQL Server 2008+) |
传输层安全协议1.2 | Windows(MDAC) | 已弃用 |
SQLNCLI |
“SQL Server 本机客户端”(“SNAC”) | SQL Server 2005 | SQL Server 7.0 (70) | TLS 1.1注 1 | 手动 | 已弃用 |
SQLNCLI10 |
“SQL Server 本机客户端 10.0” | SQL Server 2008 | SQL Server 2000 (80) | 传输层安全协议1.2 | 手动 | 已弃用 |
SQLNCLI10(2020年更新) |
“SQL Server 本机客户端 10.0” | SQL Server 2000 (80) (TLS 1.2 需要 SQL Server 2008+) |
传输层安全协议1.2 | 手动 | 已弃用 | |
SQLNCLI11 |
“SQL Server 本机客户端 11.0” | SQL Server 2012 | SQL Server 2005 (90) | 传输层安全协议1.2 | 手动 | 已弃用 |
SQLNCLI11(2018年更新) |
“SQL Server 本机客户端 11.0” | SQL Server 2005 (90) (TLS 1.2 需要 SQL Server 2008+) |
传输层安全协议1.2 | 手动 | 已弃用 | |
MSOLEDBSQL |
“用于 SQL Server 的 Microsoft OLE DB 驱动程序” | 2017年公告 | SQL Server 2012 (110) (TLS 1.3 需要 SQL Server 2016+) |
传输层安全协议1.3 | 手动 | 当前的 |
MSOLEDBSQL19 |
“适用于 SQL Server 的 Microsoft OLE DB 驱动程序 19” | SQL Server 2019 | SQL Server 2012 (110) (TLS 1.3 需要 SQL Server 2016+) |
传输层安全协议1.3 | 手动 | 当前的 |
注意1 :当服务器和客户端计算机上的系统都支持 TLS 1.1 时,SQL Server 2005 的原始版本SQLNCLI“免费”支持 TLS 1.1 ,尽管 TLS 1.1 是在SQL Server 2005之后于2006 年发布的。SChannel
sqloledb是 Windows 的一部分,最近更新为支持 TLS 1.2。请参阅KB4580390:
使用 Microsoft 数据访问组件 (MDAC) 中的数据提供程序连接到 SQL Server 时,添加了对传输层安全性 (TLS) 1.1 和 1.2 协议的支持。
因此,从“Windows 10 版本 1809、Windows Server 版本 1809”(操作系统内部版本 17763.1554)开始,这应该可以工作。
在 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();
}
}
Run Code Online (Sandbox Code Playgroud)
在服务器上强制协议加密的情况:
并捕获此 XEvent:
CREATE EVENT SESSION [tls] ON SERVER
ADD EVENT sqlsni.sni_trace(
WHERE ([sqlserver].[like_i_sql_unicode_string]([text],N'%Handshake%')))
Run Code Online (Sandbox Code Playgroud)
捕获此调试消息:
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13171 次 |
| 最近记录: |