Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Artikel ini menjelaskan perubahan mencolok antara Microsoft OLE DB Driver 19 untuk SQL Server dan versi yang lebih lama.
Petunjuk / Saran
MSOLEDBSQL19 (Microsoft OLE DB Driver 19 untuk SQL Server) adalah driver OLE DB yang direkomendasikan saat ini. Ini mendukung TDS 8.0 dan fitur keamanan modern. Versi 19.2.0+ juga mendukung TLS 1.3. Gunakan Provider=MSOLEDBSQL19 dalam string koneksi Anda.
Ringkasan perubahan
| Area | Versi 18 dan yang lebih lama | Versi 19+ |
|---|---|---|
Pengaturan enkripsi default (Encrypt) |
no (tidak ada enkripsi atau server yang dapat memerlukan enkripsi) |
Mandatory (diperlukan enkripsi) |
Encrypt jenis properti |
VT_BOOL |
VT_BSTR |
Encrypt nilai yang valid |
no/yes |
no/yes/true/false/Optional/Mandatory/Strict |
| Validasi sertifikat | Dilewati saat klien menetapkan Encrypt=no |
Selalu dievaluasi ketika enkripsi terjadi |
| Nama pengandar | MSOLEDBSQL |
MSOLEDBSQL19 |
| CLSID |
MSOLEDBSQL_CLSID (warisan) |
MSOLEDBSQL_CLSID (diperbarui di header) |
Peringatan
Autentikasi ActiveDirectoryPassword tidak digunakan lagi. Jika Anda bermigrasi dari versi 18 ke 19 dan menggunakan Authentication=ActiveDirectoryPassword, rencanakan untuk bermigrasi ke metode autentikasi yang lebih aman. Lihat Metode autentikasi yang tidak digunakan lagi untuk alternatif.
Perubahan properti enkripsi
Mengenkripsi perubahan jenis properti
Properti SSPROP_INIT_ENCRYPT driver berubah dari VT_BOOL ke VT_BSTR.
| Rangkaian koneksi | Nilai versi 18 | Nilai versi 19 |
|---|---|---|
Penyedia: Encrypt |
no/yes |
no/yes/true/false/Optional/Mandatory/Strict |
IDataInitialize: Use Encryption for Data |
true/false |
no/yes/true/false/Optional/Mandatory/Strict |
Pemetaan nilai:
| Pengaturan | Nilai yang setara | Perilaku |
|---|---|---|
Optional |
no, false |
Tidak terenkripsi kecuali server memerlukannya |
Mandatory (standar) |
yes, true |
Koneksi terenkripsi diperlukan |
Strict |
(tidak setara) | Enkripsi TDS 8.0; memerlukan SQL Server 2022+ |
Petunjuk / Saran
Dimulai dengan versi 19.2.0, koneksi TDS 8.0 dapat menggunakan TLS 1.3 saat menyambungkan ke SQL Server 2022 atau yang lebih baru. Properti ServerCertificate juga ditambahkan dalam versi ini. Untuk informasi selengkapnya, lihat dukungan TLS 1.3.
Untuk kompatibilitas mundur, versi 19 menerima semua nilai versi 18 (yes/no) selain nilai baru ().Optional/Mandatory/Strict
Perilaku enkripsi default
| Versi | Bawaan | Result |
|---|---|---|
| 18 dan yang lebih lama | no |
Koneksi tidak terenkripsi secara default |
| 19+ | Mandatory |
Koneksi dienkripsi secara default |
Untuk memulihkan perilaku versi 18, tambahkan salah satu opsi ini ke string koneksi Anda:
- Penyedia:
Encrypt=Optional; - IDataInitialize:
Use Encryption for Data=Optional;
Perilaku validasi sertifikat
| Scenario | Versi 18 | Versi 19+ |
|---|---|---|
Set klien Encrypt=no, server tidak memaksa enkripsi |
Tidak ada validasi | Tidak ada validasi |
Set Encrypt=noklien, server memaksa enkripsi |
Trust Server Certificate
Diabaikan |
Trust Server Certificate
Dievaluasi |
Set klien Encrypt=yes |
Trust Server Certificate Dievaluasi |
Trust Server Certificate Dievaluasi |
Catatan kompatibilitas
Klien versi 19 yang menggunakan pengaturan default gagal tersambung ketika server memaksa enkripsi dan menggunakan sertifikat yang tidak tepercaya. Perbarui pengaturan Anda Trust Server Certificate atau gunakan sertifikat tepercaya.
TrustServerCertificate
tidak dihapus dalam versi 19. Opsi masih berfungsi. Versi 18 mengabaikan pengaturan ini ketika Encrypt diatur ke no, bahkan ketika enkripsi paksa server. Versi 19 sekarang mengevaluasi TrustServerCertificate dalam semua skenario terenkripsi.
Driver versi 19, sebelum 19.4.1, memiliki masalah penginstal yang dapat mengatur TrustServerCertificate opsi registri ke no pada sistem yang sebelumnya telah menginstal v18. Ketika masalah ini terjadi, driver akan menggunakan pengaturan registri yang lebih aman, yang dapat membuat opsi string koneksi tampaknya tidak berpengaruh. Masalah ini diselesaikan dalam versi 19.4.1. Instalasi baru v19 (tanpa v18 ada) selalu default dengan benar opsi registri ke yes. Untuk informasi lebih lanjut, lihat Pengaturan Registri .
Format kata kunci berbeda menurut antarmuka:
- String koneksi penyedia tidak menggunakan spasi:
TrustServerCertificate=yes; - String koneksi IDataInitialize menggunakan spasi:
Trust Server Certificate=yes;
Untuk informasi selengkapnya, lihat Enkripsi dan validasi sertifikat di OLE DB.
Pengaturan registri untuk Enkripsi Protokol Paksa
Pengaturan registri Force Protocol Encryption menggunakan nilai numerik yang memetakan ke mode enkripsi:
| Nilai registri | Mode enkripsi | Description |
|---|---|---|
0 |
Optional |
Enkripsi hanya jika server memerlukannya |
1 |
Mandatory |
Enkripsi diperlukan |
2 |
Strict |
Enkripsi TDS 8.0 |
Driver menggunakan opsi paling aman antara pengaturan registri dan properti koneksi. Untuk lokasi kunci registri, lihat Pengaturan registri.
Perubahan nama driver
Versi 19 mendukung penginstalan berdampingan dengan versi 18. Nama driver mencakup nomor versi utama untuk diferensiasi.
| Antarmuka | Versi 18 | Versi 19 |
|---|---|---|
| Kata kunci penyedia | MSOLEDBSQL |
MSOLEDBSQL19 |
| Konstanta CLSID | MSOLEDBSQL_CLSID |
MSOLEDBSQL_CLSID (diperbarui dalam msoledbsql.h) |
| Nama tampilan UI | Driver Microsoft OLE DB untuk SQL Server | Microsoft OLE DB Driver 19 untuk SQL Server |
Langkah-langkah migrasi
- Sertakan header yang diperbarui
msoledbsql.hdalam proyek Anda. - Untuk
IDBInitialize: Tidak ada perubahan yang diperlukan (CLSID diperbarui di header). - Untuk
IDataInitialize: UbahProvider=MSOLEDBSQLkeProvider=MSOLEDBSQL19. - Untuk alat UI (SSMS, properti tautan data): Pilih Microsoft OLE DB Driver 19 untuk SQL Server.
Contoh konfigurasi koneksi
Versi 18 (sebelumnya):
Provider=MSOLEDBSQL;Server=myserver;Database=mydb;Trusted_Connection=yes;
Versi 19 (setelah):
Provider=MSOLEDBSQL19;Server=myserver;Database=mydb;Trusted_Connection=yes;
Versi 19 dengan pengaturan enkripsi eksplisit:
Provider=MSOLEDBSQL19;Server=myserver;Database=mydb;Encrypt=Mandatory;TrustServerCertificate=no;
Versi 19 dengan enkripsi ketat (TDS 8.0):
Provider=MSOLEDBSQL19;Server=myserver;Database=mydb;Encrypt=Strict;ServerCertificate=C:\certs\server.cer;
Properti versi 19 baru
Versi 19 memperkenalkan properti untuk validasi sertifikat yang ditingkatkan dengan Strict mode enkripsi.
HostNameInCertificate (v19.0.0+)
Menentukan nama host untuk divalidasi terhadap sertifikat TLS/SSL server. Gunakan properti ini ketika nama server dalam string koneksi berbeda dari Nama Umum (CN) sertifikat atau Nama Alternatif Subjek (SAN).
| Antarmuka | Harta benda |
|---|---|
| Kata kunci penyedia | HostNameInCertificate |
| Kata kunci IDataInitialize | Host Name In Certificate |
| Properti OLE DB | SSPROP_INIT_HOST_NAME_CERTIFICATE |
Nota
Properti ini diabaikan ketika Trust Server Certificate diaktifkan. Ketika Encrypt=Strict, sertifikat selalu divalidasi.
ServerCertificate (v19.2.0+)
Menentukan jalur ke file sertifikat (format PEM, DER, atau CER) untuk pencocokan sertifikat yang tepat. Driver membandingkan sertifikat ini dengan sertifikat server selama jabat tangan TLS.
| Antarmuka | Harta benda |
|---|---|
| Kata kunci penyedia | ServerCertificate |
| Kata kunci IDataInitialize | Server Certificate |
| Properti OLE DB | SSPROP_INIT_SERVER_CERTIFICATE |
Penting
ServerCertificate hanya dapat digunakan ketika Encrypt=Strict. Mencoba menggunakannya dengan Mandatory atau Optional enkripsi menghasilkan kesalahan koneksi.
Metode autentikasi yang tidak digunakan lagi
ActiveDirectoryPassword
Metode ActiveDirectoryPassword autentikasi (autentikasi Kata Sandi ID Microsoft Entra) tidak digunakan lagi. Autentikasi ini didasarkan pada pemberian OAuth 2.0 Resource Owner Password Credentials (ROPC), yang tidak kompatibel dengan autentikasi multifaktor (MFA) dan menimbulkan risiko keamanan.
Peringatan
Microsoft menjauh dari alur autentikasi berisiko tinggi ini untuk melindungi pengguna dari serangan berbahaya. Rencanakan untuk bermigrasi ke metode autentikasi yang lebih aman sebelum opsi ini dihapus. Untuk informasi selengkapnya, lihat Merencanakan autentikasi multifaktor wajib untuk Azure.
Alternatif yang direkomendasikan
| Scenario | Autentikasi yang direkomendasikan | Kata kunci string koneksi |
|---|---|---|
| Konteks pengguna interaktif | Autentikasi multifaktor | Authentication=ActiveDirectoryInteractive |
| Aplikasi yang berjalan di Azure | Identitas yang Dikelola | Authentication=ActiveDirectoryMSI |
| Layanan/daemon tanpa pengguna | Principal Layanan | Authentication=ActiveDirectoryServicePrincipal |
Untuk informasi selengkapnya, lihat Menggunakan ID Microsoft Entra.
Troubleshooting
Koneksi gagal dengan kesalahan validasi sertifikat
Gejala: Koneksi gagal dengan kesalahan validasi sertifikat atau pesan sertifikat yang tidak tepercaya.
Penyebab: Versi 19 default ke Encrypt=Mandatory, yang memerlukan sertifikat server yang valid. Versi 18 default ke Encrypt=no (tidak terenkripsi).
Solusi:
- Disarankan: Instal sertifikat tepercaya di server.
-
Hanya pengembangan: Tambahkan
TrustServerCertificate=yes;ke string koneksi Anda (tidak disarankan untuk produksi). -
Fallback: Tambahkan
Encrypt=Optional;untuk memulihkan perilaku versi 18 (mengurangi keamanan).
Koneksi gagal dengan "Sertifikat Server hanya dapat digunakan dengan enkripsi ketat"
Gejala: Koneksi gagal saat Anda menggunakan ServerCertificate properti .
Penyebab: Properti ServerCertificate memerlukan Encrypt=Strict.
Solusi: Hapus ServerCertificate dari string koneksi Anda, atau ubah ke Encrypt=Strict;.
Aplikasi menerima kesalahan VT_BOOL saat mengatur properti Enkripsi
Gejala: Pengaturan SSPROP_INIT_ENCRYPT dengan nilai boolean gagal.
Penyebab: Versi 19 mengubah jenis properti dari VT_BOOL ke VT_BSTR.
Solusi: Gunakan nilai string ("Mandatory", , "Optional", "yes""Strict", ) "no"alih-alih nilai boolean.
Penyedia tidak ditemukan setelah pemutakhiran
Gejala: Aplikasi gagal dengan "Penyedia tidak ditemukan" atau kesalahan serupa.
Penyebab: Versi 19 menggunakan nama penyedia yang berbeda (MSOLEDBSQL19).
Solusi:
- Perbarui string koneksi Anda dari
Provider=MSOLEDBSQLkeProvider=MSOLEDBSQL19. - Sertakan header yang diperbarui
msoledbsql.hjika menggunakanIDBInitializedengan CLSID.