Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Parametr połączenia Microsoft.Data.SqlClient informuje sterownik, którego zgodnego z SQL Server punktu końcowego i której bazy danych użyć, jak się uwierzytelnić oraz jak skonfigurować połączenie. Przekaż do SqlConnection lub SqlConnectionStringBuilder.
Zacznij od czterech decyzji:
- Jakiego serwera i bazy danych używa aplikacja?
- Pod jaką tożsamością działa aplikacja?
- Jak klient waliduje certyfikat serwera?
- Jakiego zachowania połączenia wymaga obciążenie robocze?
Nie umieszczaj poświadczeń ani tokenów dostępu w parametrach połączenia, jeśli wybrana metoda uwierzytelniania obsługuje takie rozwiązanie.
Wybierz wzorzec uwierzytelniania
Użyj najwęższego wzoru pasującego do rozmieszczenia.
| Environment | Preferowany wzór | Podstawowe parametry połączenia |
|---|---|---|
| SQL Server w systemie Windows przy użyciu konta domenowego lub lokalnego konta systemu Windows | Zintegrowane uwierzytelnianie systemu Windows | Server=<server>;Database=<database>;Integrated Security=true;Encrypt=true |
| Stacja robocza dewelopera łącząca się z bazą danych SQL w Microsoft Fabric | Domyślny łańcuch poświadczeń w Microsoft Entra ID | Server=tcp:<server>,1433;Database=<database>;Authentication=Active Directory Default;Encrypt=Strict |
| Aplikacja hostowana w Azure i łącząca się z Azure SQL | Tożsamość zarządzana Microsoft Entra ID | Server=tcp:<server>.database.windows.net,1433;Database=<database>;Authentication=Active Directory Managed Identity;Encrypt=Strict |
| Stacja robocza dewelopera łącząca się z Azure SQL | Domyślny łańcuch poświadczeń Microsoft Entra ID | Server=tcp:<server>.database.windows.net,1433;Database=<database>;Authentication=Active Directory Default;Encrypt=Strict |
| Interaktywne narzędzie pulpitowe łączące się z Azure SQL | Interaktywne uwierzytelnianie Microsoft Entra ID | Server=tcp:<server>.database.windows.net,1433;Database=<database>;Authentication=Active Directory Interactive;Encrypt=Strict |
| Środowisko wymagające uwierzytelniania SQL | Nazwa użytkownika i hasło z tajnego magazynu | Server=<server>;Database=<database>;User ID=<user_id>;Password=<password>;Encrypt=true |
Microsoft.Data.SqlClient w wersji 7.0 i nowszych wymaga pakietu Microsoft.Data.SqlClient.Extensions.Azure w wersji zgodnej z używaną wersją dla trybów uwierzytelniania Microsoft Entra ID udostępnianych przez sterownik. Nie potrzebujesz tego rozszerzenia, gdy kod aplikacji dostarcza token dostępu lub funkcję wywołania zwrotnego tokenu dostępu.
Uwierzytelnianie wymaga również użytkowników po stronie bazy danych, uprawnień oraz konfiguracji tożsamości. Pełną macierz wyboru i konfigurację można znaleźć w Microsoft Entra ID authentication oraz SQL Server authentication.
Określ serwer i bazę danych
Używaj Server i Database jako kanonicznych nazw słów kluczowych. Sterownik akceptuje także aliasy takie jak Data Source for Server i Initial Catalog for Database.
Typowe formy serwera obejmują:
Server=server-name
Server=server-name\instance-name
Server=tcp:server-name,1433
Server=(localdb)\MSSQLLocalDB
Preferuj wyraźny protokół, nazwę hosta i port dla produkcyjnych połączeń TCP. Użyj stabilnej nazwy DNS, która odpowiada certyfikatowi serwera zamiast adresu IP.
Jeśli chodzi o podsłuchiwacz grupy dostępności, grupę failover, punkt końcowy Azure SQL lub inny wieloadresowy punkt TCP, również sprawdź MultiSubnetFailover w opcjach połączenia.
Konfiguruj szyfrowanie i walidację certyfikatów
Microsoft.Data.SqlClient 4.0 i nowsze wersje domyślnie ustawiają Encrypt na true. Microsoft.Data.SqlClient 5.0 i nowsze wersje obsługują również Encrypt=Strict dla serwerów negocjujących TDS 8.0.
Użyj:
-
Encrypt=Strictgdy serwer obsługuje TDS 8.0 i posiada certyfikat, który klient może zweryfikować. -
Encrypt=truedla szyfrowanych połączeń z innymi obsługiwanymi serwerami. -
TrustServerCertificate=false, domyślnie, do walidacji certyfikatów produkcyjnych.
Nie używaj TrustServerCertificate=true jako uniwersalnego sposobu rozwiązywania problemów z połączeniem. Szyfruje kanał, ale pomija walidację tożsamości serwera. Ogranicz to do kontrolowanych środowisk deweloperskich, gdzie nie ma zaufanego certyfikatu.
Wymagania serwera, zachowanie wersji i opcje certyfikatów można znaleźć w artykule Szyfrowanie i walidacja certyfikatów.
Poznaj składnię parametrów połączenia
Parametry połączenia to lista par słowo kluczowe–wartość rozdzielonych średnikami:
Server=tcp:sql.example.com,1433;Database=Orders;Integrated Security=true;Encrypt=true
Postępuj zgodnie z następującymi regułami:
- Nazwy słów kluczowych nie są zależne od wielkich liter.
- Wartości mogą zależeć od wielkości i liter.
- Końcowy średnik jest opcjonalny.
- Cytuj wartość z pojedynczym lub podwójnym cudzysłowem, gdy zawiera średnik lub odstęp prowadzący lub kończący się odstęp.
- Uciekaj od cytatu, który zawiera wartość, podwajając ją.
- Nie używaj duplikatów słów kluczowych. Parser używa ostatniej wartości, co utrudnia przegląd efektywnej konfiguracji.
Zestaw akceptowanych słów kluczowych i aliasów należy do dostawcy. Parametr połączenia akceptowany przez Microsoft.Data.SqlClient może nie działać z System.Data.SqlClient lub innym dostawcą danych.
Buduj łańcuchy połączeń bezpiecznie
Używaj, SqlConnectionStringBuilder gdy kod musi dodać, zweryfikować lub zastąpić wartości. Nie łącz wartości nieufnych do parametry połączenia.
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;
Budowniczka:
- Odrzuca nieobsługiwane słowa kluczowe i nieprawidłowe wartości.
- Przypisuje aliasy do właściwości kanonicznych.
- Umieszcza wartości w cudzysłowie, gdy jest to wymagane.
- Zapobiega wstrzykiwaniu kolejnego słowa kluczowego za pomocą wartości.
Kreator nie chroni hasła ani tokena po wejściu do pamięci procesu. Nie decyduje też, czy serwer, tożsamość czy certyfikat są bezpieczne.
Przechowuj informacje o połączeniach poza kodem
Ładuj ciągi połączeń z systemu konfiguracyjnego używanego przez aplikację. Obecne aplikacje .NET często wykorzystują zmienne środowiskowe, sekrety użytkownika do lokalnego rozwoju, Azure App Configuration oraz konfigurację wspieraną przez Azure Key Vault.
Zachowaj następujące zasady:
- Nie zapisuj haseł, sekretów klienta, tokenów dostępu ani łańcuchów połączeń produkcyjnych.
- Preferuj metodę uwierzytelniania opartą na tożsamości, która nie wymaga hasła w parametry połączenia.
- Ogranicz dostęp do źródła konfiguracji.
- Rotuj przechowywane sekrety i uruchom ponownie lub odśwież aplikacje, które buforują te sekrety.
- Nie zapisuj parametrów połączenia w logach, wyjątkach, danych śledzenia ani telemetrii.
- Pozostaw
Persist Security Info=falsejako wartość domyślną, aby otwarte połączenie nie ujawniało poufnych wartości w parametrach połączenia.
Aby uzyskać usługi konfiguracji .NET, zobacz Konfiguracja w .NET. Dodatkowe opcje można znaleźć w sekcji Protect connection information.
Utrzymuj klucze do basenu stabilne
Mechanizm puli połączeń wykorzystuje dokładną konfigurację połączenia jako element klucza puli. Równoważne ciągi mogą tworzyć oddzielne pule, gdy ich tekst się różni, w tym gdy słowa kluczowe pojawiają się w innej kolejności.
Utwórz jedne kanoniczne parametry połączenia podczas uruchamiania aplikacji i używaj ich ponownie. Nie dodawaj do ciągu identyfikatorów żądań, nazw użytkowników, tokenów dostępu ani innych wartości specyficznych dla danego żądania. Pełne zasady kluczy można znaleźć w artykule SQL Server connection pooling.
Oddzielne ustawienia połączenia i poleceń
Parametry połączenia określają nawiązywanie połączenia i zachowanie sesji. Polecenie steruje jedną operacją SQL.
| Wymaganie | Skonfiguruj na |
|---|---|
| Czas przewidziany na nawiązanie połączenia lub uzyskanie go z puli |
Connect Timeout Opcja połączenia |
| Domyślny czas wykonania poleceń |
Command Timeout opcja połączenia, jeśli jest obsługiwana przez wersję sterownika |
| Limit czasu dla jednego polecenia | CommandTimeout |
| Anulowanie przez dzwoniącego |
CancellationToken przekazywane do asynchronicznych API |
| Polityka ponownego próbowania przy otwieraniu połączenia lub wykonywaniu polecenia | Konfigurowalna logika powtórek na SqlConnection lub SqlCommand |
Nie traktuj dłuższego limitu czasu jako mechanizmu ponawiania. Limit czasu na jedno czekanie. Ponowna próba rozpoczyna kolejną próbę i musi być ograniczona oraz bezpieczna do powtórzenia.
Przejrzyj zachowanie zależne od wersji
| Wersja sterownika | Zmiana parametrów połączenia |
|---|---|
| 4.0 | Właściwość Encrypt domyślnie przyjmuje wartość true. |
| 5.0 |
Encrypt=Strict i HostNameInCertificate są dostępne.
SqlConnectionStringBuilder.Encrypt używa metody SqlConnectionEncryptOption. |
| 5.1 |
ServerCertificate może dopasować certyfikat serwera do pliku. |
| 5.2 | AccessTokenCallback jest dostępny dla tokenów dostarczanych przez aplikacje odnawialne. |
| 7.0 | Uwierzytelnianie Microsoft Entra ID za pomocą sterownika przenosi się na Microsoft.Data.SqlClient.Extensions.Azure. |
| 7.0.2 | Główny sterownik i powiązane z nim pakiety korzystają ze zgodnych wersji. |
Użyj wspieranej stabilnej wersji sterownika i przeczytaj notatki wydania przed aktualizacją. Aktualne wersje można znaleźć w artykule cykl życia wsparcia sterowników SqlClient.