Perbedaan versi utama pada Microsoft ODBC Driver untuk SQL Server

Artikel ini menjelaskan perubahan terpecah antara Microsoft ODBC Driver 18 untuk SQL Server dan versi 17.

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 .

Ringkasan perubahan

Area Versi 17 Versi 18 dan versi setelahnya
Pengaturan default Encrypt no yes
Encrypt nilai-nilai yang diterima yes, no yes, no, Mandatory, Optional, Strict
Mode enkripsi Menyala atau menyala Mati, aktif, atau ketat
Validasi sertifikat server Tidak terjadi kecuali Anda meminta enkripsi Terjadi secara default, karena enkripsi aktif secara default
Kata kunci string koneksi Set dasar Set dasar plus kata kunci baru

Perubahan enkripsi

Perilaku enkripsi default

Di versi 17, koneksi tidak dienkripsi kecuali Anda meminta enkripsi atau server membutuhkannya. Pada versi 18 dan versi berikutnya, koneksi secara default dienkripsi.

Karena driver memvalidasi sertifikat server setiap kali mengenkripsi koneksi, aplikasi yang terhubung ke server dengan sertifikat self-signed atau tidak terpercaya berhasil terhubung dengan versi 17 dan gagal pada versi 18. Kegagalan ini adalah kesalahan validasi sertifikat, bukan kesalahan autentikasi.

Anda memiliki tiga cara untuk menyelesaikannya, yang tercantum dari yang paling aman hingga yang paling tidak aman:

  • Instal sertifikat di server yang dipercaya oleh klien. Opsi ini adalah yang direkomendasikan, dan satu-satunya yang menyimpan enkripsi sekaligus validasi.
  • Tetap aktifkan enkripsi dan beri tahu driver nama mana yang harus divalidasi, dengan mengatur HostNameInCertificate atau ServerCertificate.
  • Matikan enkripsi untuk mengembalikan default versi 17, dengan menambahkan Encrypt=no ke string koneksi.

Caution

Pengaturan TrustServerCertificate=yes menjaga koneksi tetap terenkripsi tetapi menonaktifkan validasi sertifikat, yang membuat koneksi terbuka terhadap serangan adversary-in-the-middle. Lebih memilih sertifikat terpercaya.

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 Koneksi tidak dienkripsi kecuali server membutuhkannya.
Strict Tidak Koneksi menggunakan enkripsi TDS 8.0.

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

Untuk mengembalikan perilaku default versi 17, atur Encrypt secara eksplisit:

Driver={ODBC Driver 18 for SQL Server};Server=<server>;Database=<database>;UID=<user_id>;PWD=<password>;Encrypt=no;

Menetapkan nilai secara eksplisit bermanfaat bahkan pada versi 17, karena membuat string koneksi berperilaku sama pada kedua versi.

Kata kunci string koneksi baru

Versi 18 menambahkan kata kunci string koneksi berikut, yang tidak dikenali oleh versi 17:

Keyword Kegunaan
ConcatNullYieldsNull Mengontrol apakah penggabungan nilai null menghasilkan null.
GetDataExtensions Mengontrol ekstensi mana yang SQLGetData diaktifkan oleh driver.
HostNameInCertificate Menentukan nama host yang akan divalidasi dalam sertifikat TLS server.
IpAddressPreference Menentukan keluarga alamat IP yang dicoba pertama kali oleh driver.
LongAsMax Memetakan tipe data panjang ke padanan mereka max .
RetryExec Mengonfigurasi aturan percobaan ulang untuk kueri yang gagal.
ServerCertificate Menentukan jalur ke file sertifikat untuk memvalidasi server.

Kata kunci individual diperkenalkan dalam rilis versi 18 yang berbeda. Untuk rilis yang memperkenalkan setiap kata kunci, dan untuk referensi kata kunci lengkap, lihat ODBC DSN dan kata kunci string koneksi.