PCIコンプライアンスという名目でTLS 1.0が無効になっているため、32ビットのクラシックASPアプリケーションを動作させることができません。
MS / Stack Exchangeの推奨事項に従って、私はインストールしました:
- SQL Server 2014 SP1 CU1
- .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がパッチを適用しているため、なぜこれが機能しないのか混乱しています。