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-reťazec pripojenia talar om för drivrutinen vilken SQL Server-kompatibel endpoint och databas som ska användas, hur den ska autentiseras och hur anslutningen ska konfigureras. Passa den till SqlConnection eller SqlConnectionStringBuilder.
Börja med fyra beslut:
- Vilken server och databas använder applikationen?
- Vilken identitet körs applikationen som?
- Hur validerar klienten servercertifikatet?
- Vilket anslutningsmönster behöver arbetsbelastningen?
Håll inloggningsuppgifter och åtkomsttoken utanför reťazec pripojenia när den valda autentiseringsmetoden stödjer den designen.
Välj ett autentiseringsmönster
Använd det smalaste mönster som passar utplaceringen.
| Environment | Föredraget mönster | Anslutningssträng för kärnan |
|---|---|---|
| SQL Server på Windows under en domän eller lokal Windows-identitet | Windows-integrerad autentisering | Server=<server>;Database=<database>;Integrated Security=true;Encrypt=true |
| 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 |
| 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 |
| 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_id>;Password=<password>;Encrypt=true |
Microsoft. Data.SqlClient 7.0 och senare versioner kräver det versionsanpassade Microsoft.Data.SqlClient.Extensions.Azure paketet för drivrutinslevererade Microsoft Entra ID-autentiseringslägen. Du behöver inte det tillägget när applikationskoden tillhandahåller en åtkomsttoken eller ett återanrop för åtkomsttoken.
Autentisering kräver också användare på databassidan, behörigheter och identitetskonfiguration. För hela valmatrisen och uppsättningen, se Microsoft Entra ID-autentisering och SQL Server-autentisering.
Ange servern och databasen
Använd Server och Database som kanoniska nyckelordsnamn. Föraren accepterar också alias som Data Source för Server och Initial Catalog för Database.
Vanliga serverformer inkluderar:
Server=server-name
Server=server-name\instance-name
Server=tcp:server-name,1433
Server=(localdb)\MSSQLLocalDB
Föredra ett explicit protokoll, värdnamn och port för produktions-TCP-anslutningar. Använd ett stabilt DNS-namn som matchar servercertifikatet istället för en IP-adress.
För en lyssnare för en tillgänglighetsgrupp, en redundansväxlingsgrupp, en Azure SQL-slutpunkt eller annan TCP-slutpunkt med flera adresser bör du även läsa MultiSubnetFailover i Anslutningsalternativ.
Konfigurera kryptering och certifikatvalidering
I Microsoft.Data.SqlClient 4.0 och senare versioner används true som standard i stället för Encrypt. Microsoft.Data.SqlClient 5.0 och senare versioner stöder också Encrypt=Strict för servrar som förhandlar om TDS 8.0.
Användning:
-
Encrypt=Strictnär servern stödjer TDS 8.0 och har ett certifikat kan klienten validera. -
Encrypt=trueför krypterade anslutningar till andra stödda servrar. -
TrustServerCertificate=false, standardalternativet, för validering av produktionscertifikat.
Använd inte TrustServerCertificate=true som en allmän lösning på anslutningsproblem. Den krypterar kanalen men hoppar över verifiering av serveridentitet. Begränsa det till kontrollerade utvecklingsmiljöer där ett betrodd certifikat inte finns tillgängligt.
För serverkrav, versionsbeteende och certifikatalternativ, se Kryptering och certifikatvalidering.
Förstå syntaxen för anslutningssträngar
En reťazec pripojenia är en semikolonavgränsad lista av nyckelords- och värdepar:
Server=tcp:sql.example.com,1433;Database=Orders;Integrated Security=true;Encrypt=true
Följ dessa regler:
- Nyckelordsnamn är inte kasuskänsliga.
- Värden kan vara kasuskänsliga.
- Ett avslutande semikolon är valfritt.
- Ange ett värde med enkla eller dubbla citattecken när det innehåller semikolon eller inledande eller efterföljande vitmellanslag.
- Undvik offertet som omsluter ett värde genom att dubbla det.
- Använd inte dubbletter av nyckelord. Parsern använder det sista värdet, vilket gör den effektiva konfigurationen svår att granska.
Den uppsättning accepterade nyckelord och alias tillhör leverantören. En reťazec pripojenia som accepteras av Microsoft.Data.SqlClient kanske inte fungerar med System.Data.SqlClient eller en annan dataleverantör.
Bygg anslutningssträngar säkert
Använd SqlConnectionStringBuilder när koden behöver lägga till, validera eller ersätta värden. Koppla inte ihop opålitliga värden till en reťazec pripojenia.
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;
Byggaren:
- Avvisar icke-stödda nyckelord och ogiltiga värden.
- Mappar alias till kanoniska egenskaper.
- Ange värden när det behövs.
- Förhindrar att ett värde injicerar ett annat nyckelord.
Byggaren skyddar inte ett lösenord eller en token efter att det kommit in i processens minne. Den avgör inte heller om en server-, identitets- eller certifikatinställning är säker.
Lagra anslutningsinformation utanför kod
Ladda anslutningssträngar från konfigurationssystemet som används av applikationen. Nuvarande .NET-applikationer använder ofta miljövariabler, användarhemligheter för lokal utveckling, Azure App Configuration och Azure Key Vault-stödd konfiguration.
Håll dessa regler:
- Kommitta inte lösenord, klienthemligheter, åtkomsttokens eller produktionsanslutningssträngar.
- Föredra en identitetsbaserad autentiseringsmetod som inte kräver lösenord i reťazec pripojenia.
- Begränsa åtkomsten till konfigurationskällan.
- Rotera lagrade hemligheter 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=false, vara standard, så att en öppnad anslutning inte exponerar säkerhetskänsliga värden via sin reťazec pripojenia.
För .NET-konfigurationsleverantörer, se Konfiguration i .NET. För ytterligare kontroller, se Skydda anslutningsinformation.
Håll poolnycklarna stabila
Anslutningspoolning använder en specifik anslutningskonfiguration som en del av sin poolnyckel. Ekvivalenta strängar kan skapa separata pooler när deras text skiljer sig åt, inklusive när nyckelord förekommer i en annan ordning.
Bygg en kanonisk reťazec pripojenia vid applikationsstart och återanvänd den. Lägg inte till request-ID:n, användarnamn, åtkomsttokens eller andra per-request-värden till strängen. För fullständiga nyckelregler, se SQL Server connection pooling.
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 Anslutningsalternativ |
| Timeout för standardkommandokörning |
Command Timeout anslutningsalternativ, när det stöds av drivrutinsversionen |
| Tidsgräns för ett kommando | CommandTimeout |
| Avbokning från uppringaren |
CancellationToken skickades till asynkrona API:er |
| Princip för återförsök vid öppning av en anslutning eller körning av ett kommando | Konfigurerbar återförsökslogik på SqlConnection eller SqlCommand |
Behandla inte en längre timeout som logik för nya försök. En timeout begränsar en väntetid. Ett nytt försök innebär ytterligare ett försök och måste vara avgränsat och säkert att upprepa.
Granska versionskänsligt beteende
| Drivrutinsversion | Ändring av anslutningssträng |
|---|---|
| 4.0 |
Encrypt har som standard true. |
| 5.0 |
Encrypt=Strict och HostNameInCertificate finns tillgängliga.
SqlConnectionStringBuilder.Encrypt använder SqlConnectionEncryptOption. |
| 5.1 |
ServerCertificate kan matcha servercertifikatet mot en fil. |
| 5.2 | AccessTokenCallback finns tillgängligt för tokens som tillhandahålls av förnybara applikationer. |
| 7.0 | Autentisering med Microsoft Entra ID som tillhandahålls av drivrutinen flyttas till Microsoft.Data.SqlClient.Extensions.Azure. |
| 7.0.2 | Huvuddrivrutinen och dess tillhörande paket använder samordnade versioner. |
Använd en stabil drivrutinsversion som stöds och läs versionsanteckningarna innan en uppdatering. För aktuella versioner, se SqlClient-drivrutinsstödets livscykel.