Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
En Microsoft.Data.SqlClient-anslutningssträng är en lista av keyword=value-par separerade med semikolon. Skicka den till SqlConnection eller SqlConnectionStringBuilder:
Server=tcp:sql.example.com,1433;Database=Orders;Integrated Security=true;Encrypt=Strict
En reťazec pripojenia besvarar fyra frågor:
- Vilken server och databas använder applikationen?
- Vilken identitet körs applikationen som?
- Hur validerar klienten servercertifikatet?
- Vilket anslutningsmönster behöver arbetsbelastningen?
Den här artikeln täcker dessa val och de regler som drivrutinen använder för att läsa texten. För varje nyckelord, dess synonymer och dess standardvärde, se Anslutningsalternativ. För att skapa och ändra anslutningssträngar i kod, se Connection string builders.
Välj ett autentiseringsmönster
Använd det mönster som passar driftsättningen. Byt ut varje platshållare, såsom <server>, med ditt värde.
| Environment | Pattern | Anslutningssträng |
|---|---|---|
| SQL Server på Windows med domän eller lokal Windows-identitet | Windows-integrerad autentisering | Server=<server>;Database=<database>;Integrated Security=true;Encrypt=true |
| Applikation hostad i Azure och ansluten till Azure SQL | hanterad identitet i Microsoft Entra ID | Server=tcp:<server>.database.windows.net,1433;Database=<database>;Authentication=Active Directory Managed Identity;Encrypt=Strict |
| Developer workstation som ansluter till Azure SQL | Microsoft Entra ID standardkedja för autentiseringsuppgifter | Server=tcp:<server>.database.windows.net,1433;Database=<database>;Authentication=Active Directory Default;Encrypt=Strict |
| Utvecklararbetsstation som ansluter till SQL-databas i Microsoft Fabric | Microsoft Entra ID standardkedja för autentiseringsuppgifter | Server=tcp:<server>,1433;Database=<database>;Authentication=Active Directory Default;Encrypt=Strict |
| Interaktivt skrivbordsverktyg som ansluter till Azure SQL | Microsoft Entra ID interaktiv autentisering | Server=tcp:<server>.database.windows.net,1433;Database=<database>;Authentication=Active Directory Interactive;Encrypt=Strict |
| Miljö som kräver SQL-autentisering | Användarnamn och lösenord från en hemlig butik | Server=<server>;Database=<database>;User ID=<user>;Password=<password>;Encrypt=true |
Windows-integrerad autentisering ansluter med processens identitet. För en skrivbords- eller konsolapplikation är det vanligtvis den inloggade användaren. För en webbapplikation eller en Windows-tjänst är det applikationspoolen eller tjänstekontot. Personifiering kan förändra identiteten. Ge ett inloggningskonto och databasbehörigheter till den identitet som din applikation faktiskt använder.
Dessa tre former av Windows-integrerad autentisering är likvärdiga:
Server=sql.example.com;Database=Orders;Integrated Security=true;Encrypt=true
Server=sql.example.com;Database=Orders;Integrated Security=SSPI;Encrypt=true
Server=sql.example.com;Database=Orders;Trusted_Connection=yes;Encrypt=true
Om en sträng sätter Integrated Security=true och också sätter User ID och Password, använder drivrutinen Windows authentication och ignorerar användarnamn och lösenord.
Microsoft. Data.SqlClient 7.0 och senare versioner behöver det versionsanpassade Microsoft.Data.SqlClient.Extensions.Azure paketet för de drivrutinstillhandahållna autentiseringsmetoderna Microsoft Entra ID. Du behöver inte det paketet när applikationskoden tillhandahåller en åtkomsttoken eller en åtkomsttoken-callback.
För de accepterade Authentication värdena, se Autentiseringsalternativ. Autentisering kräver också databasanvändare, behörigheter och identitetskonfiguration på servern. För installationsstegen, se Microsoft Entra ID-autentisering och SQL Server-autentisering.
Ange servern och databasen
Server och Database är de mest läsbara nyckelordsnamnen. Byggaren skriver dem som deras kanoniska motsvarigheter, Data Source och Initial Catalog. Alla fyra namn fungerar i en reťazec pripojenia.
Sätt Server till en av följande former:
| Form | Example | Använd |
|---|---|---|
| Värdnamn | Server=sql.example.com |
Standardinstansen på port 1433. |
| Värdnamn och port | Server=tcp:sql.example.com,1433 |
En specifik TCP-port. Separera porten med ett kommatecken, inte ett kolon. |
| Namngiven instans | Server=sql.example.com\SALES |
En namngiven instans. Drivrutinen frågar SQL Server Browser-tjänsten på UDP-port 1434 efter porten. |
| Lokal server |
Server=(local) eller Server=. |
Standardinstansen på den lokala datorn. |
| LocalDB | Server=(localdb)\MSSQLLocalDB |
SQL Server Express LocalDB på Windows. Anslutningen är inte krypterad, även med Encrypt=Mandatory, och Encrypt=Strict misslyckas. |
| Namngivet rör | Server=np:\\sql.example.com\pipe\sql\query |
En anslutning via namngiven pipe på Windows. |
Använd tcp:, ett fullt kvalificerat värdnamn och en explicit port under produktion. Använd ett DNS-namn som matchar servercertifikatet, inte en IP-adress, eftersom certifikatvalidering jämför servernamnet i reťazec pripojenia med namnen i certifikatet.
När du ansluter till Azure SQL Database med SQL-autentisering och ett användarnamn i formen user@servername, måste delen servername matcha servern i Server.
För en tillgänglighetsgruppslyssnare eller en failover-klusterinstans, granska Multi Subnet Failover även i Anslutningsalternativ.
Konfigurera kryptering och certifikatvalidering
Nyckelordet Encrypt accepterar följande värden, oavsett versaler/gemener:
| Value | Byggvärde | Meaning |
|---|---|---|
Strict |
Strict |
Använder TDS 8.0. Krypterar anslutningen före inloggning och validerar alltid servercertifikatet. |
Mandatory, true, yes |
True |
Krypterar anslutningen. Det här värdet är standardvärdet. |
Optional, false, no |
False |
Krypterar hela anslutningen endast när servern kräver kryptering. När servern stödjer kryptering men inte kräver det, krypterar den endast inloggningspaketet. |
Använd Strict när servern stödjer TDS 8.0 och har ett certifikat som klienten kan validera. Azure SQL Database och SQL Database i Microsoft Fabric stöder detta. En LocalDB-anslutning är inte krypterad, även med Mandatory, och Strict misslyckas.
Värdena för Encrypt och Trust Server Certificate kombineras enligt följande:
| Kryptera | Förtroendeservercertifikat | Result |
|---|---|---|
Optional |
false |
När servern kräver kryptering krypteras hela anslutningen och servercertifikatet måste valideras. Annars misslyckas anslutningen. När servern stödjer kryptering men inte kräver det, är det bara inloggningspaketet som krypteras, och drivrutinen validerar inte servercertifikatet om anslutningen inte använder AccessToken eller AccessTokenCallback. När servern inte stödjer kryptering är ingenting krypterat. |
Optional |
true |
När servern kräver kryptering krypteras hela anslutningen. När servern stödjer kryptering men inte kräver det, är det bara inloggningspaketet som krypteras. Drivrutinen validerar inte servercertifikatet. |
Mandatory |
false |
Kryptering sker endast när servercertifikatet valideras. Annars misslyckas anslutningen. |
Mandatory |
true |
Kryptering sker alltid, men drivrutinen validerar inte servercertifikatet. |
Strict |
Ignored | Kryptering sker alltid, och servercertifikatet måste kunna valideras. Annars misslyckas anslutningen. |
Ställ inte in Trust Server Certificate=true för att åtgärda ett anslutningsfel i produktion. Den krypterar kanalen men bekräftar inte serverns identitet. Begränsa det till utvecklingsmiljöer där ett betrott certifikat inte finns tillgängligt.
När servernamnet i Data Source inte stämmer överens med certifikatet, ställ Host Name In Certificate in till namnet i certifikatet. SqlClient kontrollerar det bara när servernamnet inte stämmer, och det använder inte certifikatspinning. För att endast acceptera ett specifikt certifikat, ställ Server Certificate in på sökvägen för en PEM-, DER- eller CER-fil:
Server=tcp:sql.example.com,1433;Encrypt=Strict;Host Name In Certificate=sqlhost.example.com
Server=tcp:sql.example.com,1433;Encrypt=Strict;Server Certificate=C:\certificates\server.cer
För fullständiga valideringsregler, se Kryptering och certifikatvalidering.
Använd anslutningspoolning
Pooling är påslagen som standard. När du öppnar en SqlConnection, tar drivrutinen en fysisk anslutning från en pool som motsvarar anslutningen. När du stänger eller kasserar anslutningen återvänder den fysiska anslutningen till poolen istället för att stängas. En återanvänd anslutning hoppar över nätverksanslutningen, TLS-handslaget och inloggningen.
Följ dessa regler:
Öppna en anslutning precis innan du behöver den, och frigör den så snart du är klar, med
usingellerawait using. En anslutning som inte frigörs förblir utlånad, och poolen kan ta slut.Skapa anslutningssträngen en gång vid uppstart och återanvänd den. Poolnyckeln innehåller exakt den texten i reťazec pripojenia, så en annan nyckelordsordning, en synonym eller ett per-request-värde som ett request-ID eller användarnamn skapar en separat pool. Byggaren skriver en kanonisk form. För mer information, se Behåll en kanonisk anslutningssträng.
Räkna med en separat pool för varje Windows-identitet under integrerad autentisering, varje SqlCredential instans och varje AccessToken värde. Använd en drivrutinsbaserad
Authenticationmetod eller en återanvänd AccessTokenCallback istället för att sättaAccessTokenpå varje anslutning.Leta efter anslutningar som inte har stängts innan du höjer
Max Pool Size, vilket som standard är 100. När varje anslutning i en pool är i bruk,Openväntar den i upp tillConnect Timeoutoch kastar sedan InvalidOperationException:Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use and max pool size was reached.Planera serverkapacitet för varje pool. Varje process, eller varje applikationsdomän på .NET Framework, har sina egna pooler. Anslutningarna till servern kan uppgå till
Max Pool Sizemultiplicerat med poolerna i varje process och med antalet applikationsinstanser.Ställ inte in
Pooling=falseför att komma runt ett poolingproblem. Varje gång den öppnas utförs sedan en fullständig inloggning.
För att stänga poolade anslutningar som förblir inaktiva för länge, se Begränsa anslutningens vilotid. För poolnycklar, storlek, rensning och transaktioner, se anslutningspoolning i SQL Server.
Separata anslutnings- och kommandoinställningar
En reťazec pripojenia styr anslutningsetablering och sessionsbeteende. Ett kommando styr en SQL-operation.
| Krav | Konfigurera på |
|---|---|
| Tid som tillåts för att etablera en anslutning eller få en från poolen |
Connect Timeout nyckelord |
| Standardtimeout för kommandon på anslutningen |
Command Timeout nyckelord |
| Tidsgräns för ett kommando | CommandTimeout |
| Avbokning från uppringaren |
CancellationToken skickades till asynkrona metoder |
| Återförsökspolicy för att öppna en anslutning eller köra ett kommando |
Konfigurerbar återförsökslogik på SqlConnection eller SqlCommand |
En längre timeout är inte samma sak som återförsökslogik. En timeout begränsar en väntetid. Ett omförsök startar ett nytt försök, och det måste vara begränsat och säkert att upprepa.
Rapportera programmets identitet
Application Name sätter namnet som servern rapporterar genom APP_NAME(). Använd ett stabilt namn för varje distribuerad workload. Ramverk och verktyg som öppnar anslutningar för en applikation kan också rapportera sig själva via egenskapenRegisteredApplication, som inte har något reťazec pripojenia-nyckelord. För mer information, se Rapportera applikationens identitet.
Bygg anslutningssträngar säkert
Använd SqlConnectionStringBuilder när koden lägger till eller ändrar ett värde. Koppla inte ihop obetrodd text i en reťazec pripojenia, eftersom ett semikolon i den texten kan lägga till eller ersätta ett nyckelord. Byggaren validerar värden, kopplar synonymer till kanoniska nyckelord och citerar varje värde så att värdet inte kan lägga till nyckelord. Se Connection string builders för exempel.
Lagra anslutningsinformation utanför kod
Ladda anslutningssträngar från applikationens konfigurationssystem. .NET-applikationer använder ofta miljövariabler, användarhemligheter för lokal utveckling, Azure App Configuration och Azure Key Vault.
Följ dessa regler:
- Kommitta inte lösenord, klienthemligheter, åtkomsttokens eller produktionsanslutningssträngar.
- Föredra en autentiseringsmetod som inte kräver lösenord i reťazec pripojenia.
- Begränsa åtkomsten till konfigurationskällan.
- Rotera lagrade autentiseringsuppgifter och starta om eller uppdatera applikationer som cachelagrar dem.
- Skriv inte anslutningssträngar till loggar, undantag, spår eller telemetri.
- Låt
Persist Security Info=falsevara som standardvärde, så att en öppen anslutning inte exponerar lösenordet via egenskapenConnectionString.
För .NET-konfigurationsleverantörer, se Konfiguration i .NET. För fler kontroller, se Skydda anslutningsinformation.
Parsningsregler
Föraren tillämpar dessa regler:
- Nyckelord är inte kasuskänsliga.
DATABASE,Database, ochdatabaseär samma nyckelord. - Många nyckelord har synonymer.
ServerochData Sourceanger samma värde. Artikeln Anslutningsalternativ listar synonymerna för varje nyckelord. - När ett nyckelord förekommer mer än en gång vinner det sista värdet. Synonymer räknas som samma nyckelord.
- Drivrutinen ignorerar mellanrum runt nyckelord och runt ociterade värden.
- Ett efterföljande semikolon är valfritt.
- Ett nyckelord som föraren inte känner igen kastar ArgumentException med meddelandet
Keyword not supported.
Värden kan vara kasuskänsliga, beroende på nyckelordet. Ett lösenord är skiftlägeskänsligt.
Encrypt=STRICT och Encrypt=strict är likadana.
Detta program visar hur byggverktyget normaliserar nyckelord, löser en dubblett och citerar specialtecken. Fliken .NET Framework använder C# 7.3. För att skapa ett projekt som kör proverna, se Skapa projektet.
using Microsoft.Data.SqlClient;
// Synonyms and keyword case are normalized to canonical keywords.
var parsed = new SqlConnectionStringBuilder(
"server=tcp:sql.example.com,1433;DATABASE=Orders;uid=app_user;encrypt=yes;timeout=30");
Console.WriteLine(parsed.ConnectionString);
// When a keyword repeats, the last value wins.
var duplicate = new SqlConnectionStringBuilder(
"Server=sql.example.com;Database=Orders;Database=Archive");
Console.WriteLine($"InitialCatalog: {duplicate.InitialCatalog}");
// The builder quotes values that contain delimiters.
var quoted = new SqlConnectionStringBuilder
{
DataSource = "sql.example.com",
UserID = "app_user",
Password = "a;b'c\"d",
};
Console.WriteLine(quoted.ConnectionString);
Console.WriteLine($"Round trip: {new SqlConnectionStringBuilder(quoted.ConnectionString).Password == quoted.Password}");
Resultatet är:
Data Source=tcp:sql.example.com,1433;Initial Catalog=Orders;User ID=app_user;Connect Timeout=30;Encrypt=True
InitialCatalog: Archive
Data Source=sql.example.com;User ID=app_user;Password="a;b'c""d"
Round trip: True
Den första raden visar varje synonym ersatt av sitt kanoniska nyckelord: User ID av timeout, Connect Timeout av uid, Initial Catalog av DATABASE och Data Source av server.
Sätt citattecken runt värden
Omslut ett värde med dubbla citationstecken (") eller enkla citattecken (') när det innehåller ett semikolon, börjar eller slutar med ett mellanslag, eller börjar eller slutar med ett citationstecken. Inuti ett citerat värde, skriv citattecknet två gånger.
| Value | Formulär för anslutningssträng |
|---|---|
a;b |
Password="a;b" |
abc' |
Password="abc'" |
say "hi" |
Password='say "hi"' |
a;b'c"d |
Password="a;b'c""d" |
Citeringsregler är lätta att missförstå. Sätt värden genom SqlConnectionStringBuilderegenskaper och låt byggaren sätta citationstecken runt dem. För mer information, se Bygg anslutningssträngar säkert.
Specificera booleska värden
Nyckelord som tar ett booleskt värde accepterar true, false, yes och no, oavsett skiftläge.
Integrated Security accepterar också sspi, vilket betyder true. Byggaren skriver True eller False.
Använd nyckelord från andra förare
Microsoft. Data.SqlClient accepterar inte ODBC- eller OLE DB-nyckelord som Driver och Provider. Ta bort dessa nyckelord när du flyttar en reťazec pripojenia från en annan drivrutin.
System.Data.SqlClientAnslutningssträngar fungerar i Microsoft.Data.SqlClient, med dessa skillnader:
-
Encryptär standardvärdet iMandatoryMicrosoft.Data.SqlClient. En server utan ett betrott certifikat misslyckas med certifikatvalidering. Installera ett betrott certifikat på servern. -
Network Library,Connection ResetochTransparent Network IP Resolutionstöds inte på .NET. Ta bort dem. -
Context Connection=truestöds inte. -
Asynchronous Processingär inte ett stödd nyckelord och kastarArgumentException. Ta bort den. Asynkrona metoder fungerar utan detta. -
Type System Version=SQL Server 2000stöds inte. När anslutningen skapas uppstårArgumentException. AnvändLatest,SQL Server 2008,SQL Server 2005ellerSQL Server 2012.