使用 ADODB.Connection 在没有 TLS 1.0 的情况下连接到 SQL Server 2014 的经典 ASP 连接

use*_*erx 8 sql-server connectivity sql-server-2014

由于以 PCI 合规性的名义禁用了 TLS 1.0,我无法使 32 位经典 ASP 应用程序工作。

根据 MS / Stack Exchange 的建议,我已经安装了:

  1. SQL Server 2014 SP1 CU1
  2. .NET 框架 4.6

这让我们的 ASP.NET 应用程序/SSMS 运行起来。但是我们使用ADODB.Connection对象的经典 ASP 应用程序不起作用。

我尝试了一个使用 的连接字符串Provider=SQLNCLI11;,但这似乎也无济于事。共享内存提供者仍然抱怨管道的另一端没有任何东西。错误信息:

Microsoft SQL Server Native Client 11.0 错误“80004005”

共享内存提供程序:管道的另一端没有进程。

我还尝试将命名管道与连接字符串一起使用Provider=SQLNCLI11;Server=np:\\.\pipe\MSSQL$SQLEXPRESS\sql\query;Database=northwind;Trusted_Connection=Yes;并收到此错误消息:

Microsoft SQL Server Native Client 11.0 错误“80004005”

命名管道提供者:管道的另一端没有进程。

是否有我应该注意的 ADODB 补丁?我应该考虑以其他方式或类似方式使用命名管道吗?(尽管我对为什么共享内存不起作用感到有些困惑,无论 TLS 设置如何)


评论更新:

Web 服务器和 SQL Server 位于同一台机器上。

它是一个 SQLExpress 命名实例。启用 TLS 1.0 的连接字符串是:

"Driver={SQL Server}; Server=.\SQLExpress; Database=northwind; Trusted_Connection=Yes; Integrated_Security=True;"
Run Code Online (Sandbox Code Playgroud)

我也试过:

"Provider=SQLNCLI11; Server=.\SQLExpress; Database=northwind; Trusted_Connection=Yes;"
Run Code Online (Sandbox Code Playgroud)

一旦 TLS 1.0 被禁用,两者都不起作用。我知道 Trusted_Connection / Integrated_Security 是多余的,但搞乱这些似乎也无济于事。

我已经为 TCP 和命名管道切换了启用、禁用和顺序。上面连接字符串中使用的管道名称直接来自该实例的服务器配置。我还尝试禁用共享内存以确保命名管道正常工作。我还没有尝试过 TCP(好像共享内存因为 TLS 而不起作用,为什么 TCP 会?)共享内存和命名管道都在启用 TLS 1.0 的情况下工作。一旦我翻转注册表项以禁用 TLS 1.0(并重新启动),就会出现上述错误消息。我们可能只是将这台机器置于代理之后。

禁用 TLS 1.0 和 SSL 3.0 后,SQL 服务器服务不会启动

该链接中描述的问题由 CU1 在我上面提出的问题中解决。SQL Server 实例确实以禁用 TLS 1.0 开始(感谢 MS 更新)。基于 .NET 的应用程序与 SQL 实例一起工作得很好(更新到 4.6 后)。此问题特定于经典 ASP(32 位)应用程序。我的理解是本机客户端也由 CU1 修补,因此我对为什么这不起作用感到困惑。

Sti*_*ing 2

您可能正在尝试使用 32 位旧版驱动程序。

\n\n

尝试运行 C:\\Windows\\SysWOW64\\odbcad32.exe 创建一个使用 32 位 SQL Server 驱动程序连接到 SQL Server 数据库的 DSN。首先使用 GUI 测试连接性。

\n\n

然后尝试在连接字符串中指定 DSN,如下所示:

\n\n
DSN=myDsn;Uid=myUsername;Pwd=;\n
Run Code Online (Sandbox Code Playgroud)\n\n

64 位版本位于:\nC:\\Windows\\System32\\odbcad32.exe

\n\n

PS 我还没有尝试过这个,但 32 位 SQL Server 的提供程序名称实际上是“SQL Server”。如果您只需将 SQLNCLI11 替换为 SQL Server,那就太好了。这是我用 32 位版本创建的文件 DSN——注意驱动程序...

\n\n
[ODBC]\nDRIVER=SQL Server\nUID=sa\nWSID=P13-0000\nAPP=Microsoft\xc2\xae Windows\xc2\xae Operating System\nSERVER=mcdba1\n
Run Code Online (Sandbox Code Playgroud)\n