SQL Server 連接器維護 & 疑難排解
適用於:SQL Server
本文提供 SQL Server 連接器的補充資訊。 如需 SQL Server 連接器的詳細資訊,請參閱使用 Azure Key Vault 進行可延伸金鑰管理 (SQL Server)、使用 Azure Key Vault 進行可延伸金鑰管理的設定步驟和搭配使用 SQL Server 連接器與 SQL 加密功能。
注意
雖然 Microsoft Entra ID 是 Azure Active Directory(Azure AD)的新名稱,但為了防止破壞現有的環境,Azure AD 仍會保留在某些硬式編碼元素中,例如 UI 字段、連線提供者、錯誤碼和 Cmdlet。 在本文中,這兩個名稱是可互換的。
A. SQL Server Connector 的維護指示
鑰匙旋轉
Azure Key Vault 支援鑰匙旋轉,這是建立全新金鑰並更新應用程式以使用新金鑰的程式。 鑰匙旋轉是安全性最佳做法,可協助保護密鑰遭入侵時的資料。 SQL Server 連接器支援金鑰匙旋轉。 不應該刪除舊鑰匙,因為可能需要使用舊鑰匙來還原資料庫。 若要旋轉鑰匙,請遵循使用新的 AKV 鑰匙或新的 AKV 鑰匙版本旋轉非對稱鑰匙中的步驟。
升級 SQL Server 連接器
1\.0.0.440 版和較舊版本皆已被取代,而且生產環境也不再支援。 生產環境支援 1.0.1.0 版及更新版本。 請使用下列指示升級至可在 Microsoft 下載中心上取得的最新版本。
升級
- 使用 SQL Server 組態管理員來停止 SQL Server 服務
- 使用 Control Panel\Programs\Programs and Features 解除安裝舊版本
- 應用程式名稱:適用於 Microsoft Azure Key Vault 的 SQL Server 連接器
- 版本:15.0.300.96 (或更舊版本)
- DLL 檔案日期:2018 年 1 月 30 日 (或更舊版本)
- 安裝 (升級) 適用於 Microsoft Azure Key Vault 的 SQL Server 連接器新版本
- 版本:15.0.2000.440
- DLL 檔案日期:2020 年 9 月 11 日
- 啟動 SQL Server 服務
- 測試加密資料庫是否可供存取
復原
使用 SQL Server 組態管理員來停止 SQL Server 服務
使用 Control Panel\Programs\Programs and Features 解除安裝新版本
- 應用程式名稱:適用於 Microsoft Azure Key Vault 的 SQL Server 連接器
- 版本:15.0.2000.440
- DLL 檔案日期:2020 年 11 月 24 日
安裝適用於 Microsoft Azure Key Vault 的 SQL Server 連接器的舊版本
- 版本:15.0.300.96
- DLL 檔案日期:2018 年 1 月 30 日
啟動 SQL Server 服務
請檢查使用 TDE 的資料庫是否可供存取
驗證更新運作之後,即可刪除舊 SQL Server 連接器資料夾 (如果您選擇將它重新命名,而不是在步驟 3 中解除安裝)
較舊版本的 SQL Server 連接器
較舊版 SQL Server 連接器的深層連結
- 最新版:1.0.5.0 (15.0.2000.440 版) – 檔案日期 2020 年 11 月 24 日
- 1.0.5.0 (15.0.300.96 版) – 檔案日期 2018 年 1 月 30 日
- 1.0.4.0:(13.0.811.168 版)
輪替 SQL Server 服務主體
SQL Server 會使用在 Microsoft Entra ID (先前稱為 Azure Active Directory) 中建立的服務主體作為存取金鑰保存庫的認證。 服務主體擁有用戶端識別碼和驗證金鑰。 SQL Server 認證是使用 VaultName、用戶端識別碼和驗證金鑰進行設定。 驗證金鑰 將於一段時間內有效 (一或兩年)。 在時間間隔到期之前,必須在 Microsoft Entra ID 中為服務主體產生新的金鑰。 然後必須在 SQL Server 中變更認證。 Management Studio 會在目前的工作階段中為認證維持一份快取,因此認證變更時,應該重新啟動 Management Studio。
金鑰備份和復原
金鑰保存庫應該要定期備份。 如果遺失保存庫中的非對稱金鑰,便可以從備份還原它。 必須使用與以前相同的名稱來還原金鑰,作用與 [還原 PowerShell] 命令相同 (請參閱下面的步驟)。
如果遺失保存庫,您便需要重新建立保存庫,並使用和先前相同的名稱將非對稱金鑰還原至保存庫。 保存庫名稱可以不同 (或是和先前相同)。 請在新的保存庫上設定存取權限,將 SQL Server 加密案例所需的存取權限授與 SQL Server 服務主體,然後調整 SQL Server 認證以反映新的保存庫名稱。
綜上所述,以下為其步驟:
- 備份保存庫金鑰 (使用 Backup-AzureKeyVaultKey PowerShell Cmdlet)。
- 如果保存庫失敗,請在相同的地理區域建立新的保存庫。 建立此保存庫的使用者應該和 SQL Server 的服務主體設定位於相同的預設目錄中。
- 使用 Restore-AzureKeyVaultKey PowerShell Cmdlet 將金鑰還原至新的保存庫,這會用和以前一樣的名稱還原金鑰。 如果已有相同名稱的金鑰,還原就會失敗。
- 授與 SQL Server 服務主體使用新保存庫的權限。
- 修改 Database Engine 所使用的 SQL Server 認證,以反映新的保存庫名稱 (如果需要)。
金鑰備份可以跨 Azure 區域還原,只要它們仍存在於相同的地理區域或下列國家/地區雲端內:美國、加拿大、日本、澳洲、印度、亞太地區、 歐洲巴西、中國、美國政府或德國。
B. 常見問題集
在 Azure 金鑰保存庫上
金鑰作業如何與 Azure 金鑰保存庫搭配運作?
金鑰保存庫中的非對稱金鑰可用來保護 SQL Server 加密金鑰。 只有非對稱金鑰的公開部分可離開保存庫,保存庫絕不會匯出私用部分。 所有使用非對稱金鑰的密碼編譯作業都是在 Azure Key Vault 服務內完成,並受到服務安全性的保護。
什麼是金鑰 URI?
Azure 金鑰保存庫中的每個金鑰都有統一資源識別碼 (URI),可用來在您的應用程式中參考該金鑰。 使用 https://ContosoKeyVault.vault.azure.net/keys/ContosoFirstKey
的格式來取得目前的版本,並使用 https://ContosoKeyVault.vault.azure.net/keys/ContosoFirstKey/cgacf4f763ar42ffb0a1gca546aygd87
的格式來取得特定版本。
設定 SQL Server
SQL Server 連接器需要存取哪些端點? 連接器會與兩個需要設為允許的端點通訊。 針對 HTTPS,這些其他服務之輸出通訊所需的唯一連接埠是 443:
- login.microsoftonline.com/*:443
- .vault.azure.net/ :443
此外,檢查憑證撤銷清單可能會在連接埠 80 上產生 HTTP 流量。
注意
在防火牆或 Proxy 伺服器後方使用適用於 Microsoft Azure Key Vault 的 SQL Server 連接器時,如果流量延遲或遭封鎖,可能會影響效能。 熟悉在防火牆後存取 Azure Key Vault,以便確保正確規則已就緒。
如何透過 HTTP(S) Proxy 伺服器連線至 Azure Key Vault? 連接器會使用 Internet Explorer 的 Proxy 組態設定。 這些設定可以透過群組原則或登錄來控制,但請務必注意,其非全系統的設定,必須以執行 SQL Server 執行個體的服務帳戶為目標。 如果資料庫管理員在 Internet Explorer 中檢視或編輯這些設定,其只會影響該資料庫管理員的帳戶,不會影響 SQL Server 引擎。 不建議使用服務帳戶以互動方式登入伺服器,而且許多安全環境都會禁止此做法。 對已設定的 Proxy 設定所做的變更,需要重新啟動 SQL Server 執行個體才會生效,因為系統會在連接器首次嘗試連線至金鑰保存庫時快取這些變更。
SQL Server 連接器支援 Azure Key Vault 中的哪些金鑰大小? 最新組建的 SQL Server 連接器支援大小為 2048 和 3072 的 Azure Key Vault 金鑰。
注意
即使使用金鑰大小 3072,「sys.asymmetric_keys
」檢視仍會將金鑰大小報告為 2048。 這是此檢視中的已知差距,SQL Server 產品小組將在未來的版本中解決此問題。
什麼是 SQL Server 中每個設定步驟所需的最低權限等級?
雖然您能以 sysadmin 固定伺服器角色的成員身分執行所有設定步驟,但是 Microsoft 鼓勵您將自己所使用的權限降至最低。 下列清單定義每個動作的最小權限層級。
若要建立密碼編譯提供者,需要
CONTROL SERVER
權限或 sysadmin 固定伺服器角色中的成員資格。若要變更組態選項並執行
RECONFIGURE
陳述式,您必須獲授與ALTER SETTINGS
伺服器層級權限。 sysadmin 和ALTER SETTINGS
serveradmin 固定伺服器角色會隱含 權限。若要建立認證,需要
ALTER ANY CREDENTIAL
權限。若要新增登入的認證,需要
ALTER ANY LOGIN
權限。若要建立非對稱金鑰,需要
CREATE ASYMMETRIC KEY
權限。
如何變更預設的 Microsoft Entra 目錄,在相同的訂用帳戶中建立金鑰保存庫,讓該目錄變成我為 SQL Server 連接器建立的服務主體?
移至 Azure 入口網站。
在頁面右上角,選取設定圖示或使用者設定檔。
在 [目錄 + 訂用帳戶] 頁面上,選取 [所有目錄] 以查看您所屬的所有 Microsoft Entra 目錄。
如果您有多個目錄,您可以變更啟動目錄,或切換至不同的目錄。
注意
您可能無權實際變更 Azure 訂用帳戶的預設目錄。 在此情況下,請在您的預設目錄中建立 Microsoft Entra 服務主體,讓它和稍後要用的 Azure Key Vault 位於相同的目錄。
若要深入了解 Microsoft Entra ID,請參閱 Azure 訂用帳戶與 Microsoft Entra ID 的關聯方式。
C. SQL Server Connector 的錯誤碼說明
注意
雖然 Microsoft Entra ID 是 Azure Active Directory(Azure AD)的新名稱,但為了防止破壞現有的環境,Azure AD 仍會保留在某些硬式編碼元素中,例如 UI 字段、連線提供者、錯誤碼和 Cmdlet。 在本文中,這兩個名稱是可互換的。
提供者錯誤碼:
錯誤碼 | 符號 | 描述 |
---|---|---|
0 | scp_err_Success | 此作業已成功。 |
1 | scp_err_Failure | 作業失敗。 |
2 | scp_err_InsufficientBuffer | 此錯誤會指示引擎為緩衝區配置更多記憶體。 |
3 | scp_err_NotSupported | 不支援此作業。 例如,EKM 提供者不支援指定的金鑰類型或演算法。 |
4 | scp_err_NotFound | EKM 提供者找不到指定的金鑰或演算法。 |
5 | scp_err_AuthFailure | 向 EKM 提供者驗證失敗。 |
6 | scp_err_InvalidArgument | 提供的引數無效。 |
7 | scp_err_ProviderError | 在 SQL 引擎捕捉到的 EKM 提供者中發生未指定的錯誤。 |
401 | acquireToken | 伺服器已針對要求回應 401。 請確定用戶端識別碼和祕密皆正確,且認證字串是 AAD 用戶端識別碼和祕密去除連字號之後的串連。 |
404 | getKeyByName | 伺服器回應 404,因為找不到索引鍵名稱。 請確定保存庫中有索引鍵名稱。 |
2049 | scp_err_KeyNameDoesNotFitThumbprint | 金鑰名稱太長,而無法放入 SQL 引擎的指紋。 金鑰名稱不得超過 26 個字元。 |
2050 | scp_err_PasswordTooShort | AAD 用戶端識別碼和祕密串連成的祕密字串小於 32 個字元。 |
2051 | scp_err_OutOfMemory | SQL 引擎已用盡記憶體,且無法配置 EKM 提供者的記憶體。 |
2052 | scp_err_ConvertKeyNameToThumbprint | 無法將金鑰名稱轉換成指紋。 |
2053 | scp_err_ConvertThumbprintToKeyName | 無法將指紋轉換成金鑰名稱。 |
2058 | scp_err_FailureInRegistry | 無法在登錄中執行此操作。 SQL Server 服務帳戶無權建立登錄機碼。 |
3000 | ErrorSuccess | AKV 作業已成功。 |
3001 | ErrorUnknown | AKV 作業失敗,發生未指定的錯誤。 |
3002 | ErrorHttpCreateHttpClientOutOfMemory | 因為記憶體不足,所以無法建立 AKV 作業的 HttpClient。 |
3003 | ErrorHttpOpenSession | 因為發生網路錯誤,所以無法開啟 HTTP 工作階段。 |
3004 | ErrorHttpConnectSession | 因為發生網路錯誤,所以無法連接 HTTP 工作階段。 |
3005 | ErrorHttpAttemptConnect | 因為發生網路錯誤,所以無法嘗試連線。 |
3006 | ErrorHttpOpenRequest | 因為發生網路錯誤,所以無法開啟要求。 |
3007 | ErrorHttpAddRequestHeader | 無法新增要求標頭。 |
3008 | ErrorHttpSendRequest | 因為發生網路錯誤,所以無法傳送要求。 |
3009 | ErrorHttpGetResponseCode | 因為發生網路錯誤,所以無法取得回應碼。 |
3010 | ErrorHttpResponseCodeUnauthorized | 伺服器已針對要求回應 401。 |
3011 | ErrorHttpResponseCodeThrottled | 伺服器已節流處理要求。 |
3012 | ErrorHttpResponseCodeClientError | 連接器傳送的要求無效。 這通常表示索引鍵名稱無效或包含無效的字元。 |
3013 | ErrorHttpResponseCodeServerError | 伺服器已回應 500 與 600 之間的回應碼。 |
3014 | ErrorHttpQueryHeader | 無法查詢回應標頭。 |
3015 | ErrorHttpQueryHeaderOutOfMemoryCopyHeader | 因為記憶體不足,所以無法複製回應標頭。 |
3016 | ErrorHttpQueryHeaderOutOfMemoryReallocBuffer | 重新配置緩衝區時,因為記憶體不足,所以無法查詢回應標頭。 |
3017 | ErrorHttpQueryHeaderNotFound | 在回應中找不到查詢標頭。 |
3018 | ErrorHttpQueryHeaderUpdateBufferLength | 查詢回應標頭時,無法更新緩衝區長度。 |
3019 | ErrorHttpReadData | 因為發生網路錯誤,所以無法讀取回應資料。 |
3076 | ErrorHttpResourceNotFound | 伺服器回應 404,因為找不到索引鍵名稱。 請確定保存庫中有索引鍵名稱。 |
3077 | ErrorHttpOperationForbidden | 伺服器回應 403,因為使用者沒有適當的權限,不能執行動作。 請確定您有執行指定作業的權限。 連接器至少需要「get、list、wrapKey、unwrapKey」權限,才能正確運作。 |
3100 | ErrorHttpCreateHttpClientOutOfMemory | 因為記憶體不足,所以無法建立 AKV 作業的 HttpClient。 |
3101 | ErrorHttpOpenSession | 因為發生網路錯誤,所以無法開啟 HTTP 工作階段。 |
3102 | ErrorHttpConnectSession | 因為發生網路錯誤,所以無法連接 HTTP 工作階段。 |
3103 | ErrorHttpAttemptConnect | 因為發生網路錯誤,所以無法嘗試連接。 |
3104 | ErrorHttpOpenRequest | 因為發生網路錯誤,所以無法開啟要求。 |
3105 | ErrorHttpAddRequestHeader | 無法新增要求標頭。 |
3106 | ErrorHttpSendRequest | 因為發生網路錯誤,所以無法傳送要求。 |
3107 | ErrorHttpGetResponseCode | 因為發生網路錯誤,所以無法取得回應碼。 |
3108 | ErrorHttpResponseCodeUnauthorized | 伺服器已針對要求回應 401。 請確定用戶端識別碼和祕密皆正確,且認證字串是 AAD 用戶端識別碼和祕密去除連字號之後的串連。 |
3109 | ErrorHttpResponseCodeThrottled | 伺服器已節流處理要求。 |
3110 | ErrorHttpResponseCodeClientError | 要求無效。 這通常表示索引鍵名稱無效或包含無效的字元。 |
3111 | ErrorHttpResponseCodeServerError | 伺服器已回應 500 與 600 之間的回應碼。 |
3112 | ErrorHttpResourceNotFound | 伺服器回應 404,因為找不到索引鍵名稱。 請確定保存庫中有索引鍵名稱。 |
3113 | ErrorHttpOperationForbidden | 伺服器回應 403,因為使用者沒有適當的權限,無法執行動作。 請確定您有執行指定作業的權限。 至少需要「get、wrapKey、unwrapKey」權限。 |
3114 | ErrorHttpQueryHeader | 無法查詢回應標頭。 |
3115 | ErrorHttpQueryHeaderOutOfMemoryCopyHeader | 因為記憶體不足,所以無法複製回應標頭。 |
3116 | ErrorHttpQueryHeaderOutOfMemoryReallocBuffer | 重新配置緩衝區時,因為記憶體不足,所以無法查詢回應標頭。 |
3117 | ErrorHttpQueryHeaderNotFound | 在回應中找不到查詢標頭。 |
3118 | ErrorHttpQueryHeaderUpdateBufferLength | 查詢回應標頭時,無法更新緩衝區長度。 |
3119 | ErrorHttpReadData | 因為發生網路錯誤,所以無法讀取回應資料。 |
3120 | ErrorHttpGetResponseOutOfMemoryCreateTempBuffer | 建立暫存緩衝區時,因記憶體不足而無法取得回應本文。 |
3121 | ErrorHttpGetResponseOutOfMemoryGetResultString | 取得結果字串時,因記憶體不足而無法取得回應本文。 |
3122 | ErrorHttpGetResponseOutOfMemoryAppendResponse | 附加回應時,因記憶體不足而無法取得回應本文。 |
3200 | ErrorGetAADValuesOutOfMemoryConcatPath | 串連路徑時,因記憶體不足而無法取得 Azure Active Directory 挑戰標頭值。 |
3201 | ErrorGetAADDomainUrlStartPosition | 在格式不正確的回應挑戰標頭中找不到 Azure Active Directory 網域 URL 的起始位置。 |
3202 | ErrorGetAADDomainUrlStopPosition | 在格式不正確的回應挑戰標頭中找不到 Azure Active Directory 網域 URL 的結束位置。 |
3203 | ErrorGetAADDomainUrlMalformatted | Azure Active Directory 回應挑戰標頭的格式不正確,且未包含 AAD 網域 URL。 |
3204 | ErrorGetAADDomainUrlOutOfMemoryAlloc | 配置 Azure Active Directory 網域 URL 的緩衝區時,記憶體不足。 |
3205 | ErrorGetAADTenantIdOutOfMemoryAlloc | 配置 Azure Active Directory tenantId 的緩衝區時,記憶體不足。 |
3206 | ErrorGetAKVResourceUrlStartPosition | 在格式不正確的回應挑戰標頭中找不到 Azure Key Vault 資源 URL 的起始位置。 |
3207 | ErrorGetAKVResourceUrlStopPosition | 在格式不正確的回應挑戰標頭中找不到 Azure Key Vault 資源 URL 的結束位置。 |
3208 | ErrorGetAKVResourceUrlOutOfMemoryAlloc | 配置 Azure Key Vault 資源 URL 的緩衝區時,記憶體不足。 |
3300 | ErrorGetTokenOutOfMemoryConcatPath | 串連要求路徑時,因記憶體不足而無法取得權杖。 |
3301 | ErrorGetTokenOutOfMemoryConcatBody | 串連回應本文時,因記憶體不足而無法取得權杖。 |
3302 | ErrorGetTokenOutOfMemoryConvertResponseString | 轉換回應字串時,因記憶體不足而無法取得權杖。 |
3303 | ErrorGetTokenBadCredentials | 因認證不正確而無法取得權杖。 請確定認證字串或憑證是有效的。 |
3304 | ErrorGetTokenFailedToGetToken | 雖然認證正確,作業仍無法取得有效的權杖。 |
3305 | ErrorGetTokenRejected | 權杖有效,但遭到伺服器拒絕。 |
3306 | ErrorGetTokenNotFound | 在回應中找不到權杖。 |
3307 | ErrorGetTokenJsonParser | 無法剖析伺服器的 JSON 回應。 |
3308 | ErrorGetTokenExtractToken | 無法從 JSON 回應中擷取權杖。 |
3400 | ErrorGetKeyByNameOutOfMemoryConvertResponseString | 轉換回應字串時,因記憶體不足而無法依名稱取得金鑰。 |
3401 | ErrorGetKeyByNameOutOfMemoryConcatPath | 串連路徑時,因記憶體不足而無法依名稱取得金鑰。 |
3402 | ErrorGetKeyByNameOutOfMemoryConcatHeader | 串連標頭時,因記憶體不足而無法依名稱取得金鑰。 |
3403 | ErrorGetKeyByNameNoResponse | 因伺服器沒有回應,而無法依名稱取得金鑰。 |
3404 | ErrorGetKeyByNameJsonParser | 因無法剖析 JSON 回應,而無法依名稱取得金鑰。 |
3405 | ErrorGetKeyByNameExtractKeyNode | 因無法從回應中擷取金鑰節點,而無法依名稱取得金鑰。 |
3406 | ErrorGetKeyByNameExtractKeyId | 因無法從回應中擷取金鑰識別碼,而無法依名稱取得金鑰。 |
3407 | ErrorGetKeyByNameExtractKeyType | 因無法從回應中擷取金鑰類型,而無法依名稱取得金鑰。 |
3408 | ErrorGetKeyByNameExtractKeyN | 因無法從回應中擷取金鑰 N,而無法依名稱取得金鑰。 |
3409 | ErrorGetKeyByNameBase64DecodeN | 因無法對 N 進行 Base64 解碼,而無法依名稱取得金鑰。 |
3410 | ErrorGetKeyByNameExtractKeyE | 因無法從回應中擷取金鑰 E,而無法依名稱取得金鑰。 |
3411 | ErrorGetKeyByNameBase64DecodeE | 因無法對 E 進行 Base64 解碼,而無法依名稱取得金鑰。 |
3412 | ErrorGetKeyByNameExtractKeyUri | 無法從回應中擷取金鑰 URI。 |
3500 | ErrorBackupKeyOutOfMemoryConvertResponseString | 轉換回應字串時,因記憶體不足而無法備份金鑰。 |
3501 | ErrorBackupKeyOutOfMemoryConcatPath | 串連路徑時,因記憶體不足而無法備份金鑰。 |
3502 | ErrorBackupKeyOutOfMemoryConcatHeader | 串連要求標頭時,因記憶體不足而無法備份金鑰。 |
3503 | ErrorBackupKeyNoResponse | 因伺服器沒有回應,而無法備份金鑰。 |
3504 | ErrorBackupKeyJsonParser | 因無法剖析 JSON 回應,而無法備份金鑰。 |
3505 | ErrorBackupKeyExtractValue | 因無法從 JSON 回應中擷取值,而無法備份金鑰。 |
3506 | ErrorBackupKeyBase64DecodeValue | 因無法對值欄位進行 Base64 解碼,而無法備份金鑰。 |
3600 | ErrorWrapKeyOutOfMemoryConvertResponseString | 轉換回應字串時,因記憶體不足而無法包裝金鑰。 |
3601 | ErrorWrapKeyOutOfMemoryConcatPath | 串連路徑時,因記憶體不足而無法包裝金鑰。 |
3602 | ErrorWrapKeyOutOfMemoryConcatHeader | 串連標頭時,因記憶體不足而無法包裝金鑰。 |
3603 | ErrorWrapKeyOutOfMemoryConcatBody | 串連本文時,因記憶體不足而無法包裝金鑰。 |
3604 | ErrorWrapKeyOutOfMemoryConvertEncodedBody | 轉換編碼的本文時,因記憶體不足而無法包裝金鑰。 |
3605 | ErrorWrapKeyBase64EncodeKey | 因無法對金鑰進行 Base64 編碼,而無法包裝金鑰。 |
3606 | ErrorWrapKeyBase64DecodeValue | 因無法對回應值進行 Base64 解碼,而無法包裝金鑰。 |
3607 | ErrorWrapKeyJsonParser | 因無法剖析 JSON 回應,而無法包裝金鑰。 |
3608 | ErrorWrapKeyExtractValue | 因無法從回應中擷取值,而無法包裝金鑰。 |
3609 | ErrorWrapKeyNoResponse | 因伺服器沒有回應,而無法包裝金鑰。 |
3700 | ErrorUnwrapKeyOutOfMemoryConvertResponseString | 轉換回應字串時,因記憶體不足而無法將金鑰解除包裝。 |
3701 | ErrorUnwrapKeyOutOfMemoryConcatPath | 串連路徑時,因記憶體不足而無法將金鑰解除包裝。 |
3702 | ErrorUnwrapKeyOutOfMemoryConcatHeader | 串連標頭時,因記憶體不足而無法將金鑰解除包裝。 |
3703 | ErrorUnwrapKeyOutOfMemoryConcatBody | 串連本文時,因記憶體不足而無法將金鑰解除包裝。 |
3704 | ErrorUnwrapKeyOutOfMemoryConvertEncodedBody | 轉換編碼的本文時,因記憶體不足而無法將金鑰解除包裝。 |
3705 | ErrorUnwrapKeyBase64EncodeKey | 因無法對金鑰進行 Base64 編碼,而無法將金鑰解除包裝。 |
3706 | ErrorUnwrapKeyBase64DecodeValue | 因無法對回應值進行 Base64 解碼,而無法將金鑰解除包裝。 |
3707 | ErrorUnwrapKeyJsonParser | 因無法從回應中擷取值,而無法將金鑰解除包裝。 |
3708 | ErrorUnwrapKeyExtractValue | 因無法從回應中擷取值,而無法將金鑰解除包裝。 |
3709 | ErrorUnwrapKeyNoResponse | 因伺服器沒有回應,而無法將金鑰解除包裝。 |
3800 | ErrorSecretAuthParamsGetRequestBody | 使用 AAD clientId 和秘密建立要求本文時發生錯誤。 |
3801 | ErrorJWTTokenCreateHeader | 建立 JWT 權杖標頭以使用 AAD 進行驗證時發生錯誤。 |
3802 | ErrorJWTTokenCreatePayloadGUID | 建立 JWT 權杖承載的 GUID 以使用 AAD 進行驗證時發生錯誤。 |
3803 | ErrorJWTTokenCreatePayload | 建立 JWT 權杖承載以使用 AAD 進行驗證時發生錯誤。 |
3804 | ErrorJWTTokenCreateSignature | 建立 JWT 權杖簽章以使用 AAD 進行驗證時發生錯誤。 |
3805 | ErrorJWTTokenSignatureHashAlg | 取得 SHA256 雜湊演算法以使用 AAD 進行驗證時發生錯誤。 |
3806 | ErrorJWTTokenSignatureHash | 建立 SHA256 雜湊以使用 AAD 進行 JWT 權杖驗證時發生錯誤。 |
3807 | ErrorJWTTokenSignatureSignHash | 簽署 JWT 權杖雜湊以使用 AAD 進行驗證時發生錯誤。 |
3808 | ErrorJWTTokenCreateToken | 建立 JWT 權杖以使用 AAD 進行驗證時發生錯誤。 |
3809 | ErrorPfxCertAuthParamsImportPfx | 匯入 Pfx 憑證以使用 AAD 進行驗證時發生錯誤。 |
3810 | ErrorPfxCertAuthParamsGetThumbprint | 從 Pfx 憑證取得指紋以使用 AAD 進行驗證時發生錯誤。 |
3811 | ErrorPfxCertAuthParamsGetPrivateKey | 從 Pfx 憑證取得私密金鑰以使用 AAD 進行驗證時發生錯誤。 |
3812 | ErrorPfxCertAuthParamsSignAlg | 取得 RSA 簽署演算法以使用 AAD 進行 Pfx 憑證驗證時發生錯誤。 |
3813 | ErrorPfxCertAuthParamsImportForSign | 匯入 RSA 簽署的 Pfx 私密金鑰以使用 AAD 進行驗證時發生錯誤。 |
3814 | ErrorPfxCertAuthParamsCreateRequestBody | 從 Pfx 憑證建立要求本文以使用 AAD 進行驗證時發生錯誤。 |
3815 | ErrorPEMCertAuthParamsGetThumbprint | 對指紋進行 Base64 解碼以使用 AAD 進行驗證時發生錯誤。 |
3816 | ErrorPEMCertAuthParamsGetPrivateKey | 從 PEM 取得 RSA 私密金鑰以使用 AAD 進行驗證時發生錯誤。 |
3817 | ErrorPEMCertAuthParamsSignAlg | 取得 RSA 簽署演算法以使用 AAD 進行 PEM 私密金鑰驗證時發生錯誤。 |
3818 | ErrorPEMCertAuthParamsImportForSign | 匯入 RSA 簽署的 PEM 私密金鑰以使用 AAD 進行驗證時發生錯誤。 |
3819 | ErrorPEMCertAuthParamsCreateRequestBody | 從 PEM 私密金鑰建立要求本文以使用 AAD 進行驗證時發生錯誤。 |
3820 | ErrorLegacyPrivateKeyAuthParamsSignAlg | 取得 RSA 簽署演算法以使用 AAD 進行舊版私密金鑰驗證時發生錯誤。 |
3821 | ErrorLegacyPrivateKeyAuthParamsImportForSign | 匯入 RSA 簽署的舊版私密金鑰以使用 AAD 進行驗證時發生錯誤。 |
3822 | ErrorLegacyPrivateKeyAuthParamsCreateRequestBody | 從舊版私密金鑰建立要求本文以使用 AAD 進行驗證時發生錯誤。 |
3900 | ErrorAKVDoesNotExist | 發生網際網路名稱未解決的錯誤。 這通常表示 Azure Key Vault 已刪除。 |
4000 | ErrorCreateKeyVaultRetryManagerOutOfMemory | 因記憶體不足而無法建立 AKV 作業的 RetryManager。 |
如果在此表格中看不到您的錯誤碼,以下是一些可能發生此錯誤的原因:
您可能沒有網際網路存取權,因此無法存取您的 Azure Key Vault。 請檢查網際網路連線。
Azure 金鑰保存庫服務可能已關閉。 請在其他時間再試一次。
您可能已經從 Azure Key Vault 或 SQL Server 卸除非對稱金鑰。 請還原金鑰。
如果收到「無法載入程式庫」錯誤,請確定您已根據所執行之 SQL Server 版本安裝正確版本的 Visual Studio C++ 可轉散發套件。 下表會指定要從 Microsoft 下載中心安裝的版本。
Windows 事件記錄檔也會記錄與 SQL Server 連接器相關聯的錯誤,這可以協助提供錯誤實際發生原因的額外內容。 Windows 應用程式事件記錄檔中的來源將會是「適用於 Microsoft Azure Key Vault 的 SQL Server 連接器」。
適用於 SQL Server 連接器 1.0.5.0 的 C++ 執行階段程式庫
SQL Server 版本 | 使用 SQL Server 連接器 1.0.5.0 時可轉散發的安裝連結 |
---|---|
2008、2008 R2、2012、2014 | 適用於 Visual Studio 2013 的 Visual C++ 可轉散發套件 |
2016、2017、2019 | 適用於 Visual Studio 2015 的 Visual C++ 可轉散發套件 |
適用於 SQL Server 連接器 1.0.4.0 的 C++ 執行階段程式庫
SQL Server 版本 | 使用 SQL Server 連接器 1.0.4.0 時可轉散發的安裝連結 |
---|---|
2008、2008 R2、2012、2014、2016、2017、2019 | 適用於 Visual Studio 2013 的 Visual C++ 可轉散發套件 |
其他參考
深入了解可延伸金鑰管理
支援 EKM 的 SQL 加密︰
相關的 Transact-SQL 命令:
Azure 金鑰保存庫文件:
PowerShell Azure 金鑰保存庫 Cmdlet 參考