Verbindingsstrings voor Microsoft. Data.SqlClient

Een Microsoft. Data.SqlClient-verbindingsreeks vertelt de driver welk SQL Server-compatibel eindpunt en welke database te gebruiken, hoe hij moet authenticeren en hoe de verbinding moet worden geconfigureerd. Geef het door aan SqlConnection of SqlConnectionStringBuilder.

Begin met vier beslissingen:

  1. Welke server en database gebruikt de applicatie?
  2. Met welke identiteit draait de applicatie?
  3. Hoe valideert de client het servercertificaat?
  4. Welk verbindingsgedrag heeft de workload nodig?

Houd inloggegevens en toegangstokens buiten de verbindingsreeks wanneer de gekozen authenticatiemethode dat ontwerp ondersteunt.

Kies een authenticatiepatroon

Gebruik het smalste patroon dat bij de inzet past.

Environment Voorkeurspatroon Kernverbindingsreeks
SQL Server op Windows onder een domein of lokale Windows-identiteit Geïntegreerde Windows-verificatie Server=<server>;Database=<database>;Integrated Security=true;Encrypt=true
Het werkstation van de ontwikkelaar maakt verbinding met de SQL-database in Microsoft Fabric Microsoft Entra ID standaard credentialketen Server=tcp:<server>,1433;Database=<database>;Authentication=Active Directory Default;Encrypt=Strict
Applicatie gehost in Azure en verbinding met Azure SQL Microsoft Entra ID beheerde identiteit Server=tcp:<server>.database.windows.net,1433;Database=<database>;Authentication=Active Directory Managed Identity;Encrypt=Strict
Developer workstation verbindt met Azure SQL Microsoft Entra ID-standaardketen van aanmeldingsgegevens Server=tcp:<server>.database.windows.net,1433;Database=<database>;Authentication=Active Directory Default;Encrypt=Strict
Interactieve desktoptool die verbinding maakt met Azure SQL Microsoft Entra ID interactieve authenticatie Server=tcp:<server>.database.windows.net,1433;Database=<database>;Authentication=Active Directory Interactive;Encrypt=Strict
Omgeving die SQL-authenticatie vereist Gebruikersnaam en wachtwoord van een geheime opslag Server=<server>;Database=<database>;User ID=<user_id>;Password=<password>;Encrypt=true

Microsoft.Data.SqlClient 7.0 en latere versies vereisen voor door het stuurprogramma ondersteunde Microsoft Entra ID-authenticatiemethoden het Microsoft.Data.SqlClient.Extensions.Azure-pakket met de bijbehorende versie. Je hebt die extensie niet nodig wanneer applicatiecode een toegangstoken of toegangstoken callback levert.

Authenticatie vereist ook database-zijde gebruikers, rechten en identiteitsconfiguratie. Voor de volledige keuzematrix en opzet, zie Microsoft Entra ID-authenticatie en SQL Server-authenticatie.

Geef de server en de database op

Gebruik Server en Database als de canonieke trefwoordnamen. De bestuurder accepteert ook aliassen zoals Data Source voor Server en Initial Catalog voor Database.

Veelvoorkomende servervormen zijn:

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

Geef de voorkeur aan een expliciet protocol, hostnaam en poort voor productie-TCP-verbindingen. Gebruik een stabiele DNS-naam die overeenkomt met het servercertificaat in plaats van een IP-adres.

Voor een listener voor een beschikbaarheidsgroep, failovergroep, Azure SQL-eindpunt of ander TCP-eindpunt met meerdere adressen raadpleegt u ook MultiSubnetFailover in Verbindingsopties.

Encryptie en certificaatvalidatie configureren

Microsoft.Data.SqlClient 4.0 en latere versies stellen standaard Encrypt in op true. Microsoft.Data.SqlClient 5.0 en latere versies ondersteunen ook Encrypt=Strict voor servers die TDS 8.0 onderhandelen.

Gebruik:

  • Encrypt=Strict wanneer de server TDS 8.0 ondersteunt en een certificaat heeft dat de client kan valideren.
  • Encrypt=true voor versleutelde verbindingen met andere ondersteunde servers.
  • TrustServerCertificate=false, de standaard, voor validatie van productiecertificaten.

Gebruik het niet TrustServerCertificate=true als algemene verbindingsoplossing. Het versleutelt het kanaal, maar slaat de validatie van de serveridentiteit over. Beperk het tot gecontroleerde ontwikkelomgevingen waar geen vertrouwd certificaat beschikbaar is.

Voor serververeisten, versiegedrag en certificaatopties, zie Versleuteling en certificaatvalidatie.

Begrijp de syntaxis van verbindingsreeks

Een verbindingsreeks is een met puntkomma gescheiden lijst van trefwoord- en waardeparen:

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

Volg deze regels:

  • Trefwoordnamen zijn niet hoofdlettergevoelig.
  • Waarden kunnen hoofdlettergevoelig zijn.
  • Een laatste puntkomma is optioneel.
  • Citeer een waarde met enkele of dubbele aanhalingstekens wanneer deze een puntkomma of een leidende of achterliggende witruimte bevat.
  • Ontsnap aan de quote die een waarde omsluit door deze te verdubbelen.
  • Gebruik geen dubbele zoekwoorden. De parser gebruikt de laatste waarde, waardoor de effectieve configuratie moeilijk te controleren is.

De set geaccepteerde trefwoorden en aliassen behoort toe aan de aanbieder. Een verbindingsreeks die door Microsoft.Data.SqlClient of een andere gegevensprovider wordt geaccepteerd, werkt mogelijk niet met System.Data.SqlClient.

Maak veilig verbindingsreeksen

Gebruik SqlConnectionStringBuilder wanneer code waarden moet toevoegen, valideren of vervangen. Verbind niet-vertrouwde waarden niet in een verbindingsreeks.

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;

De bouwer:

  • Weigert niet-ondersteunde zoekwoorden en ongeldige waarden.
  • Koppelt aliassen aan canonieke eigenschappen.
  • Geef waarden wanneer nodig.
  • Voorkomt dat een waarde een ander trefwoord injecteert.

De builder beschermt geen wachtwoord of token nadat deze in het procesgeheugen is gegaan. Het bepaalt ook niet of een server-, identiteits- of certificaatinstelling veilig is.

Verbindingsinformatie buiten de code opslaan

Laad verbindingsstrings van het configuratiesysteem dat door de applicatie wordt gebruikt. Huidige .NET-applicaties gebruiken vaak omgevingsvariabelen, gebruikersgeheimen voor lokale ontwikkeling, Azure App Configuration en Azure Key Vault-ondersteunde configuratie.

Houd deze regels bij:

  • Commit nooit wachtwoorden, clientgeheimen, toegangstokens of verbindingsreeksen voor productie.
  • Geef de voorkeur aan een identiteitsgebaseerde authenticatiemethode die geen wachtwoord in de verbindingsreeks vereist.
  • Beperk de toegang tot de configuratiebron.
  • Rouleer opgeslagen geheime gegevens en herstart of vernieuw applicaties die deze in de cache opslaan.
  • Schrijf geen verbindingsreeksen in logboeken, uitzonderingen, traceringen of telemetrie.
  • Laat Persist Security Info=false, de standaardinstelling, staan zodat een geopende verbinding geen beveiligingsgevoelige waarden via de verbindingsreeks blootlegt.

Voor .NET-configuratieproviders, zie Configuratie in .NET. Voor aanvullende controles, zie Protect connection information.

Houd de sleutels van pools stabiel

Connection pooling gebruikt een exacte verbindingsconfiguratie als onderdeel van zijn poolsleutel. Equivalente strings kunnen aparte pools creëren wanneer hun tekst verschilt, ook wanneer trefwoorden in een andere volgorde voorkomen.

Bouw één canonieke verbindingsreeks bij het opstarten van de applicatie en hergebruik die. Voeg geen request-ID's, gebruikersnamen, toegangstokens of andere per-request waarden toe aan de string. Voor de volledige sleutelregels, zie SQL Server connection pooling.

Aparte verbindings- en commando-instellingen

Een verbindingsreeks regelt het opzetten van verbindingen en het gedrag van sessies. Een commando beheert één SQL-bewerking.

Requirement Configureren op locatie
Tijd die is toegestaan om een verbinding te leggen of er een uit de pool te verkrijgen Connect Timeout Aansluitingsoptie
Standaardtime-out voor opdrachtuitvoering Command Timeout Verbindingsoptie, wanneer ondersteund door de driverversie
Time-out voor één commando CommandTimeout
Annulering door de oproeper CancellationToken doorgegeven aan asynchrone API's
Retry-beleid voor het openen van een verbinding of het uitvoeren van een commando Configureerbare herpogingslogica op SqlConnection of SqlCommand

Beschouw een langere time-out niet als een herkansingslogica. Een time-out beperkt één wachttijd. Een herpoging start een nieuwe poging en moet beperkt zijn en veilig om te herhalen.

Versie-gevoelig gedrag beoordelen

Versie van het stuurprogramma Verandering van verbindingsstring
4.0 Encrypt wordt standaard ingesteld op true.
5.0 Encrypt=Strict en HostNameInCertificate beschikbaar zijn. SqlConnectionStringBuilder.Encrypt gebruikt SqlConnectionEncryptOption.
5.1 ServerCertificate kan het servercertificaat vergelijken met een bestand.
5.2 AccessTokenCallback is beschikbaar voor hernieuwbare, door de toepassing verstrekte tokens.
7.0 Door de bestuurder geleverde Microsoft Entra ID-authenticatie verplaatst zich naar Microsoft.Data.SqlClient.Extensions.Azure.
7.0.2 De kerndriver en de bijbehorende pakketten gebruiken op elkaar afgestemde versies.

Gebruik een stabiele driverversie met ondersteuning en lees de release notes voor een update. Zie voor de huidige versies ondersteuningslevenscyclus van het SqlClient-stuurprogramma.