Pemecahan Masalah Pemeliharaan & Konektor SQL Server
Berlaku untuk:
SQL Server (semua versi yang didukung)
Informasi tambahan tentang Konektor SQL Server disediakan dalam topik ini. Untuk informasi selengkapnya tentang konektor SQL Server, lihat Manajemen Kunci yang Dapat Diperluas Menggunakan Azure Key Vault (SQL Server), Langkah-langkah Penyiapan untuk Manajemen Kunci yang Dapat Diperluas Menggunakan Azure Key Vault, dan Menggunakan Konektor SQL Server dengan Fitur Enkripsi SQL.
J. Petunjuk Pemeliharaan untuk Konektor SQL Server
Rollover Kunci
Penting
Konektor SQL Server memerlukan nama kunci untuk hanya menggunakan karakter "a-z", "A-Z", "0-9", dan "-", dengan batas 26 karakter. Versi kunci yang berbeda dengan nama kunci yang sama di Azure Key Vault tidak akan berfungsi dengan Konektor SQL Server. Untuk memutar kunci Azure Key Vault yang sedang digunakan oleh SQL Server, kunci baru dengan nama kunci baru harus dibuat.
Biasanya, kunci asimetris server untuk enkripsi SQL Server perlu diberi versi setiap 1-2 tahun. Penting untuk dicatat bahwa meskipun Key Vault memungkinkan kunci untuk diberi versi, pelanggan tidak boleh menggunakan fitur tersebut untuk menerapkan penerapan versi. Konektor SQL Server tidak dapat menangani perubahan dalam versi kunci Key Vault. Untuk menerapkan penerapan versi kunci, buat kunci baru di Key Vault lalu enkripsi ulang kunci enkripsi data di Management Studio.
Untuk TDE, ini adalah bagaimana hal ini akan dicapai:
Di PowerShell: Buat kunci asimetris baru (dengan nama yang berbeda dari kunci asimetris TDE Anda saat ini) di Key Vault.
Add-AzKeyVaultKey -VaultName 'ContosoDevKeyVault' ` -Name 'Key2' -Destination 'Software'Menggunakan Management Studio atau sqlcmd.exe: Gunakan pernyataan berikut seperti yang ditunjukkan pada Langkah 3, bagian 3.
Impor kunci asimetris baru.
USE master CREATE ASYMMETRIC KEY [MASTER_KEY2] FROM PROVIDER [EKM] WITH PROVIDER_KEY_NAME = 'Key2', CREATION_DISPOSITION = OPEN_EXISTING GOBuat login baru untuk dikaitkan dengan kunci asimetris baru (seperti yang ditunjukkan di bawah instruksi TDE).
USE master CREATE LOGIN TDE_Login2 FROM ASYMMETRIC KEY [MASTER_KEY2] GOBuat kredensial baru untuk dipetakan ke login.
CREATE CREDENTIAL Azure_EKM_TDE_cred2 WITH IDENTITY = 'ContosoDevKeyVault', SECRET = 'EF5C8E094D2A4A769998D93440D8115DAADsecret123456789=' FOR CRYPTOGRAPHIC PROVIDER EKM; ALTER LOGIN TDE_Login2 ADD CREDENTIAL Azure_EKM_TDE_cred2; GOPilih database yang kunci enkripsi databasenya ingin Anda enkripsi ulang.
USE [database] GOMengenkripsi ulang kunci enkripsi database.
ALTER DATABASE ENCRYPTION KEY ENCRYPTION BY SERVER ASYMMETRIC KEY [MASTER_KEY2]; GO
Peningkatan Konektor SQL Server
Versi 1.0.0.440 dan yang lebih lama telah diganti dan tidak lagi didukung di lingkungan produksi. Versi 1.0.1.0 dan yang lebih baru didukung di lingkungan produksi. Gunakan instruksi berikut untuk meningkatkan ke versi terbaru yang tersedia di Pusat Unduhan Microsoft.
Mutakhirkan
- Menghentikan layanan SQL Server menggunakan SQL Server Configuration Manager
- Hapus instalan versi lama menggunakan Control Panel\Programs\Programs and Features
- Nama aplikasi: Konektor SQL Server untuk Microsoft Azure Key Vault
- Versi: 15.0.300.96 (atau lebih lama)
- Tanggal file DLL: 30/01/2018 15:00 (atau lebih lama)
- Menginstal (meningkatkan) Konektor SQL Server baru untuk Microsoft Azure Key Vault
- Versi: 15.0.2000.440
- Tanggal file DLL: 09/11/2020 05:17
- Memulai layanan SQL Server
- Uji DB terenkripsi dapat diakses
Putar kembali
Menghentikan layanan SQL Server menggunakan SQL Server Configuration Manager
Hapus instalan versi baru menggunakan Control Panel\Programs\Programs and Features
- Nama aplikasi: Konektor SQL Server untuk Microsoft Azure Key Vault
- Versi: 15.0.2000.440
- Tanggal file DLL: 09/11/2020 05:17
Menginstal versi lama Konektor SQL Server untuk Microsoft Azure Key Vault
- Versi: 15.0.300.96
- Tanggal file DLL: 30/01/2018 15:00
Memulai layanan SQL Server
Periksa apakah database yang menggunakan TDE dapat diakses.
Setelah memvalidasi bahwa pembaruan berfungsi, Anda dapat menghapus folder Konektor SQL Server lama (jika Anda memilih untuk mengganti namanya alih-alih menghapus instalasi di Langkah 3.)
Versi konektor SQL Server yang lebih lama
Tautan mendalam ke versi konektor SQL Server yang lebih lama
- Saat ini: 1.0.5.0 (versi 15.0.2000.440) – Tanggal file 11 September 2020
- 1.0.5.0 (versi 15.0.300.96) – Tanggal file 30 Januari 2018
- 1.0.4.0: (versi 13.0.811.168)
Menggulung Perwakilan Layanan SQL Server
SQL Server menggunakan Perwakilan Layanan yang dibuat di Azure Active Directory sebagai kredensial untuk mengakses Key Vault. Perwakilan Layanan memiliki ID Klien dan Kunci Autentikasi. Kredensial SQL Server disiapkan dengan VaultName, ID Klien, dan Kunci Autentikasi. Kunci Autentikasi berlaku untuk jangka waktu tertentu (satu atau dua tahun). Sebelum periode waktu berakhir, kunci baru harus dibuat di Azure ACTIVE Directory untuk Perwakilan Layanan. Kemudian kredensial harus diubah di SQL Server. Management Studio mempertahankan cache untuk kredensial dalam sesi saat ini, jadi ketika kredensial diubah, Management Studio harus dimulai ulang.
Pencadangan dan Pemulihan Kunci
Brankas kunci harus dicadangkan secara teratur. Jika kunci asimetris di vault hilang, kunci tersebut dapat dipulihkan dari cadangan. Kunci harus dipulihkan menggunakan nama yang sama seperti sebelumnya, yang akan dilakukan perintah Pulihkan PowerShell (lihat langkah-langkah di bawah).
Jika vault hilang, Anda harus membuat ulang vault dan memulihkan kunci asimetris ke vault menggunakan nama yang sama seperti sebelumnya. Nama vault dapat berbeda (atau sama seperti sebelumnya). Atur izin akses pada vault baru untuk diberikan kepada perwakilan layanan SQL Server akses yang diperlukan untuk skenario enkripsi SQL Server, lalu sesuaikan kredensial SQL Server sehingga nama vault baru tercermin.
Singkatnya, berikut adalah langkah-langkahnya:
- Cadangkan kunci vault (menggunakan cmdlet PowerShell Backup-AzureKeyVaultKey).
- Dalam kasus kegagalan vault, buat vault baru di wilayah geografis yang sama. Pengguna yang membuat vault harus berada di direktori default yang sama dengan penyiapan perwakilan layanan untuk SQL Server.
- Pulihkan kunci ke vault baru menggunakan cmdlet PowerShell Restore-AzureKeyVaultKey, yang memulihkan kunci menggunakan nama yang sama seperti sebelumnya. Jika sudah ada kunci dengan nama yang sama, pemulihan akan gagal.
- Berikan izin kepada perwakilan layanan SQL Server untuk menggunakan vault baru ini.
- Ubah kredensial SQL Server yang digunakan oleh Mesin Database untuk mencerminkan nama vault baru (jika diperlukan).
Cadangan kunci dapat dipulihkan di seluruh wilayah Azure, selama tetap berada di wilayah geografis atau cloud nasional yang sama: AS, Kanada, Jepang, Australia, India, APAC, Eropa Brasil, Tiongkok, Pemerintah AS, atau Jerman.
B. Pertanyaan Umum
Di Azure Key Vault
Bagaimana cara kerja operasi utama dengan Azure Key Vault?
Kunci asimetris di brankas kunci digunakan untuk melindungi kunci enkripsi SQL Server. Hanya bagian publik dari kunci asimetris yang pernah meninggalkan brankas; bagian privat tidak pernah diekspor oleh vault. Semua operasi kriptografi yang menggunakan kunci asimetris dilakukan dalam layanan Azure Key Vault, dan dilindungi oleh keamanan layanan.
Apa itu URI Kunci?
Setiap kunci di Azure Key Vault memiliki Pengidentifikasi Sumber Daya Seragam (URI), yang dapat Anda gunakan untuk mereferensikan kunci dalam aplikasi Anda. Gunakan format https://ContosoKeyVault.vault.azure.net/keys/ContosoFirstKey untuk mendapatkan versi saat ini, dan gunakan format https://ContosoKeyVault.vault.azure.net/keys/ContosoFirstKey/cgacf4f763ar42ffb0a1gca546aygd87 untuk mendapatkan versi tertentu.
Saat Mengonfigurasi SQL Server
Titik akhir apa yang perlu diakses oleh Konektor SQL Server? Konektor berbicara dengan dua titik akhir, yang perlu diizinkan. Satu-satunya port yang diperlukan untuk komunikasi keluar ke layanan lain ini adalah 443 untuk Https:
- login.microsoftonline.com/*:443
- .vault.azure.net/:443
Selain itu, memeriksa daftar pencabutan sertifikat dapat membuat lalu lintas HTTP pada port 80.
Catatan
Menggunakan Konektor SQL Server untuk Azure Key Vault di belakang firewall atau server proksi dapat memengaruhi performa jika lalu lintas tertunda atau diblokir. Biasakan diri Anda dengan Akses Azure Key Vault di belakang firewall untuk memastikan aturan yang benar sudah ada.
Bagaimana cara menyambungkan ke Azure Key Vault melalui Server Proksi HTTP? Konektor menggunakan pengaturan konfigurasi Proksi Internet Explorer. Pengaturan ini dapat dikontrol melalui Kebijakan Grup atau melalui Registri, tetapi penting untuk dicatat bahwa pengaturan tersebut tidak di seluruh sistem dan perlu ditargetkan ke akun layanan yang menjalankan instans SQL Server. Jika Administrator Database melihat atau mengedit pengaturan di Internet Explorer, mereka hanya akan memengaruhi akun Administrator Database daripada mesin SQL Server. Masuk ke server secara interaktif menggunakan akun layanan tidak disarankan dan diblokir di banyak lingkungan yang aman. Perubahan pada pengaturan proksi yang dikonfigurasi mungkin mengharuskan memulai ulang instans SQL Server agar berlaku saat di-cache saat Konektor pertama kali mencoba menyambungkan ke brankas kunci.
Ukuran kunci mana di Azure Key Vault yang didukung oleh Konektor SQL Server? Build terbaru SQL Server Connector mendukung kunci Azure Key Vault ukuran 2048 dan 3072.
Catatan
Tampilan "sys.asymmetric_keys" melaporkan ukuran kunci sebagai 2048 bahkan jika ukuran kunci 3072 digunakan. Ini adalah celah yang diketahui dalam tampilan ini dan tim produk SQL Server akan mengatasinya dalam rilis mendatang.
Apa tingkat izin minimum yang diperlukan untuk setiap langkah konfigurasi di SQL Server?
Meskipun Anda dapat melakukan semua langkah konfigurasi sebagai anggota peran server tetap sysadmin, Microsoft mendorong Anda untuk meminimalkan izin yang Anda gunakan. Daftar berikut menentukan tingkat izin minimum untuk setiap tindakan.
Untuk membuat penyedia kriptografi, memerlukan
CONTROL SERVERizin atau keanggotaan dalam peran server tetap sysadmin .Untuk mengubah opsi konfigurasi dan menjalankan
RECONFIGUREpernyataan, Anda harus diberikanALTER SETTINGSizin tingkat server. IzinALTER SETTINGSsecara implisit dipegang oleh peran server tetap sysadmin dan serveradmin .Untuk membuat kredensial, memerlukan
ALTER ANY CREDENTIALizin.Untuk menambahkan kredensial ke login, memerlukan
ALTER ANY LOGINizin.Untuk membuat kunci asimetris
CREATE ASYMMETRIC KEY, memerlukan izin.
Bagaimana cara mengubah Direktori Aktif default saya sehingga brankas kunci saya dibuat dalam langganan dan Direktori Aktif yang sama dengan perwakilan layanan yang saya buat untuk Konektor SQL Server?

Masuk ke Portal Azure.
Di sudut kanan atas halaman, pilih ikon pengaturan, atau profil pengguna Anda.
Pada halaman Direktori + langganan , pilih Semua Direktori untuk melihat semua Azure Active Directory tempat Anda berada.
Anda dapat mengubah direktori Startup, atau beralih ke direktori lain jika Anda memiliki beberapa direktori.
Catatan
Anda mungkin tidak memiliki izin untuk benar-benar mengubah direktori default pada langganan Azure Anda. Dalam hal ini, buat perwakilan layanan Azure AD dalam direktori default Anda sehingga berada dalam direktori yang sama dengan Azure Key Vault yang digunakan nanti.
Untuk mempelajari selengkapnya tentang Direktori Aktif, baca Bagaimana langganan Azure terkait dengan Azure Active Directory
C. Penjelasan Kode Kesalahan untuk Konektor SQL Server
Kode Kesalahan Penyedia:
| Kode kesalahan | Simbol | Deskripsi |
|---|---|---|
| 0 | scp_err_Success | Operasi berhasil. |
| 1 | scp_err_Failure | Operasi gagal. |
| 2 | scp_err_InsufficientBuffer | Kesalahan ini memberi tahu mesin untuk mengalokasikan lebih banyak memori untuk buffer. |
| 3 | scp_err_NotSupported | Operasi tidak didukung. Misalnya, jenis kunci atau algoritma yang ditentukan tidak didukung oleh penyedia EKM. |
| 4 | scp_err_NotFound | Kunci atau algoritma yang ditentukan tidak dapat ditemukan oleh penyedia EKM. |
| 5 | scp_err_AuthFailure | Autentikasi gagal dengan penyedia EKM. |
| 6 | scp_err_InvalidArgument | Argumen yang disediakan tidak valid. |
| 7 | scp_err_ProviderError | Ada kesalahan yang tidak ditentukan terjadi di penyedia EKM yang tertangkap oleh mesin SQL. |
| 401 | acquireToken | Server merespons 401 untuk permintaan tersebut. Pastikan ID dan rahasia klien sudah benar, dan string kredensial adalah perangkaian ID klien AAD dan rahasia tanpa tanda hubung. |
| 404 | getKeyByName | Server merespons 404, karena nama kunci tidak ditemukan. Pastikan nama kunci ada di vault Anda. |
| 2049 | scp_err_KeyNameDoesNotFitThumbprint | Nama kunci terlalu panjang untuk dimasukkan ke dalam thumbprint mesin SQL. Nama kunci tidak boleh melebihi 26 karakter. |
| 2050 | scp_err_PasswordTooShort | String rahasia yang merupakan perangkaian ID klien AAD dan rahasia lebih pendek dari 32 karakter. |
| 2051 | scp_err_OutOfMemory | Mesin SQL kehabisan memori dan gagal mengalokasikan memori untuk penyedia EKM. |
| 2052 | scp_err_ConvertKeyNameToThumbprint | Gagal mengonversi nama kunci menjadi thumbprint. |
| 2053 | scp_err_ConvertThumbprintToKeyName | Gagal mengonversi thumbprint menjadi nama kunci. |
| 2058 | scp_err_FailureInRegistry | Gagal melakukan operasi dalam registri. Akun layanan SQL Server tidak memiliki izin untuk membuat kunci registri. |
| 3000 | ErrorSuccess | Operasi AKV telah berhasil. |
| 3001 | ErrorUnknown | Operasi AKV gagal dengan kesalahan yang tidak ditentukan. |
| 3002 | ErrorHttpCreateHttpClientOutOfMemory | Tidak dapat membuat HttpClient untuk operasi AKV karena kehabisan memori. |
| 3003 | ErrorHttpOpenSession | Tidak dapat membuka sesi Http karena kesalahan jaringan. |
| 3004 | ErrorHttpConnectSession | Tidak dapat menyambungkan sesi Http karena kesalahan jaringan. |
| 3005 | ErrorHttpAttemptConnect | Tidak dapat mencoba sambungan karena kesalahan jaringan. |
| 3006 | ErrorHttpOpenRequest | Tidak dapat membuka permintaan karena kesalahan jaringan. |
| 3007 | ErrorHttpAddRequestHeader | Tidak dapat menambahkan header permintaan. |
| 3008 | ErrorHttpSendRequest | Tidak dapat mengirim permintaan karena kesalahan jaringan. |
| 3009 | ErrorHttpGetResponseCode | Tidak bisa mendapatkan kode respons karena kesalahan jaringan. |
| 3010 | ErrorHttpResponseCodeUnauthorized | Server merespons 401 untuk permintaan tersebut. |
| 3011 | ErrorHttpResponseCodeThrottled | Server telah membatasi permintaan. |
| 3012 | ErrorHttpResponseCodeClientError | Permintaan yang dikirim dari konektor tidak valid. Ini biasanya berarti nama kunci tidak valid atau berisi karakter yang tidak valid. |
| 3013 | ErrorHttpResponseCodeServerError | Server merespons kode respons antara 500 dan 600. |
| 3014 | ErrorHttpQueryHeader | Tidak dapat meminta header respons. |
| 3015 | ErrorHttpQueryHeaderOutOfMemoryCopyHeader | Tidak dapat menyalin header respons karena kehabisan memori. |
| 3016 | ErrorHttpQueryHeaderOutOfMemoryReallocBuffer | Tidak dapat mengkueri header respons karena kehabisan memori saat merealokasi buffer. |
| 3017 | ErrorHttpQueryHeaderNotFound | Tidak dapat menemukan header kueri dalam respons. |
| 3018 | ErrorHttpQueryHeaderUpdateBufferLength | Tidak dapat memperbarui panjang buffer saat mengkueri header respons. |
| 3019 | ErrorHttpReadData | Tidak dapat membaca data respons karena kesalahan jaringan. |
| 3076 | ErrorHttpResourceNotFound | Server merespons 404, karena nama kunci tidak ditemukan. Pastikan nama kunci ada di vault Anda. |
| 3077 | ErrorHttpOperationForbidden | Server merespons 403, karena pengguna tidak memiliki izin yang tepat untuk melakukan tindakan. Pastikan Anda memiliki izin untuk operasi yang ditentukan. Minimal, konektor memerlukan izin 'get, list, wrapKey, unwrapKey' agar berfungsi dengan baik. |
| 3100 | ErrorHttpCreateHttpClientOutOfMemory | Tidak dapat membuat HttpClient untuk operasi AKV karena kehabisan memori. |
| 3101 | ErrorHttpOpenSession | Tidak dapat membuka sesi Http karena kesalahan jaringan. |
| 3102 | ErrorHttpConnectSession | Tidak dapat menyambungkan sesi Http karena kesalahan jaringan. |
| 3103 | ErrorHttpAttemptConnect | Tidak dapat mencoba sambungan karena kesalahan jaringan. |
| 3104 | ErrorHttpOpenRequest | Tidak dapat membuka permintaan karena kesalahan jaringan. |
| 3105 | ErrorHttpAddRequestHeader | Tidak dapat menambahkan header permintaan. |
| 3106 | ErrorHttpSendRequest | Tidak dapat mengirim permintaan karena kesalahan jaringan. |
| 3107 | ErrorHttpGetResponseCode | Tidak bisa mendapatkan kode respons karena kesalahan jaringan. |
| 3108 | ErrorHttpResponseCodeUnauthorized | Server merespons 401 untuk permintaan tersebut. Pastikan Id klien dan rahasia sudah benar, dan string kredensial adalah perangkaian Id klien AAD dan rahasia tanpa tanda hubung. |
| 3109 | ErrorHttpResponseCodeThrottled | Server telah membatasi permintaan. |
| 3110 | ErrorHttpResponseCodeClientError | Permintaan tidak valid. Ini biasanya berarti nama kunci tidak valid atau berisi karakter yang tidak valid. |
| 3111 | ErrorHttpResponseCodeServerError | Server merespons kode respons antara 500 dan 600. |
| 3112 | ErrorHttpResourceNotFound | Server merespons 404, karena nama kunci tidak ditemukan. Pastikan nama kunci ada di vault Anda. |
| 3113 | ErrorHttpOperationForbidden | Server merespons 403, karena pengguna tidak memiliki izin yang tepat untuk melakukan tindakan. Pastikan Anda memiliki izin untuk operasi yang ditentukan. Minimal,'get, wrapKey, unwrapKey' izin diperlukan. |
| 3114 | ErrorHttpQueryHeader | Tidak dapat meminta header respons. |
| 3115 | ErrorHttpQueryHeaderOutOfMemoryCopyHeader | Tidak dapat menyalin header respons karena kehabisan memori. |
| 3116 | ErrorHttpQueryHeaderOutOfMemoryReallocBuffer | Tidak dapat mengkueri header respons karena kehabisan memori saat merealokasi buffer. |
| 3117 | ErrorHttpQueryHeaderNotFound | Tidak dapat menemukan header kueri dalam respons. |
| 3118 | ErrorHttpQueryHeaderUpdateBufferLength | Tidak dapat memperbarui panjang buffer saat mengkueri header respons. |
| 3119 | ErrorHttpReadData | Tidak dapat membaca data respons karena kesalahan jaringan. |
| 3120 | ErrorHttpGetResponseOutOfMemoryCreateTempBuffer | Tidak dapat memperoleh isi respons karena kehabisan memori saat membuat buffer sementara. |
| 3121 | ErrorHttpGetResponseOutOfMemoryGetResultString | Tidak dapat memperoleh isi respons karena kehabisan memori saat mendapatkan string hasil. |
| 3122 | ErrorHttpGetResponseOutOfMemoryAppendResponse | Tidak dapat memperoleh isi respons karena kehabisan memori saat menambahkan respons. |
| 3200 | ErrorGetAADValuesOutOfMemoryConcatPath | Tidak bisa mendapatkan nilai header tantangan Azure Active Directory karena kehabisan memori saat menggabungkan jalur. |
| 3201 | ErrorGetAADDomainUrlStartPosition | Tidak dapat menemukan posisi awal untuk Url domain Azure Active Directory di header tantangan respons yang salah format. |
| 3202 | ErrorGetAADDomainUrlStopPosition | Tidak dapat menemukan posisi akhir untuk Url domain Azure Active Directory di header tantangan respons yang salah format. |
| 3203 | ErrorGetAADDomainUrlMalformatted | Header tantangan respons Azure Active Directory salah format dan tidak berisi Url domain AAD. |
| 3204 | ErrorGetAADDomainUrlOutOfMemoryAlloc | Kehabisan memori saat mengalokasikan buffer untuk Url domain Azure Active Directory. |
| 3205 | ErrorGetAADTenantIdOutOfMemoryAlloc | Kehabisan memori saat mengalokasikan buffer untuk tenantId Azure Active Directory. |
| 3206 | ErrorGetAKVResourceUrlStartPosition | Tidak dapat menemukan posisi awal untuk Url sumber daya Azure Key Vault di header tantangan respons yang salah format. |
| 3207 | ErrorGetAKVResourceUrlStopPosition | Tidak dapat menemukan posisi akhir untuk Url sumber daya Azure Key Vault di header tantangan respons yang salah format. |
| 3208 | ErrorGetAKVResourceUrlOutOfMemoryAlloc | Kehabisan memori saat mengalokasikan buffer untuk Url sumber daya Azure Key Vault. |
| 3300 | ErrorGetTokenOutOfMemoryConcatPath | Tidak dapat memperoleh token karena kehabisan memori saat menggabungkan jalur permintaan. |
| 3301 | ErrorGetTokenOutOfMemoryConcatBody | Tidak dapat memperoleh token karena kehabisan memori saat menggabungkan isi respons. |
| 3302 | ErrorGetTokenOutOfMemoryConvertResponseString | Tidak dapat memperoleh token karena kehabisan memori saat mengonversi string respons. |
| 3303 | ErrorGetTokenBadCredentials | Tidak dapat memperoleh token karena kredensial yang salah. Pastikan string kredensial atau sertifikat valid. |
| 3304 | ErrorGetTokenFailedToGetToken | Meskipun kredensial sudah benar, operasi masih gagal mendapatkan token yang valid. |
| 3305 | ErrorGetTokenRejected | Token valid tetapi ditolak oleh server. |
| 3306 | ErrorGetTokenNotFound | Tidak dapat menemukan token sebagai respons. |
| 3307 | ErrorGetTokenJsonParser | Tidak dapat mengurai respons JSON server. |
| 3308 | ErrorGetTokenExtractToken | Tidak dapat mengekstrak token dari respons JSON. |
| 3400 | ErrorGetKeyByNameOutOfMemoryConvertResponseString | Tidak dapat memperoleh kunci berdasarkan nama karena kehabisan memori yang mengonversi string respons. |
| 3401 | ErrorGetKeyByNameOutOfMemoryConcatPath | Tidak dapat memperoleh kunci berdasarkan nama karena kehabisan memori saat menggabungkan jalur. |
| 3402 | ErrorGetKeyByNameOutOfMemoryConcatHeader | Tidak dapat memperoleh kunci berdasarkan nama karena kehabisan memori saat menggabungkan header. |
| 3403 | ErrorGetKeyByNameNoResponse | Tidak dapat memperoleh kunci berdasarkan nama karena tidak ada respons dari server. |
| 3404 | ErrorGetKeyByNameJsonParser | Tidak dapat memperoleh kunci berdasarkan nama karena gagal mengurai respons JSON. |
| 3405 | ErrorGetKeyByNameExtractKeyNode | Tidak dapat memperoleh kunci berdasarkan nama karena gagal mengekstrak simpul kunci dari respons. |
| 3406 | ErrorGetKeyByNameExtractKeyId | Tidak dapat memperoleh kunci berdasarkan nama karena gagal mengekstrak Id kunci dari respons. |
| 3407 | ErrorGetKeyByNameExtractKeyType | Tidak dapat memperoleh kunci berdasarkan nama karena gagal mengekstrak jenis kunci dari respons. |
| 3408 | ErrorGetKeyByNameExtractKeyN | Tidak dapat memperoleh kunci berdasarkan nama karena gagal mengekstrak kunci N dari respons. |
| 3409 | ErrorGetKeyByNameBase64DecodeN | Tidak dapat memperoleh kunci berdasarkan nama karena gagal mendekode Base64 N. |
| 3410 | ErrorGetKeyByNameExtractKeyE | Tidak dapat memperoleh kunci berdasarkan nama karena gagal mengekstrak kunci E dari respons. |
| 3411 | ErrorGetKeyByNameBase64DecodeE | Tidak dapat memperoleh kunci berdasarkan nama karena gagal mendekode Base64 E. |
| 3412 | ErrorGetKeyByNameExtractKeyUri | Tidak dapat mengekstrak Uri kunci dari respons. |
| 3500 | ErrorBackupKeyOutOfMemoryConvertResponseString | Tidak dapat mencadangkan kunci karena kehabisan memori saat mengonversi string respons. |
| 3501 | ErrorBackupKeyOutOfMemoryConcatPath | Tidak dapat mencadangkan kunci karena kehabisan memori saat menggabungkan jalur. |
| 3502 | ErrorBackupKeyOutOfMemoryConcatHeader | Tidak dapat mencadangkan kunci karena kehabisan memori saat menggabungkan header permintaan. |
| 3503 | ErrorBackupKeyNoResponse | Tidak dapat mencadangkan kunci karena tidak ada respons dari server. |
| 3504 | ErrorBackupKeyJsonParser | Tidak dapat mencadangkan kunci karena gagal mengurai respons JSON. |
| 3505 | ErrorBackupKeyExtractValue | Tidak dapat mencadangkan kunci karena gagal mengekstrak nilai dari respons JSON. |
| 3506 | ErrorBackupKeyBase64DecodeValue | Tidak dapat mencadangkan kunci karena gagal mendekode Base64 bidang nilai. |
| 3600 | ErrorWrapKeyOutOfMemoryConvertResponseString | Tidak dapat membungkus kunci karena kehabisan memori saat mengonversi string respons. |
| 3601 | ErrorWrapKeyOutOfMemoryConcatPath | Tidak dapat membungkus kunci karena kehabisan memori saat menggabungkan jalur. |
| 3602 | ErrorWrapKeyOutOfMemoryConcatHeader | Tidak dapat membungkus kunci karena kehabisan memori saat menggabungkan header. |
| 3603 | ErrorWrapKeyOutOfMemoryConcatBody | Tidak dapat membungkus kunci karena kehabisan memori saat menggabungkan isi. |
| 3604 | ErrorWrapKeyOutOfMemoryConvertEncodedBody | Tidak dapat membungkus kunci karena kehabisan memori saat mengonversi isi yang dikodekan. |
| 3605 | ErrorWrapKeyBase64EncodeKey | Tidak dapat membungkus kunci karena gagal mengodekan kunci Base64. |
| 3606 | ErrorWrapKeyBase64DecodeValue | Tidak dapat membungkus kunci karena gagal mendekode Base64 nilai respons. |
| 3607 | ErrorWrapKeyJsonParser | Tidak dapat membungkus kunci karena gagal mengurai respons JSON. |
| 3608 | ErrorWrapKeyExtractValue | Tidak dapat membungkus kunci karena gagal mengekstrak nilai dari respons. |
| 3609 | ErrorWrapKeyNoResponse | Tidak dapat membungkus kunci karena tidak ada respons dari server. |
| 3700 | ErrorUnwrapKeyOutOfMemoryConvertResponseString | Tidak dapat membongkar kunci karena kehabisan memori saat mengonversi string respons. |
| 3701 | ErrorUnwrapKeyOutOfMemoryConcatPath | Tidak dapat membuka bungkus kunci karena kehabisan memori saat menggabungkan jalur. |
| 3702 | ErrorUnwrapKeyOutOfMemoryConcatHeader | Tidak dapat membuka bungkus kunci karena kehabisan memori saat menggabungkan header. |
| 3703 | ErrorUnwrapKeyOutOfMemoryConcatBody | Tidak dapat membuka bungkus kunci karena kehabisan memori saat menggabungkan isi. |
| 3704 | ErrorUnwrapKeyOutOfMemoryConvertEncodedBody | Tidak dapat membuka bungkus kunci karena kehabisan memori saat mengonversi isi yang dikodekan. |
| 3705 | ErrorUnwrapKeyBase64EncodeKey | Tidak dapat membuka bungkus kunci karena gagal mengodekan kunci Base64. |
| 3706 | ErrorUnwrapKeyBase64DecodeValue | Tidak dapat membuka bungkus kunci karena gagal mendekode Base64 nilai respons. |
| 3707 | ErrorUnwrapKeyJsonParser | Tidak dapat membuka bungkus kunci karena gagal mengekstrak nilai dari respons. |
| 3708 | ErrorUnwrapKeyExtractValue | Tidak dapat membuka bungkus kunci karena gagal mengekstrak nilai dari respons. |
| 3709 | ErrorUnwrapKeyNoResponse | Tidak dapat membuka bungkus kunci karena tidak ada respons dari server. |
| 3800 | ErrorSecretAuthParamsGetRequestBody | Kesalahan saat membuat isi permintaan menggunakan AAD clientId dan rahasia. |
| 3801 | ErrorJWTTokenCreateHeader | Kesalahan saat membuat header token JWT untuk autentikasi dengan AAD. |
| 3802 | ErrorJWTTokenCreatePayloadGUID | Kesalahan saat membuat GUID untuk payload token JWT untuk autentikasi dengan AAD. |
| 3803 | ErrorJWTTokenCreatePayload | Kesalahan saat membuat payload token JWT untuk autentikasi dengan AAD. |
| 3804 | ErrorJWTTokenCreateSignature | Kesalahan saat membuat tanda tangan token JWT untuk autentikasi dengan AAD. |
| 3805 | ErrorJWTTokenSignatureHashAlg | Kesalahan saat mendapatkan algoritma hash SHA256 untuk autentikasi dengan AAD. |
| 3806 | ErrorJWTTokenSignatureHash | Kesalahan saat membuat hash SHA256 untuk autentikasi token JWT dengan AAD. |
| 3807 | ErrorJWTTokenSignatureSignHash | Kesalahan saat menandatangani hash token JWT untuk autentikasi dengan AAD. |
| 3808 | ErrorJWTTokenCreateToken | Kesalahan saat membuat token JWT untuk autentikasi dengan AAD. |
| 3809 | ErrorPfxCertAuthParamsImportPfx | Kesalahan mengimpor sertifikat Pfx untuk autentikasi dengan AAD. |
| 3810 | ErrorPfxCertAuthParamsGetThumbprint | Kesalahan saat mendapatkan thumbprint dari sertifikat Pfx untuk autentikasi dengan AAD. |
| 3811 | ErrorPfxCertAuthParamsGetPrivateKey | Kesalahan saat mendapatkan kunci privat dari sertifikat Pfx untuk autentikasi dengan AAD. |
| 3812 | ErrorPfxCertAuthParamsSignAlg | Kesalahan saat mendapatkan algoritma penandatanganan RSA untuk autentikasi sertifikat Pfx dengan AAD. |
| 3813 | ErrorPfxCertAuthParamsImportForSign | Kesalahan saat mengimpor kunci privat Pfx untuk penandatanganan RSA untuk autentikasi dengan AAD. |
| 3814 | ErrorPfxCertAuthParamsCreateRequestBody | Kesalahan saat membuat isi permintaan dari sertifikat Pfx untuk autentikasi dengan AAD. |
| 3815 | ErrorPEMCertAuthParamsGetThumbprint | Kesalahan Base64 mendekode Thumbprint untuk autentikasi dengan AAD. |
| 3816 | ErrorPEMCertAuthParamsGetPrivateKey | Kesalahan mendapatkan kunci privat RSA dari PEM untuk autentikasi dengan AAD. |
| 3817 | ErrorPEMCertAuthParamsSignAlg | Kesalahan saat mendapatkan algoritma penandatanganan RSA untuk autentikasi kunci privat PEM dengan AAD. |
| 3818 | ErrorPEMCertAuthParamsImportForSign | Kesalahan saat mengimpor kunci privat PEM untuk penandatanganan RSA untuk autentikasi dengan AAD. |
| 3819 | ErrorPEMCertAuthParamsCreateRequestBody | Kesalahan saat membuat isi permintaan dari kunci privat PEM untuk autentikasi dengan AAD. |
| 3820 | ErrorLegacyPrivateKeyAuthParamsSignAlg | Kesalahan saat mendapatkan algoritma penandatanganan RSA untuk autentikasi kunci privat Warisan dengan AAD. |
| 3821 | ErrorLegacyPrivateKeyAuthParamsImportForSign | Kesalahan mengimpor Kunci privat warisan untuk penandatanganan RSA untuk autentikasi dengan AAD. |
| 3822 | ErrorLegacyPrivateKeyAuthParamsCreateRequestBody | Kesalahan saat membuat isi permintaan dari Kunci privat warisan untuk autentikasi dengan AAD. |
| 3900 | ErrorAKVDoesNotExist | Kesalahan nama internet tidak teratasi. Ini biasanya menunjukkan Azure Key Vault dihapus. |
| 4000 | ErrorCreateKeyVaultRetryManagerOutOfMemory | Tidak dapat membuat RetryManager untuk operasi AKV karena kehabisan memori. |
Jika Anda tidak melihat kode kesalahan Anda dalam tabel ini, berikut adalah beberapa alasan lain kesalahan mungkin terjadi:
Anda mungkin tidak memiliki akses Internet dan tidak dapat mengakses Azure Key Vault Anda. Periksa koneksi Internet Anda.
Layanan Azure Key Vault mungkin tidak berfungsi. Coba lagi di lain waktu.
Anda mungkin telah menghilangkan kunci asimetris dari Azure Key Vault atau SQL Server. Pulihkan kunci.
Jika Anda menerima kesalahan "Tidak dapat memuat pustaka", pastikan Anda memiliki versi Visual Studio C++ yang sesuai yang dapat didistribusikan ulang berdasarkan versi SQL Server yang Anda jalankan. Tabel di bawah ini menentukan versi mana yang akan diinstal dari Pusat Unduhan Microsoft.
Log peristiwa Windows juga mencatat kesalahan yang terkait dengan Konektor SQL Server, yang dapat membantu konteks tambahan tentang mengapa kesalahan benar-benar terjadi. Sumber dalam Log Peristiwa Aplikasi Windows akan menjadi "Konektor SQL Server untuk Microsoft Azure Key Vault".
Pustaka Runtime C++ untuk Konektor SQL Server 1.0.5.0
| Versi SQL Server | Tautan Penginstalan yang Dapat Didistribusikan Ulang jika menggunakan Konektor SQL Server 1.0.5.0 |
|---|---|
| 2008, 2008 R2, 2012, 2014 | Paket Visual C++ Dapat Didistribusikan untuk Visual Studio 2013 |
| 2016, 2017, 2019 | Visual C++ Dapat Didistribusikan Ulang untuk Visual Studio 2015 |
Pustaka Runtime C++ untuk Konektor SQL Server 1.0.4.0
| Versi SQL Server | Tautan Penginstalan yang Dapat Didistribusikan Ulang jika menggunakan Konektor SQL Server 1.0.4.0 |
|---|---|
| 2008, 2008 R2, 2012, 2014, 2016, 2017, 2019 | Paket Visual C++ Dapat Didistribusikan untuk Visual Studio 2013 |
Referensi Tambahan
Selengkapnya tentang Manajemen Kunci yang Dapat Diperluas:
Enkripsi SQL yang mendukung EKM:
Perintah Transact-SQL Terkait:
Dokumentasi Azure Key Vault:
Referensi Cmdlet PowerShell Azure Key Vault
Lihat juga
Manajemen Kunci yang Dapat Diperluas Menggunakan Azure Key Vault
Menggunakan Konektor SQL Server dengan Fitur Enkripsi SQL
Opsi Konfigurasi Server yang diaktifkan penyedia EKM
Langkah-langkah Penyiapan untuk Manajemen Kunci yang Dapat Diperluas Menggunakan Azure Key Vault
Untuk contoh skrip tambahan, lihat blog di Enkripsi Data Transparan SQL Server dan Manajemen Kunci yang Dapat Diperluas dengan Azure Key Vault