Anslutningssträngar för Microsoft.Data.SqlClient

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:

  1. Vilken server och databas använder applikationen?
  2. Vilken identitet körs applikationen som?
  3. Hur validerar klienten servercertifikatet?
  4. 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=Strict när servern stödjer TDS 8.0 och har ett certifikat kan klienten validera.
  • Encrypt=true fö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.