微软的OLE DB Provider for SQL Server支持TLS 1.2吗?

25
我们的客户最近从TLS 1.0升级到TLS 1.2,此后我们的软件无法连接到SQL服务器。它使用OLE DB提供程序连接到SQL服务器。 以下是从SQL服务器返回的错误 - [DBNETLIB] [ConnectionOpen SECDoClientHandshake()] SSL安全性错误 SQL状态:08001 SQL错误号码:18
找不到任何有关Microsoft OLE DB Provider for SQL Server是否支持TLS 1.2的有用信息。
我发现的其中一个链接似乎表明它不受支持。 https://forums.iis.net/t/1233674.aspx?connecing+SQL+server+DB+issue+after+installingTLS1+2+in+SQL+srver+with+classic+asp+application+ 因此,想在stackoverflow上检查是否有人对此有任何信息。
6个回答

53

Windows自带的SQLOLEDB提供程序和SQL Server ODBC驱动程序仅用于向后兼容,属于传统组件。这些自SQL 2005以来就已被弃用。

根据MSSQL Tiger Team的博客文章

SQLOLEDB将不支持TLS 1.2。您需要切换驱动程序到支持的驱动程序之一,具体请参见https://support.microsoft.com/en-us/kb/3135244

您应该能够安装SQL Server Native Client 2012,并通过仅更改连接字符串(将Provider=SQLOLEDB更改为Provider=SQLNCLI11)使用该OLE DB提供程序。当然,测试以避免出现意外情况是必要的。例如,我记得有人在使用服务器API游标时,使用SQL Server Native Client提供程序和ADO经典之间存在行为差异,尽管常用的firehose游标没有问题。

编辑

新的OLE DB驱动程序MSOLEDBSQL已发布。这个新驱动程序包括对最新TLS 1.2标准的支持,并向后兼容SQL Server Native Client 11 (SQLNCLI11)。请参见Microsoft SQLNCLi团队博客公告。安装后将连接字符串更改为Provider=MSOLEDBSQL

编辑 #2

时间继续向前推进。SQL Server Native Client OLE DB驱动程序现已弃用,推荐使用MSOLEDBSQL。最后支持的2012 SNAC版本将于2012年7月12日结束支持。

此外,正如David在他的回答中指出的那样,微软最近在Windows 10 Build 17763.1554中添加了对TLS 1.2 MDAC组件的支持:

在使用Microsoft Data Access Components (MDAC)中的数据提供程序连接到SQL服务器时,添加对传输层安全性(TLS)1.1和1.2协议的支持

但未添加任何增强功能(例如支持SQL 2000之后的数据类型)。

总之,新的SQL Server客户端驱动程序提供了更多控制具体驱动程序和版本的功能,而不需要依赖于直接的操作系统补丁级别。像MSOLEDBSQL和ODBC Driver n for SQL Server这样的现代驱动程序不断改进以支持最新的SQL Server功能和安全标准。

EDIT#3

SQLOLEDB和SQL Server ODBC驱动程序(随Windows一起发货和服务的MDAC的一部分)支持TLS 1.2,并在2020年10月20日版本号为17763.1554的版本中提供支持。这适用于Windows 10和Windows Server 2019或更高版本。


1
了不起的答案。 - Ciarán
5
请将 Provider=SQLOLEDB 更改为 Provider=MSOLEDBSQL。这对我来说不是一开始就很明显的。我认为我只需要安装新驱动程序,它就可以正常工作。 - user1751825
建议在此处提及微软文档中的命名细微差别,或者继续阅读Dan Guzman的注释。此外(2021年),微软现已弃用本地客户端。不可否认,这听起来令人惊讶。 - Forbin

12

这可能不是你的解决方案,因为这是一个未来的修复,你的客户可能无法等待,但显然微软正在取消废弃的OLEDB驱动程序,并发布支持TLS 1.2的新版本,于2018年第一季度发布:https://blogs.msdn.microsoft.com/sqlnativeclient/2017/10/06/announcing-the-new-release-of-ole-db-driver-for-sql-server/

新的Microsoft OLE DB Driver for SQL Server或msoledbsql还将在此首次更新中引入多子网故障转移功能,并保持最新的TLS 1.2标准。

此外,此首次更新将是一个独立的安装包,与SQL Server生命周期无关。这也意味着该驱动程序将不会打包在SNAC库中,也不会与任何其他驱动程序耦合。


5
需要翻译的内容:To be clear, the legacy "Microsoft OLE DB Provider for SQL Server" (SQLOLEDB) remains deprecated. The undeprecation announcement says a new OLE DB provider will be released. The name will be "Microsoft OLE DB Driver for SQL Server" (MSOLEDBSQL)。为了明确,传统的“Microsoft OLE DB Provider for SQL Server”(SQLOLEDB)仍然被弃用。取消弃用的公告表示将发布一个新的OLE DB提供程序。其名称将为“Microsoft OLE DB Driver for SQL Server”(MSOLEDBSQL)。 - Dan Guzman
@T.S.,它还没有发布。 - Dan Guzman
@T.S.,我预计会有官方公告发布,很可能在同一篇博客文章中,并希望尽快发布,因为他们说过三月份会发布。我认为这将很可能是一个单独的下载/安装文件。 - Dan Guzman
你再次救了我的命。 下载页面在这里: https://learn.microsoft.com/en-us/sql/connect/oledb/download-oledb-driver-for-sql-server?view=sql-server-ver15 - Madgui
@DanGuzman:关于 SQLOLEDB 的弃用: 微软仍然认为它是新开发的有效选择,只要你不需要访问 SQL Server 的新功能。因此,显然,它比(已完全弃用但较新的)SQL Server Native Client“更少被弃用”。 - Heinzi
显示剩余2条评论

4
在Windows中,sqloledb现已支持TLS 1.2。请参见KB4580390
这包括MDAC中的ODBC和OleDB提供程序的支持:

在使用Microsoft Data Access Components (MDAC)中的数据提供程序连接到SQL Server时,增加了对Transport Layer Security (TLS) 1.1和1.2协议的支持。

您可以通过检查Windows版本号来验证是否已更新MDAC。17763.1554或更高版本具有此修复程序。许多年来,MDAC未在OS补丁以外进行分发。
可在winver或使用[environment]::OSVersion.Version.Build在Powershell中查看版本信息。

太好了,谢谢。是否有更多关于这个变化的在线资源?特别是,我想知道它是否也影响“经典”的 {SQL Server} ODBC 驱动程序,以及我们软件开发人员如何验证 MDAC 已经升级到 TLS 1.2 兼容版本在客户系统上。 - Heinzi
请参见更新的答案。 - David Browne - Microsoft
太棒了,谢谢! - Heinzi
谢谢!一个澄清:KB4580390似乎是Windows 10的更新;您是否了解Windows 11的支持情况? - Nickolay
1
所有在Windows 11推出之前的Windows 10更新都是Windows 11的一部分。因此,在Windows 11上支持这一点。 - David Browne - Microsoft

1

在 Azure 云上升级到 TLS1.2 后,我的端口进行了以下更改以解决问题 -

  • Provider=SQLOLEDB 更改为 Provider=SQLNCLI11
  • 更新 ADODB 版本为 Microsoft ActiveX Data Objects 6.0 Library

请注意,SQLNCLI11可能与SQLOLEDB不完全兼容。我试图升级的一个经典ASP应用程序无法使用此提供程序,因为它与XML查询结果集不兼容。请谨慎使用。 - user1751825
如果您切换到“本机”客户端(例如SQLNCLISQLNCLI10SQLNCLI11MSOLEDBSQLMSOLEDBSQL19),并且正在使用ActiveX数据对象(ADO),则需要在连接字符串中包含DataTypeCompatibility=80,以使SQL Server将新数据类型呈现为等效的旧数据类型(例如,xml列将呈现为nvarchar(max))。 - Ian Boyd

1
使用“Microsoft OLEDB Driver for SQL Server”是我们成功的方法,但我也可以确认Native Driver 11也测试通过。
我们的情况是:在禁用TLS 1.0和1.1并启用TLS 1.2后,使用“Microsoft OLEDB Provider for SQL Server”的Crystal Reports将无法连接。相反,您会得到一个用户/密码提示,即使使用有效凭据也会失败。在我们的情况下,我们正在运行一个嵌入了Crystal 13 Viewer的ASP.NET v4.5.2应用程序中的Crystal Reports。用户从报告列表中选择并运行它们,并且在启用TLS 1.0时运行而不需要提示。
为了解决这个问题,我们必须在设计师中打开报告,并将报告从使用“Microsoft OLEDB Provider for SQL Server”转换为使用“Microsoft OLEDB Driver for SQL Server”。
如果您在列表中找不到驱动程序,则这是SQL Server的OLEDB驱动程序: https://learn.microsoft.com/en-us/sql/connect/oledb/download-oledb-driver-for-sql-server?view=sql-server-ver15。感谢Dan Guzman提到了“驱动程序”的存在,在稍微埋藏的评论和上面的更新中。

0

这可能不是直接回答问题,但它仍然与 SQL Server 连接和 TLS 1.2 错误有关。

我正在维护一个旧的 ASP Classic 网站,它出现了以下错误。

Microsoft OLE DB Provider for SQL Server error '80004005'
[DBNETLIB][ConnectionOpen (SECDoClientHandshake()).]SSL Security error. 

ProviderSQLOLEDB 更改为可用的任何更高版本 SQL Server Native Client 11.0 可以解决错误。

因此,将连接字符串从

constr = "Provider=SQLOLEDB;Data Source=..."

constr = "Provider=SQL Server Native Client 11.0;Data Source=...."

可能也能行


请务必仔细测试所有内容。我发现我正在使用的代码只与本地客户端部分兼容。 - user1751825

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接