Microsoft ODBC Sürücüsü for SQL Server'daki başlıca sürüm farklılıkları

Bu makale, Microsoft ODBC Driver 18 for SQL Server ile sürüm 17 arasındaki kesinti değişikliklerini anlatmaktadır. Bir sürücü sürümü seçtiğinizde, bir uygulamayı 17 sürümünden 18 sürümüne yükselttiğinizde veya her iki sürümde de tutarlı şekilde davranan bir bağlantı dizesi yapmanız gerektiğinde kullanın.

Çoğu uygulama 17 sürümünden 18 sürümüne yükselten tek bir değişiklikten etkilenir: bağlantılar varsayılan olarak şifrelenmiştir. Uygulamanız yükseltme yaptıktan sonra bağlantı kurmayı durdurursa, önce Varsayılan şifreleme davranışını okuyun.

Sürüm 17 veya 18 versiyonunu seçin

Sürücü 18 mevcut ana versiyondur. Driver 17 desteklenmeye devam ediyor, ancak onu kullanan uygulamalar düzeltmeleri almak için hâlâ Driver 17 serisindeki en son küçük sürüme ihtiyaç duyuyor. Destek tarihleri ve servis kuralları için bkz. Destek yaşam döngüsü.

Scenario Önerilen yol
Yeni uygulama Sürücü 18 ile başlayın. Üretimden önce şifreleme ve sertifika doğrulamasını yapılandırın.
Mevcut Sürücü 17 uygulaması Driver 17 ile birlikte Driver 18'i kurun, bağlantı dizesi'de veya DSN'de sürücü adını değiştirin ve açıkça ayarlayınEncrypt. Sertifika doğrulaması başarısız olursa, sunucu sertifikasını veya istemcinin güven deposunu düzeltin.
, HostnameInCertificate, RetryExec, veya başka bir Driver 18 anahtar kelimesine ihtiyaç duyan Encrypt=Strictuygulama Bu ayarı destekleyen bir Driver 18 sürümünü kullanın. Sürücü 17, yeni Encrypt anahtar kelimelerin değerini kabul Strict etmiyor ve tanımıyor.
Sertifika dosyası sabitlenmesi gereken uygulama ServerCertificate Driver 18.1 veya daha sonraki sürümünü kullanarak Encrypt=Strict. Sürücü 17 bu ayarı desteklemiyor.

Ana sürümleri değiştirmek genellikle seçtiğiniz sürücü adını veya paketi değiştirmek anlamına gelir:

Platform Sürücü 17 Sürücü 18
Bağlantı dizisi sürücü adı ODBC Driver 17 for SQL Server ODBC Driver 18 for SQL Server
Linux paket adı msodbcsql17 msodbcsql18

Değişikliklerin özeti

Varsayılan ve doğrulama satırları, DSN Encrypt ayarı, öznitelik SQL_COPT_SS_ENCRYPT veya Windows Force Protocol Encryption geçersiz olmadan sıradan uzak bağlantıları tanımlar. LocalDB uzak bir TLS hedefi değildir.

Area Sürüm 17 Sürüm 18 ve sonraki sürümler
Varsayılan ayar Encrypt no, uygulama Authentication kümeleri SQL_COPT_SS_ACCESS_TOKENdışında bir değere none ayarlanmadıkça ;yes yes (18.0.1 ve sonrası)
Encrypt Kabul edilen değerler yes, no yes, no, Mandatory, Optional, Strict
Şifreleme modları Ara ya da açık Kapatıcı, açık ya da kesin
Sunucu sertifikası doğrulaması Encrypt=yes;TrustServerCertificate=noile , sertifikayı doğrular. Sadece sunucu gerektiren şifreleme doğrulamayı seçmez. Varsayılan olarak doğrulur. Sıkı olmayan modlarda, TrustServerCertificate=yes sunucu şifreleme gerektirdiğinde de normal doğrulama atlanır.
Bağlantı dizesi anahtar sözcükleri Temel set Temel küme ve yeni anahtar kelimeler

Şifreleme değişiklikleri

Varsayılan şifreleme davranışı

Sürücü 17, anahtar kelime başka bir değere ayarlanmadıkça veya uygulama özniteliği SQL_COPT_SS_ACCESS_TOKEN belirledikçe varsayılan olarak olarak kullanılır Encrypt=noAuthentication.none Her ikisi de varsayılan olarak değişir yes. Açık Encrypt=no bir şey yine de şifrelemeyi kapatır. Sürücü 18.0.1 ve sonrasında varsayılan olarak Encrypt=yes. Versiyonları karşılaştırırken açıkça ayarlayın Encrypt .

Tam bağlantı şifrelemesi, sorgu metnini ve sonuçları ile girişi korur. Ile Encrypt=nobirlikte, sunucu hâlâ tam bağlantı şifrelemesi gerektirebilir. Hem istemci hem de sunucu şifrelemeyi kapalı seçtiğinde, Sıkı olmayan müzakere sadece giriş şifrelemesi kullanır; bu, sonraki uygulama verilerini korumaz.

Ile Encrypt=yes;TrustServerCertificate=noher iki sürücü normal sunucu sertifikası doğrulamasını seçer. Sadece sunucu tam bağlantı şifrelemesi gerektiriyorsa ve TrustServerCertificate=no (varsayılan olarak), Sürücü 18 sertifikayı doğrular. Dış Strict modunda TrustServerCertificate=yes , Driver 18 bu doğrulamayı atlar. Sürücü 17 sadece sunucu gereksinimi nedeniyle doğrulama yapmıyor. Windows Force Protocol Encryption ve dahili sertifika doğrulama geri çağrı yolları bu karşılaştırma kapsamında kapsama alınmaz.

Varsayılan şifreleme ayarlarıyla, 17 sürümünden 18 sürümüne yükseltmek güvenilmeyen bir sunucu sertifikasını ortaya çıkarabilir. Sürüm 18 sertifikayı reddederse, kimlik doğrulama ayarlarını değiştirmeden önce sertifika zincirini ve adını teşhis edin.

Şifreleme ve sunucu kimliği doğrulamasını etkin tutun:

  • Geçerli bir sunucu sertifikası ve istemcinin güven deposunu siten yapılandırmak ki, istemci veren sertifika otoritesine güvensin. Sertifikadaki bir isim kullanarak bağlanın.
  • Bir takma ad ile bağlanıyorsanız, HostnameInCertificate sunucu sertifikasında geçerli bir isim ayarlayın. Bu ayar, güvenilmeyen bir sertifika zincirini onarmaz.
  • Sürücü Encrypt=Strict18.1 ve sonraki sürümler için de sunucu sertifikasının bir sertifika dosyası ile eşleştirmesini destekler ServerCertificate . Bu ayar sertifikayı sabitler; ana bilgisayar adı belirtmez. Kullanmadan önce ODBC DSN ve bağlantı dizesi anahtar kelimelerindeki kısıtlamalarını gözden geçirin.

Caution

İzole bir test ortamı için Encrypt=yes;TrustServerCertificate=yes şifreleme ister, ancak sunucu kimliği doğrulamasını atlar, böylece bağlantı ortadaki düşman saldırılarına açık bırakılır. Bunu bir prodüksiyon tamiri olarak kullanmayın. Sıkı modda, TrustServerCertificate göz ardı edilir.

Mevcut bir uygulama, kontrollü uyumluluk testi sırasında sürüm 17 varsayılan olmasını gerektiriyorsa, bkz. Sürüm 17 şifreleme davranışını geri döndür. Encrypt=no ve Encrypt=optional sertifika güvenini tamir etmiyor, uygulama verilerini şifrelememiş bırakabilir.

Şifreleme değerleri

Sürüm 17 sadece yes ve no. Sürüm 18 ve sonraki sürümler bu değerleri kabul eder ve üç tane daha ekler:

Değer Eşdeğer Davranış
Mandatory yes Bağlantı şifrelenmiş.
Optional no Tam bağlantı şifrelemesi talep etmiyor. Sunucu hâlâ bunu talep edebilir; sadece giriş şifrelemesi tam oturum koruması değildir.
Strict Hiçbiri Bağlantı TDS 8.0 şifreleme kullanır. Sunucu, SQL Server 2022 ve sonraki sürümler gibi TDS 8.0'ı desteklemelidir.

Strict 17 versiyonu karşılığı yoktur. TDS 8.0'ı seçen tek değer bu; şifreleme giriş değişimi sırasında değil, önce müzakere edilir.

Sürüm 17 şifreleme davranışını geri getir

Güven düzeltmelerini inceledikten sonra, yalnızca şifrelenmemiş uygulama verilerine izin veren kontrollü uyumluluk testi için aşağıdaki ayarı kullanın:

Encrypt=no

Sürücü 18 de bu ayar için kabul ediyor Encrypt=optional . Her iki değer de sunucunun şifreleme gerektirmesini engellemez. Testten sonra planlanan şifrelenmiş yapılandırmayı geri getirin; devre dışı bırakılmış şifrelemeyi sertifika-güven çözümü olarak kullanmayın.

Yükseltme kontrol listesi

  1. Envanter bağlantı dizeleri, DSN'ler, paket referansları ve Driver 17'yi seçen dağıtım betikleri.
  2. Sürücü 18'i üretim ile uyumlu bir test ortamına kurun.
  3. Her bağlantı dizesi'deki anahtar kelimeyi Driver , ODBC Driver 18 for SQL Serverolarak değiştirin ve her DSN'i Driver 18'i kullanacak şekilde güncelleyin veya yeniden oluşturun. Sürücü 18'i kurmak mevcut bağlantıları değiştirmez, çünkü Driver 17 adını taşıyan bağlantılar sürekli Driver 17'yi kullanır.
  4. Açık şekilde ayarlayın Encrypt . Normal sertifika doğrulama ile kullanın Encrypt=Mandatory . Yalnızca sunucu TDS 8.0'ı desteklediğinde, örneğin SQL Server 2022 ve daha sonraki sürümlerde kullanılırEncrypt=Strict. TDS 8.0'ı Encrypt=Mandatorydesteklemeyen sunucular için .
  5. Normal doğrulama için, güvenilir zincire ve kabul edilen sunucu adına bağlanın TrustServerCertificate=no ve doğrulayın. Driver 18.1 ve daha sonraki sürümlerde Strict dosya sabitlemesi için, sertifika eşleşmesini ve geçerlilik tarihlerini doğrulayın; TrustServerCertificate Strict modda görmezden gelinir.
  6. Uygulamanın kimlik doğrulama, sorgu, işlem, toplu kopyalama, yedekleme ve tekrar deneme yollarını çalıştırın.
  7. Başarısızlıkları kimlik doğrulama veya ağ hatası olarak ele almadan önce sertifika doğrulama hataları için tanılamayı gözden geçirin.
  8. Driver 17'yi açık tutun ve envanteri adım 1'den doğrulama tamamlanana kadar tutun, böylece sürüm 17'ye geri dönebilirsiniz.

Sürüm 17'ye geri dön

Sürücü 17 ve Sürücü 18 yan yana kuruluyor, böylece Sürücü 18'i kaldırmadan geri dönebilirsiniz. İndirme ve kurulum detayları için bkz. Download ODBC Driver for SQL Server.

  1. Her istemcide Driver 17'nin hâlâ yüklü olduğunu doğrulayın.
  2. Yükseltme kontrol listesindeki envanteri kullanarak, her bağlantı dizesi'deki anahtar kelimeyi Driver tekrar 'ye ODBC Driver 17 for SQL Serverdeğiştirin.
  3. Her DSN'i Driver 17'yi kullanmak üzere güncelleyin veya yeniden oluşturun.
  4. Paket referanslarını ve dağıtım betiklerini Linux'taki gibi Driver 17 paketine msodbcsql17 geri döndürün.
  5. Driver 17 ile kullanılan uygulamanın ve TrustServerCertificate değerlerini Encrypt geri getirin. Sürücü 17 sadece yes ve no for Encrypt gibi anahtar kelimeleri kabul eder ve Sürücü 18 ServerCertificateHostnameInCertificate gibi anahtar kelimeleri tanımaz, bu yüzden Sürücü 18 için eklenen değerleri ve anahtar kelimeleri kaldırın. Takma adları anahtar kelimelerini Driver 17 adlarına geri değiştirin ve yerine ConnectTimeout 'yi ayarlayan SQL_ATTR_LOGIN_TIMEOUTbir SQLSetConnectAttr çağrı ile değiştirin. Eşleme için bkz. Yeni bağlantı dizesi anahtar kelimeleri.

Geri almayı tamamlanmış saymadan önce doğrulayın:

  • Her bağlantı Sürücü 17'yi bildiriyor. SQLGetInfo ile SQL_DRIVER_VERçağırın; ana sürüm 17.
  • Uygulamanın kimlik doğrulama, sorgulama, işlem, toplu kopyalama, failover ve tekrar deneme yolları başarılı olur.
  • Bağlantı dizileri ve DSN'ler, Sürücü 18 için eklenen hiçbir Encrypt değer veya anahtar kelime içermez.

Yeni bağlantı dizesi anahtar kelimeleri

Sürüm 18, aşağıdaki bağlantı dizesi anahtar kelimelerini ekliyor, ancak 17. sürüm bunları tanımıyor. Bazıları, 17. sürümün desteklediği ayarlar için yeni isimlerdir ve farklı bir anahtar kelime veya öznitelik altında, Sürüm 17'nin eşdeğer sütununda listelenmiştir.

Anahtar kelime En düşük sürüm Purpose Sürüm 17 karşılığı
ConcatNullYieldsNull 18.6 Bir null değeri birleştirmenin null verip vermediğini kontrol eder. Hiçbiri
ConnectTimeout 18.7 Giriş süresini saniyeler içinde ayarlıyor. Uygulama da ayarlıyorsa SQL_ATTR_LOGIN_TIMEOUT, öznitelik öncelik alır. SQL_ATTR_LOGIN_TIMEOUT öznitelik, küme SQLSetConnectAttr
FailoverPartner 18.7 Veritabanı yansıtma için yas devre ortağını belirtir. Yalnızca Windows. Failover_Partner anahtar sözcük
GetDataExtensions 18,0 Sürücünün hangi SQLGetData uzantıları etkinleştirdiğini kontrol eder. Hiçbiri
HostnameInCertificate 18,0 Sunucunun TLS sertifikasında doğrulanacak ana bilgisayar adını belirtir. Hiçbiri
IpAddressPreference 18.1 Sürücünün ilk denesi IP adres ailesini belirtir. Hiçbiri
LongAsMax 18,0 Uzun veri türlerini eşdeğerleriyle max eşler. Hiçbiri
MultipleActiveResultSets 18.7 Birden fazla aktif sonuç seti (MARS) etkinleştirir. Yes veya No kabul eder. MARS_Connection anahtar sözcük
RetryExec 18.1 Başarısız sorgular için yeniden deneme kurallarını yapılandırıyor. Hiçbiri
ServerCertificate 18.1 Kullanılırken Encrypt=Strictsertifika dosyasının sunucu sertifikasıyla eşleşmesini belirtir. Hiçbiri
WorkstationID 18.7 Sunucuya gönderilen iş istasyonu adını belirtir. WSID anahtar sözcük

MultipleActiveResultSets, WorkstationID, ve FailoverPartner ODBC anahtar kelime isimlerini Microsoft.Data.SqlClient özellik adlarıyla hizalanan takma adlardır. 18. sürüm ayrıca eski isimleri de kabul eder. Detaylar için bkz. Bağlantı dize anahtar kelime birleştirmesi ve ConnectTimeout anahtar kelimesi.

Tam anahtar kelime referansı için ODBC DSN ve bağlantı dizesi anahtar kelimelerine bakınız.