現象
Microsoft SQL Server 2012、2014、または2016を使用していることを前提としています。 データベースを Microsoft Azure Blob ストレージサービスの URL にバックアップすると、操作が失敗し、クライアント側と SQL Server のエラーログの両方で、次のエラーメッセージが表示されることがあります。
SQL Server クライアントエラー
Msg 3271、Level 16、State 1、Line LineNumber ファイル "https://<BlobStorageServerName> <> DB_Backup_Name のエラーが発生しました。" URL へのバックアップはリモートエンドポイントから例外を受け取りました。 例外メッセージ: 基になる接続が閉じられました: 受信時に予期しないエラーが発生しました。 Msg 3013、Level 16、State 1、Line LineNumber バックアップデータベースが異常終了しています。
SQL Server エラーログ
<DateTime> ======== BackupToUrl Initiated =========
<DateTime> Inputs: Backup = True, PageBlob= True, URI = https://<BlobStorageServerName>.blob.core.windows.net/sqlbackup/<DB_Backup_Name.bak>, Acct= lbtesting2096, Key= KeyValue, FORMAT= False, Instance Name = MSSQLSERVER, DBName = <DB_Name> LogPath = C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\Log
<DateTime> Process Id: 3668
<DateTime> Time for Initialization = 202.7451 ms
<DateTime> BackupToUrl Client is getting configuration from SqlServr
<DateTime> Time for Handshake and VDI config = 31.2507 ms
<DateTime> Time for Get BlobRef = 15.6263 ms
<DateTime> Time for - EXCEPTION Get Fetchattributes = 45364.4979 ms
<DateTime> An exception occurred during communication with Azure Storage, exception information follows
<DateTime> Exception Info: The underlying connection was closed: An unexpected error occurred on a receive.
<DateTime> Stack: at Microsoft.WindowsAzure.Storage.Core.Executor.Executor.ExecuteSync[T](StorageCommandBase`1 cmd, IRetryPolicy policy, OperationContext operationContext)
at BackupToUrl.Program.MainInternal(String[] args)
<DateTime> The Active queue had 1 requests until we got a clear error.
このエラーは、クライアントサーバーでトランスポート層セキュリティ(TLS) プロトコルバージョン1.2 が有効化されている場合に発生します。次のレジストリがあります。
レジストリキーの名前:
HKEY_LOCAL_MACHINE \SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2 \ クライアント 値0 Name: Enabled 「REG_DWORD」と入力します。 データ: 0x1
解決方法
この問題は、SQL Server 2014 および2016の次の累積的な更新プログラムで修正されています。
SQL Server 2016 RTM の累積更新プログラム7
SQL Server 用の新しい累積更新プログラムには、以前の累積的な更新プログラムに含まれていたすべての修正プログラムとすべてのセキュリティ修正が含まれています。 SQL Server の最新の累積的な更新プログラムを確認します。
SQL Server 2012 の回避策
この問題が発生するのは、インストールされている .Net Framework に tls 1.0 が対応していても、TLS 1.2 がサポートされている場合です。
SQL Server 2012 では修正プログラムは提供されていません。 SQL Server 2012 で強力な暗号化を有効にするための問題を回避するには、次の操作を行います。
-
レジストリのバックアップを行う
-
レジストリエディターを開き、次のレジストリサブキー HKLM\software\Wow6432Node\Microsoft.NETFramework\ と HKLM\software\microsoft.NETFramework\に移動します。
-
各キーの下に、サブキーのバージョン番号 (v 4.5、v 4.5.1 など) が存在します。 各バージョンの SchUseStrongCrypto という名前の DWORD 値を値 1 として追加します。
-
HKLM\Software\Microsoft.NetFramework では、キー名は正確に4.5 または4.5.1 にする必要はありません。 ほとんどの 場合は、v 2.0 xxx、v 3.0 xxx、 v 4.0 xxxから開始されます。 使用可能なすべてのバージョンについて、値が1の ' SchUseStrongCrypto ' という名前の DWORD 値を追加する必要があります。
-
SQL Server コンピューターを再起動します。
ノート.Net Framework 4.8 をインストールすることもできます。 既定では、.NET Framework 4.7 以降のバージョンでは、TLS 1.2 を使用し、TLS 1.1 または TLS 1.0 を使用して接続を許可するように構成されています。
参照情報
ソフトウェアの更新を説明するために Microsoft が使用する 用語について説明します。
状態
マイクロソフトでは、この問題をこの資料の対象製品として記載されているマイクロソフト製品の問題として認識しています。