ADODB.Connectionを使用した、TLS 1.0を使用しないSQL Server 2014へのクラシックASP接続


8

PCIコンプライアンスという名目でTLS 1.0が無効になっているため、32ビットのクラシックASPアプリケーションを動作させることができません。

MS / Stack Exchangeの推奨事項に従って、私はインストールしました:

  1. SQL Server 2014 SP1 CU1
  2. .NET Framework 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;"

私も試しました:

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

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がパッチを適用しているため、なぜこれが機能しないのか混乱しています。

回答:


2

32ビットのレガシードライバーを使用しようとしている可能性があります。

C:\ Windows \ SysWOW64 \ odbcad32.exeを実行して、32ビットSQL Serverドライバーを使用してSQL Serverデータベースに接続するDSNを作成してください。最初に、GUIを使用して接続をテストします。

次に、次のように接続文字列でDSNを指定してみます。

DSN=myDsn;Uid=myUsername;Pwd=;

64ビットバージョンは、C:\ Windows \ System32 \ odbcad32.exeにあります。

PS私はこれを試していませんが、32ビットSQL Serverのプロバイダー名は実際には「SQL Server」です。SQLNCLI11をSQL Serverに置き換えるだけでよいなら、それは素晴らしいことです。これが、32ビットバージョンで作成したファイルDSNです。ドライバーに注意してください...

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

0

ドライバーをTLS 1.2で動作させるには、ADO.NETとSQLNCLI11の修正が必要です。

1月29日の時点で、Microsoft SQL Serverは、SQL Server 2008、SQL Server 2008 R2、SQL Server 2012およびSQL Server 2014のTLS 1.2と、サーバーネイティブクライアント、Microsoft ODBC Driver for SQL Server、Microsoft JDBC Driver for SQL Serverなどの主要なクライアントドライバーをサポートしています。およびADO.NET(SqlClient)。

リリースの詳細については、こちらをご覧ください。TLS 1.2をサポートするビルドと、クライアントおよびサーバーコンポーネントのダウンロード場所のリストは、KB3135244で入手できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.