Microsoft.Data.SqlClient için bağlantı dizeleri

Bir Microsoft. Data.SqlClient bağlantı dizesi, sürücüye hangi SQL Server uyumlu uç nokta ve veritabanının kullanılacağını, nasıl kimlik doğrulaması yapılacağını ve bağlantının nasıl yapılandırılacağını söyler. Onu SqlConnectionStringBuilder'ya veya SqlConnection'e ver.

Dört kararla başlayın:

  1. Uygulama hangi sunucuyu ve veritabanını kullanıyor?
  2. Uygulama hangi kimlik olarak çalışıyor?
  3. İstemci sunucu sertifikasını nasıl doğrular?
  4. İş yükünün hangi bağlantı davranışına ihtiyacı var?

Seçilen kimlik doğrulama yöntemi bu tasarımı desteklediğinde kimlik bilgileri ve erişim tokenlarını bağlantı dizesi'in dışında tutun.

Bir kimlik modeli seçin

Dağıtıma uygun en dar kalıbı kullanın.

Environment Tercih edilen desen Temel bağlantı dizesi
SQL Server on Windows, bir alan adı veya yerel Windows kimliği altında Windows tümleşik kimlik doğrulaması Server=<server>;Database=<database>;Integrated Security=true;Encrypt=true
Microsoft Fabric'te SQL veritabanına bağlanan geliştirici iş istasyonu Microsoft Entra ID varsayılan kimlik bilgisi zinciri Server=tcp:<server>,1433;Database=<database>;Authentication=Active Directory Default;Encrypt=Strict
Azure'da barındırılan ve Azure SQL'e bağlanan uygulama Microsoft Entra ID yönetilen kimliği Server=tcp:<server>.database.windows.net,1433;Database=<database>;Authentication=Active Directory Managed Identity;Encrypt=Strict
Azure SQL’e bağlanan geliştirici iş istasyonu Microsoft Entra ID varsayılan kimlik bilgisi zinciri Server=tcp:<server>.database.windows.net,1433;Database=<database>;Authentication=Active Directory Default;Encrypt=Strict
Azure SQL’e bağlanan etkileşimli masaüstü aracı Microsoft Entra ID etkileşimli kimlik doğrulama Server=tcp:<server>.database.windows.net,1433;Database=<database>;Authentication=Active Directory Interactive;Encrypt=Strict
SQL kimlik doğrulaması gerektiren ortam Gizli bir mağazadan kullanıcı adı ve şifre Server=<server>;Database=<database>;User ID=<user_id>;Password=<password>;Encrypt=true

Microsoft. Data.SqlClient 7.0 ve daha sonraki sürümler, sürücü tarafından sağlanan Microsoft Entra ID kimlik doğrulama modları için sürüm eşleştirilmiş Microsoft.Data.SqlClient.Extensions.Azure paketi gerektirir. Uygulama kodu erişim tokenı veya erişim tokenı geri çağrısı sağladığında bu uzantıya ihtiyacınız yoktur.

Kimlik doğrulama ayrıca veritabanı tarafı kullanıcıları, izinleri ve kimlik yapılandırmasını gerektirir. Tam seçim matrisi ve kurulumu için Microsoft Entra ID doğrulama ve SQL Server doğrulama bölümlerine bakınız.

Sunucu ve veritabanını belirtin

Database ve Server öğelerini kanonik anahtar kelime adları olarak kullanın. Sürücü, Initial Catalog için Server ve Data Source için Database gibi takma adları da kabul eder.

Yaygın sunucu formları şunlardır:

Server=server-name
Server=server-name\instance-name
Server=tcp:server-name,1433
Server=(localdb)\MSSQLLocalDB

Üretim TCP bağlantıları için açık bir protokol, ana bilgisayar adı ve port tercih edin. IP adresi yerine sunucu sertifikasıyla eşleşen kararlı bir DNS adı kullanın.

Bir erişilebilirlik grubu dinleyicisi, yük devretme grubu, Azure SQL uç noktası veya diğer çok adresli TCP uç noktaları için MultiSubnetFailover bölümünde öğesini de gözden geçirin.

Şifreleme ve sertifika doğrulamasını yapılandırmak

Microsoft.Data.SqlClient 4.0 ve sonraki sürümler, varsayılan olarak Encrypt yerine true kullanır. Microsoft. Data.SqlClient 5.0 ve daha sonraki sürümler ayrıca TDS 8.0 üzerinde pazarlık yapan sunucuları desteklerEncrypt=Strict.

Şu değeri kullanın:

  • Encrypt=Strict sunucu TDS 8.0'ı desteklediğinde ve istemci bir sertifikaya sahip olduğunda doğrulayabilir.
  • Encrypt=true desteklenen diğer sunuculara şifrelenmiş bağlantılar için.
  • TrustServerCertificate=false, üretim sertifikası doğrulaması için varsayılan olarak kullanılır.

TrustServerCertificate=true genel bir bağlantı düzeltmesi olarak kullanmayın. Kanalı şifreler ama sunucu kimliği doğrulamasını atlar. Güvenilen sertifikanın bulunmadığı kontrollü geliştirme ortamlarıyla sınırlayın.

Sunucu gereksinimleri, sürüm davranışı ve sertifika seçenekleri için Şifreleme ve sertifika doğrulama bölümünü inceleyebilirsiniz.

bağlantı dizesi sözdizimini anlamak

Bir bağlantı dizesi, anahtar kelime ve değer çiftlerinin nokta virgülle ayrılmış bir listesidir:

Server=tcp:sql.example.com,1433;Database=Orders;Integrated Security=true;Encrypt=true

Şu kuralları izleyin:

  • Anahtar kelime isimleri büyük/küçük harfe duyarlı değildir.
  • Değerler beve duyarlı olabilir.
  • Son virgül isteğe bağlıdır.
  • Bir değer, nokta virgül veya önde ya da sonunda boşluk varsa tek veya çift tırnak işaretiyle alıntı yapın.
  • Bir değeri içine alan tekliften iki katına çıkararak kaçın.
  • Tekrarlanan anahtar kelimeler kullanmayın. Ayrıştırıcı son değeri kullanır, bu da etkili yapılandırmayı incelemeyi zorlaştırır.

Kabul edilen anahtar kelimeler ve takma adlar seti sağlayıcıya aittir. Microsoft.Data.SqlClient tarafından kabul edilen bir bağlantı dizesi, System.Data.SqlClient veya başka bir veri sağlayıcısıyla çalışmayabilir.

Bağlantı dizilerini güvenli şekilde inşa edin

Kodun değerleri eklemesi, doğrulaması veya değiştirmesi gerektiğinde kullanın SqlConnectionStringBuilder . Güvenilmeyen değerleri bir bağlantı dizesi'e birleştirmeyin.

string baseConnectionString =
    configuration.GetConnectionString("Orders")
    ?? throw new InvalidOperationException(
        "Connection string 'Orders' wasn't configured.");

var builder = new SqlConnectionStringBuilder(baseConnectionString)
{
    ApplicationName = "Orders.Api",
    ConnectTimeout = 30,
};

string connectionString = builder.ConnectionString;

İnşaatçı:

  • Desteklenmeyen anahtar kelimeleri ve geçersiz değerleri reddeder.
  • Takma adları kanonik özelliklere eşler.
  • Gerektiğinde fiyat tekliflerini verir.
  • Bir değerin başka bir anahtar kelime enjekte etmesini engeller.

Oluşturucu, işlem belleğine girdikten sonra bir şifre veya tokenı korumaz. Ayrıca bir sunucunun, kimliğin veya sertifika ayarının güvenli olup olmadığına da karar vermez.

Bağlantı bilgilerini kod dışında sakla

Uygulama tarafından kullanılan yapılandırma sisteminden bağlantı dizilerini yükleyin. Mevcut .NET uygulamaları genellikle ortam değişkenleri, yerel geliştirme için kullanıcı sırları, Azure Uygulama Yapılandırması ve Azure Key Vault destekli yapılandırma kullanır.

Bu kurallara uyun:

  • Parolaları, istemci sırlarını, erişim belirteçlerini veya üretim bağlantı dizelerini commit etmeyin.
  • Bağlantı dizesinde parola gerektirmeyen kimlik tabanlı bir kimlik doğrulama yöntemini tercih edin.
  • Yapılandırma kaynağına erişimi kısıtlayın.
  • Depolanmış sırları döndürün ve önbellekleyen uygulamaları yeniden başlatın veya yenileyin.
  • Loglara, istisnalara, izlere veya telemetriye bağlantı dizileri yazmayın.
  • Persist Security Info=false öğesini varsayılan olarak bırakın; böylece açılmış bir bağlantı, güvenlik açısından hassas değerleri bağlantı dizesi üzerinden açığa çıkarmaz.

.NET yapılandırma sağlayıcıları için bkz. .NET'te Yapılandırma. Ek kontroller için Koruma bağlantı bilgisi sayfasına bakınız.

Havuz anahtarlarını sabit tutun

Bağlantı havuzu oluşturma, havuz anahtarının bir parçası olarak tam bir bağlantı konfigürasyonu kullanır. Eşdeğer dizeler, metinleri farklılaştığında, anahtar kelimeler farklı sırayla göründüğünde de ayrı havuzlar oluşturabilir.

Uygulama başlatıldığında bir kanonik bağlantı dizesi oluştur ve tekrar kullan. Diziye istek kimlikleri, kullanıcı adları, erişim tokenları veya diğer istek başına değerler eklemeyin. Ana kuralların tamamı için bkz. SQL Server bağlantı havuzu.

Ayrı bağlantı ve komut ayarları

Bir bağlantı dizesi, bağlantı kurulumunu ve oturum davranışını kontrol eder. Bir komut, bir SQL işlemini kontrol eder.

Requirement Açık konfigüre et
Bağlantı kurmak veya havuzdan bir bağlantı almak için tanınan süre Connect Timeout Bağlantı seçeneği
Komut yürütme için varsayılan zaman aşımı Command Timeout bağlantı seçeneği, sürücü sürümü tarafından destekleniyorsa
Bir komut için mola CommandTimeout
Arayan tarafından iptal CancellationToken asenkron API'lere aktarılır
Bağlantı açmak veya komut çalıştırmak için yeniden deneme politikası SqlConnection veya SqlCommand üzerinde yapılandırılabilir yeniden deneme mantığı

Daha uzun bir zaman aşımını yeniden deneme mantığı olarak değerlendirmeyin. Bir mola bir beklemeyi sınırlandırıyor. Tekrar deneme başka bir denemeyi başlatır ve tekrar etmek için güvenli ve sınırlı olmalıdır.

Sürüm hassasiyetli davranışı inceleyin

Sürücü sürümü Bağlantı dizisi değişikliği
4,0 Encrypt varsayılan olarak true şeklinde ayarlanır.
5.0 Encrypt=Strict ve HostNameInCertificate mevcuttur. SqlConnectionStringBuilder.Encrypt kullanır SqlConnectionEncryptOption.
5.1 ServerCertificate sunucu sertifikasını bir dosyayla eşleştirebilir.
5.2 AccessTokenCallback, yenilenebilir uygulama tarafından sağlanan belirteçler için kullanılabilir.
7.0 Sürücü tarafından sağlanan Microsoft Entra ID kimlik doğrulaması Microsoft.Data.SqlClient.Extensions.Azure konumuna taşınır.
7.0.2 Çekirdek sürücü ve eşlik eden paketler hizalanmış versiyonlar kullanır.

Desteklenen stabil bir sürücü sürümü kullanın ve güncellemeden önce sürüm notlarını okuyun. Güncel sürümler için SqlClient sürücü destek yaşam döngüsü sayfasına bakınız.