質問: SQL Server 2000(OS:Windows 2000 SP4)にあるDBがあり、そのDBはリンクサーバーでSQL Server 2012 SP4(OS:Windows Server 2012 R2)にアクセスしたいです。 個人の経験ですが、以前は2000から2012 SP2?にはアクセスができたと思うのですが、先程2012 SP4に**SQLクエリアナライザー**でアクセスしようとすると**SSLセキュリティエラー**が表示されます。 原因と解決方法を教えてください。 よろしくおねがいします。 ![](https://i.stack.imgur.com/rjY8t.png)
回答: Microsoft SQL Server 用の TLS 1.2 のサポート(英語)によると、SQL Server 2012 SP3の途中でTLS 1.2サポートが追加され、SQL Server 2012 SP4には初めから組み込まれていたようです。その上で、 > > Are customers who are not using SSL/TLS affected if SSL 3.0 and TLS 1.0 are disabled on the server? > > > Yes. SQL Server encrypts the username and password during login even if a secure communication channel is not being used. This update is required for all SQL Server instances that are not using secure communications and that have all other protocols except TLS 1.2 disabled on the server. > > > とのことで、TLS 1.2有効化と連動してTLS 1.0以下の無効化が行われているようです。 ですので、SQL Server 2000がTLS 1.0以下を使用している場合は接続エラーになるはずです。参考までに、Windowsに搭載されているTLSライブラリのバージョン状況ですが、 > > Windows Vista/Windows Server 2008: TLS 1.0まで > > Windows Server 2008 with Service Pack 2 (SP2): TLS 1.2まで(TLS 1.1以降は無効化) > > Windows 7/Windows Server 2008 R2: TLS 1.2まで(TLS 1.1以降は無効化) > > それ以降のバージョン:TLS 1.2まで > > > となっています。ごにょごにょするとXP / VistaでもTLS 1.2を利用できます。なお、Windowsに搭載されているTLSライブラリはSSL 2.0とTLS 1.2の両方を有効化すると失敗するため、互換性に注意が必要です。 大前提として、SQL ServerにはTLSライブラリは含まれていません。SQL ServerはWindowsに搭載されているTLSライブラリを呼び出しているに過ぎません。 * Windowsに当該バージョンのTLSライブラリがインストールされていて、 * Windows側で明示的に無効化されておらず、 * SQL Server側が有効化する 全てが成立してはじめてTLS当該バージョンで通信が可能となります。その上で、接続元クライアントと接続先サーバーでバージョンの一致(ネゴシエーション)しなければ接続できません。 今回の場合、接続元が「SQL Server 2000(OS:Windows 2000 SP4)」とのことで、Windows Vista以前なのでTLS 1.1以降がそもそもインストールされていません。ですので、利用できてもTLS 1.0までとなります。 また接続先が「SQL Server 2012 SP4(OS:Windows Server 2012 R2)」とのことで、OSとしてはSSL 2.0以降がインストール済みかつSSL 3.0以降が有効です。ところが、前述の通り、SQL ServerとしてはTLS 1.2を有効化するとともにTLS 1.0以下を無効化しています。 このため、SQL Server 2000はTLS 1.0以下を要求し、SQL Server 2012 SP4はTLS 1.1以降を要求するため、ネゴシエーションに失敗し、接続できないことでしょう。