Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
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:
- Welke server en database gebruikt de applicatie?
- Met welke identiteit draait de applicatie?
- Hoe valideert de client het servercertificaat?
- 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=Strictwanneer de server TDS 8.0 ondersteunt en een certificaat heeft dat de client kan valideren. -
Encrypt=truevoor 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.