Klassische ASP-Verbindung zu SQL Server 2014 ohne TLS 1.0 mit ADODB.Connection

8

Da TLS 1.0 im Namen der PCI-Konformität deaktiviert ist, kann eine 32-Bit-Classic-ASP-Anwendung nicht funktionieren.

Gemäß den Empfehlungen von MS / Stack Exchange habe ich Folgendes installiert:

  1. SQL Server 2014 SP1 CU1
  2. .NET Framework 4.6

Dadurch wurden unsere ASP.NET-Anwendungen / SSMS ausgeführt. Unsere klassische ASP-Anwendung, die ein ADODB.ConnectionObjekt verwendet, funktioniert jedoch nicht.

Ich habe versucht, eine Verbindungszeichenfolge zu verwenden Provider=SQLNCLI11;, aber das scheint auch nicht zu helfen. Der Shared Memory-Anbieter beschwert sich immer noch darüber, dass sich nichts am anderen Ende der Pipe befindet. Fehlermeldung:

Microsoft SQL Server Native Client 11.0-Fehler '80004005'

Shared Memory Provider: Am anderen Ende der Pipe befindet sich kein Prozess.

Ich habe auch versucht, Named Pipes mit der Verbindungszeichenfolge zu verwenden, Provider=SQLNCLI11;Server=np:\\.\pipe\MSSQL$SQLEXPRESS\sql\query;Database=northwind;Trusted_Connection=Yes;und die folgende Fehlermeldung erhalten:

Microsoft SQL Server Native Client 11.0-Fehler '80004005'

Named Pipes Provider: Am anderen Ende der Pipe befindet sich kein Prozess.

Gibt es einen Patch für ADODB, den ich beachten sollte? Sollte ich in Betracht ziehen, Named Pipes stattdessen auf eine andere oder ähnliche Weise zu verwenden? (obwohl ich ein wenig verblüfft bin, warum Shared Memory unabhängig von den TLS-Einstellungen nicht funktioniert)


Aktualisierungen aus Kommentaren:

Der Webserver und der SQL Server befinden sich in derselben Box.

Es ist eine SQLExpress-Instanz. Die Verbindungszeichenfolge, die mit aktiviertem TLS 1.0 funktioniert, lautet:

"Driver={SQL Server}; Server=.\SQLExpress; Database=northwind; Trusted_Connection=Yes; Integrated_Security=True;"

Ich habe auch versucht:

"Provider=SQLNCLI11; Server=.\SQLExpress; Database=northwind; Trusted_Connection=Yes;"

Weder funktioniert, wenn TLS 1.0 deaktiviert ist. Ich weiß, dass Trusted_Connection / Integrated_Security redundant ist, aber das Herumspielen mit diesen scheint auch nicht zu helfen.

Ich habe das Aktivieren, Deaktivieren und Bestellen von TCP- und Named Pipes umgeschaltet. Der Name der in der obigen Verbindungszeichenfolge verwendeten Pipe stammt direkt aus der Serverkonfiguration für diese Instanz. Ich habe auch versucht, Shared Memory zu deaktivieren, um sicherzustellen, dass Named Pipes funktionieren. Ich habe TCP nicht ausprobiert (als ob Shared Memory aufgrund von TLS nicht funktioniert, warum sollte TCP nicht funktionieren?) Shared Memory und Named Pipes funktionieren beide mit aktiviertem TLS 1.0. Sobald ich den Registrierungsschlüssel umlege, um TLS 1.0 zu deaktivieren (und neu zu starten), treten die oben genannten Fehlermeldungen auf. Wir werden diesen Computer wahrscheinlich nur hinter einen Proxy stellen.

Der SQL Server-Dienst wird nach dem Deaktivieren von TLS 1.0 und SSL 3.0 nicht gestartet

Das in diesem Link beschriebene Problem wird von CU1 in meiner oben gestellten Frage behandelt. Die SQL Server-Instanz startet mit deaktiviertem TLS 1.0 (dank des MS-Updates). .NET-basierte Anwendungen funktionieren problemlos mit der SQL-Instanz (nach dem Update auf 4.6). Diese Frage ist spezifisch für eine klassische ASP-Anwendung (32-Bit). Ich verstehe, dass der native Client auch von CU1 gepatcht wird, daher meine Verwirrung darüber, warum dies nicht funktioniert.

userx
quelle

Antworten:

2

Möglicherweise versuchen Sie, 32-Bit-Legacy-Treiber zu verwenden.

Führen Sie C: \ Windows \ SysWOW64 \ odbcad32.exe aus, um einen DSN zu erstellen, der mithilfe des 32-Bit-SQL Server-Treibers eine Verbindung zu Ihrer SQL Server-Datenbank herstellt. Testen Sie zuerst die Konnektivität über die GUI.

Versuchen Sie dann, Ihren DSN in Ihrer Verbindungszeichenfolge wie folgt anzugeben:

DSN=myDsn;Uid=myUsername;Pwd=;

Die 64-Bit-Version befindet sich in: C: \ Windows \ System32 \ odbcad32.exe

PS Ich habe dies nicht versucht, aber der Anbietername für den 32-Bit-SQL Server lautet "SQL Server". Es wäre schön, wenn Sie nur SQLNCLI11 durch SQL Server ersetzen müssten. Hier ist meine Datei DSN, die ich mit der 32-Bit-Version erstellt habe - beachten Sie den Treiber ...

[ODBC]
DRIVER=SQL Server
UID=sa
WSID=P13-0000
APP=Microsoft® Windows® Operating System
SERVER=mcdba1
Stachel
quelle
0

Sie benötigen den ADO.NET- und SQLNCLI11-Fix, damit Ihre Treiber mit TLS 1.2 funktionieren.

Ab dem 29. Januar unterstützt Microsoft SQL Server TLS 1.2 für SQL Server 2008, SQL Server 2008 R2, SQL Server 2012 und SQL Server 2014 sowie wichtige Client-Treiber wie Server Native Client, Microsoft ODBC-Treiber für SQL Server und Microsoft JDBC-Treiber für SQL Server und ADO.NET (SqlClient).

Weitere Informationen zur Veröffentlichung finden Sie hier . Die Liste der Builds, die TLS 1.2 unterstützen, sowie die Download-Speicherorte für Client- und Serverkomponenten finden Sie in KB3135244 .

Amit Banerjee
quelle