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 terpecah antara Microsoft ODBC Driver 18 untuk SQL Server dan versi 17. Gunakan saat Anda memilih versi driver, meng-upgrade aplikasi dari versi 17 ke versi 18, atau perlu membuat string koneksi berperilaku konsisten di kedua versi.
Sebagian besar aplikasi yang melakukan upgrade dari versi 17 ke versi 18 terpengaruh oleh satu perubahan: koneksi secara default dienkripsi. Jika aplikasi Anda berhenti terhubung setelah Anda melakukan upgrade, baca dulu Perilaku enkripsi default .
Pilih versi 17 atau 18
Driver 18 adalah versi utama saat ini. Driver 17 tetap didukung, tetapi aplikasi yang menggunakannya masih membutuhkan versi minor terbaru di lini Driver 17 untuk menerima perbaikan. Untuk tanggal dukungan dan aturan layanan, lihat Siklus hidup Dukungan.
| Skenario | Jalur yang direkomendasikan |
|---|---|
| Aplikasi baru | Mulailah dengan Driver 18. Konfigurasikan enkripsi dan validasi sertifikat sebelum produksi. |
| Aplikasi Driver 17 yang sudah ada | Instal Driver 18 bersamaan dengan Driver 17, ubah nama driver di string koneksi atau DSN, dan atur Encrypt secara eksplisit. Jika validasi sertifikat gagal, perbaiki sertifikat server atau penyimpanan kepercayaan klien. |
Aplikasi yang membutuhkan Encrypt=Strict, HostnameInCertificate, RetryExec, atau kata kunci Driver 18 lainnya |
Gunakan rilis Driver 18 yang mendukung pengaturan tersebut. Driver 17 tidak menerima Strict nilai untuk Encrypt dan tidak mengenali kata kunci baru. |
Aplikasi yang membutuhkan penandaan file sertifikat dengan ServerCertificate |
Gunakan Driver 18.1 atau versi yang lebih baru dengan Encrypt=Strict. Driver 17 tidak mendukung pengaturan ini. |
Mengganti versi utama biasanya berarti mengubah nama driver atau paket yang Anda pilih:
| Platform | Driver 17 | Driver 18 |
|---|---|---|
| Nama driver string koneksi | ODBC Driver 17 for SQL Server |
ODBC Driver 18 for SQL Server |
| Nama paket Linux | msodbcsql17 |
msodbcsql18 |
Ringkasan perubahan
Baris default dan validasi menggambarkan koneksi jarak jauh biasa tanpa pengaturan DSNEncrypt, SQL_COPT_SS_ENCRYPT atribut, atau override Windows Force Protocol Encryption. LocalDB bukanlah target TLS jarak jauh.
| Area | Versi 17 | Versi 18 dan versi setelahnya |
|---|---|---|
Pengaturan default Encrypt |
no, kecuali Authentication jika diatur ke nilai selain atau none aplikasi yang ditetapkan SQL_COPT_SS_ACCESS_TOKEN; maka yes |
yes (18.0.1 dan setelahnya) |
Encrypt nilai-nilai yang diterima |
yes, no |
yes, no, Mandatory, Optional, Strict |
| Mode enkripsi | Menyala atau menyala | Mati, aktif, atau ketat |
| Validasi sertifikat server | Dengan Encrypt=yes;TrustServerCertificate=no, memvalidasi sertifikat. Enkripsi yang diperlukan server saja tidak memilih validasi. |
Validasi secara default. Dalam mode TrustServerCertificate=yes non-Strict, validasi normal dilewati, termasuk ketika server memerlukan enkripsi. |
| Kata kunci string koneksi | Set dasar | Set dasar plus kata kunci baru |
Perubahan enkripsi
Perilaku enkripsi default
Driver 17 secara default kecuali Encrypt=noAuthentication kata kunci diatur ke nilai selain none atau aplikasi mengatur atribut.SQL_COPT_SS_ACCESS_TOKEN Salah satu mengubah default menjadi yes. Enkripsi tetap mematikan secara eksplisit Encrypt=no . Driver 18.0.1 dan versi setelahnya default ke Encrypt=yes. Atur Encrypt secara eksplisit saat membandingkan versi.
Enkripsi koneksi penuh melindungi teks dan hasil kueri serta login. Dengan Encrypt=no, server masih dapat memerlukan enkripsi koneksi penuh. Ketika klien dan server sama-sama mematikan enkripsi, negosiasi non-Strict menggunakan enkripsi hanya login; ini tidak melindungi data aplikasi berikutnya.
Dengan Encrypt=yes;TrustServerCertificate=no, kedua driver memilih validasi sertifikat server normal. Jika hanya server yang memerlukan enkripsi koneksi penuh dan TrustServerCertificate=no (default), Driver 18 memvalidasi sertifikat. Di TrustServerCertificate=yes luar mode Ketat, Driver 18 melewati validasi tersebut. Driver 17 tidak validasi hanya karena persyaratan server tersebut.
Enkripsi Windows Force Protocol dan jalur callback validasi sertifikat internal tidak tercakup dalam perbandingan ini.
Dengan pengaturan enkripsi default, upgrade dari versi 17 ke versi 18 dapat mengekspos sertifikat server yang tidak terpercaya. Jika versi 18 menolak sertifikat, diagnosa rantai sertifikat dan nama sebelum mengubah pengaturan autentikasi.
Aktifkan enkripsi dan validasi identitas server:
- Konfigurasikan sertifikat server yang valid dan penyimpanan kepercayaan klien sehingga klien mempercayai otoritas sertifikat penerbitnya. Hubungkan menggunakan nama di sertifikat.
- Jika Anda terhubung melalui alias, atur
HostnameInCertificateke nama yang valid di sertifikat server. Pengaturan ini tidak memperbaiki rantai sertifikat yang tidak tepercaya. - Untuk
Encrypt=Strict, Driver 18.1 dan versi berikutnya juga mendukungServerCertificatepencocokan sertifikat server dengan file sertifikat. Pengaturan ini mempin sertifikat; tidak menentukan nama host. Tinjau pembatasannya dalam kata kunci ODBC DSN dan string koneksi sebelum menggunakannya.
Caution
Untuk lingkungan pengujian yang terisolasi, Encrypt=yes;TrustServerCertificate=yes meminta enkripsi tetapi melewati validasi identitas server, sehingga koneksi terbuka terhadap serangan adversary-in-the-middle. Jangan gunakan sebagai perbaikan trust produksi. Dalam mode Ketat, TrustServerCertificate diabaikan.
Jika aplikasi yang sudah ada membutuhkan default versi 17 selama pengujian kompatibilitas terkontrol, lihat Restore perilaku enkripsi versi 17.
Encrypt=no
Encrypt=optional dan jangan memperbaiki kepercayaan sertifikat serta dapat meninggalkan data aplikasi tanpa dienkripsi.
Enkripsi nilai
Versi 17 hanya yes menerima dan no. Versi 18 dan versi berikutnya menerima nilai-nilai tersebut dan menambahkan tiga lagi:
| Nilai | Setara dengan | Behavior |
|---|---|---|
Mandatory |
yes |
Koneksi terenkripsi. |
Optional |
no |
Tidak meminta enkripsi koneksi penuh. Server masih dapat membutuhkannya; enkripsi hanya login bukanlah perlindungan sesi penuh. |
Strict |
Tidak | Koneksi menggunakan enkripsi TDS 8.0. Server harus mendukung TDS 8.0, seperti SQL Server 2022 dan versi yang lebih baru. |
Strict tidak memiliki versi 17 yang setara. Ini satu-satunya nilai yang memilih TDS 8.0, di mana enkripsi dinegosiasikan sebelum pertukaran login, bukan selama proses tersebut.
Pulihkan perilaku enkripsi versi 17
Setelah meninjau perbaikan kepercayaan, gunakan pengaturan berikut hanya untuk tes kompatibilitas terkontrol yang memungkinkan data aplikasi yang tidak terenkripsi:
Encrypt=no
Driver 18 juga menerima Encrypt=optional pengaturan ini. Tidak ada nilai yang mencegah server untuk meminta enkripsi. Pulihkan konfigurasi terenkripsi yang diinginkan setelah pengujian; jangan gunakan enkripsi yang dinonaktifkan sebagai solusi kepercayaan sertifikat.
Daftar periksa peningkatan
- String koneksi inventaris, DSN, referensi paket, dan skrip penyebaran yang memilih Driver 17.
- Instal Driver 18 dalam lingkungan pengujian yang sesuai dengan produksi.
- Ubah kata
Driverkunci di setiap string koneksi menjadiODBC Driver 18 for SQL Server, dan perbarui atau buat ulang setiap DSN untuk menggunakan Driver 18. Menginstal Driver 18 tidak mengubah koneksi yang sudah ada, karena koneksi yang bernama Driver 17 terus menggunakan Driver 17. - Atur
Encryptsecara eksplisit. GunakanEncrypt=Mandatorydengan validasi sertifikat normal. GunakanEncrypt=Stricthanya ketika server mendukung TDS 8.0, seperti SQL Server 2022 dan versi yang lebih baru. Untuk server yang tidak mendukung TDS 8.0, gunakanEncrypt=Mandatory. - Untuk validasi normal, hubungkan dan
TrustServerCertificate=noverifikasi rantai terpercaya dan nama server yang diterima. Untuk Driver 18.1 dan versi berikutnya dengan pin file ketat, pastikan kecocokan sertifikat dan tanggal validitas yang tepat;TrustServerCertificatediabaikan dalam mode Ketat. - Jalankan jalur autentikasi, query, transaksi, salinan massal, failover, dan retry aplikasi.
- Tinjau diagnostik untuk kesalahan validasi sertifikat sebelum memperlakukan kegagalan sebagai autentikasi atau kesalahan jaringan.
- Tetap terpasang Driver 17 dan pertahankan inventaris dari langkah 1 sampai validasi selesai, sehingga Anda dapat kembali ke versi 17.
Kembali ke versi 17
Driver 17 dan Driver 18 dipasang berdampingan, sehingga Anda bisa mundur tanpa menghapus Driver 18. Untuk detail unduhan dan instalasi, lihat Unduh Driver ODBC untuk SQL Server.
- Pastikan Driver 17 masih terpasang di setiap klien.
- Dengan menggunakan inventaris dari checklist upgrade, ubah
Driverkata kunci di setiap string koneksi kembali menjadiODBC Driver 17 for SQL Server. - Perbarui atau buat ulang setiap DSN untuk menggunakan Driver 17.
- Kembalikan referensi paket dan skrip penyebaran ke paket Driver 17, seperti
msodbcsql17di Linux. - Pulihkan
EncryptdanTrustServerCertificatenilai aplikasi yang digunakan dengan Driver 17. Driver 17 hanyayesmenerima dannountukEncryptserta tidak mengenali kata kunci Driver 18 sepertiHostnameInCertificateatauServerCertificate, sehingga hapus nilai dan kata kunci yang ditambahkan untuk Driver 18. Ubah kata kunci alias kembali ke nama Driver 17, dan gantiConnectTimeoutdenganSQLSetConnectAttrpanggilan yang mengaturSQL_ATTR_LOGIN_TIMEOUT. Untuk pemetaan, lihat Kata kunci string koneksi baru.
Validasi rollback sebelum menganggapnya selesai:
- Setiap koneksi melaporkan Driver 17. Panggil SQLGetInfo dengan
SQL_DRIVER_VER; versi utama adalah17. - Jalur autentikasi, query, transaksi, salinan massal, failover, dan percobaan ulang aplikasi berhasil.
- String koneksi dan DSN tidak
Encryptmengandung nilai atau kata kunci yang ditambahkan untuk Driver 18.
Kata kunci string koneksi baru
Versi 18 menambahkan kata kunci string koneksi berikut, yang tidak dikenali oleh versi 17. Beberapa di antaranya adalah nama baru untuk pengaturan yang didukung versi 17 di bawah kata kunci atau atribut berbeda, yang tercantum di kolom setara Versi 17 .
| Keyword | Versi minimum | Kegunaan | Versi 17 setara |
|---|---|---|---|
ConcatNullYieldsNull |
18.6 | Mengontrol apakah penggabungan nilai null menghasilkan null. | Tidak |
ConnectTimeout |
18.7 | Mengatur waktu habis login dalam hitungan detik. Jika aplikasi juga mengatur SQL_ATTR_LOGIN_TIMEOUT, atribut akan menjadi prioritas. |
SQL_ATTR_LOGIN_TIMEOUT atribut, set dengan SQLSetConnectAttr |
FailoverPartner |
18.7 | Menentukan mitra failover untuk pencerminan basis data. Hanya sistem operasi Windows. |
Failover_Partner Kata kunci |
GetDataExtensions |
18,0 | Mengontrol ekstensi mana yang SQLGetData diaktifkan oleh driver. |
Tidak |
HostnameInCertificate |
18,0 | Menentukan nama host yang akan divalidasi dalam sertifikat TLS server. | Tidak |
IpAddressPreference |
18.1 | Menentukan keluarga alamat IP yang dicoba pertama kali oleh driver. | Tidak |
LongAsMax |
18,0 | Memetakan tipe data panjang ke padanan mereka max . |
Tidak |
MultipleActiveResultSets |
18.7 | Mengaktifkan beberapa set hasil aktif (MARS). Menerima Yes atau No. |
MARS_Connection Kata kunci |
RetryExec |
18.1 | Mengonfigurasi aturan percobaan ulang untuk kueri yang gagal. | Tidak |
ServerCertificate |
18.1 | Menentukan file sertifikat yang akan dicocokkan dengan sertifikat server saat menggunakan Encrypt=Strict. |
Tidak |
WorkstationID |
18.7 | Menentukan nama workstation yang dikirim ke server. |
WSID Kata kunci |
MultipleActiveResultSets, WorkstationID, dan FailoverPartner adalah alias yang menyelaraskan nama kata kunci ODBC dengan Microsoft.Data.SqlClient nama properti. Versi 18 juga menerima nama-nama lama. Untuk detailnya, lihat Connection string keyword unification dan ConnectTimeout.
Untuk referensi kata kunci lengkap, lihat ODBC DSN dan kata kunci string koneksi.