Dela via


Ansluta till och fråga Azure SQL Database med hjälp av .NET och biblioteket Microsoft.Data.SqlClient

gäller för:Azure SQL Database

Den här snabbstarten beskriver hur du ansluter ett program till en databas i Azure SQL Database och utför frågor med hjälp av .NET och biblioteket Microsoft.Data.SqlClient . Den här snabbstarten följer den rekommenderade metoden för lösenordsfri anslutning till databasen. Du kan lära dig mer om lösenordslösa anslutningar på lösenordsfri hubb.

Förutsättningar

Konfigurera databasen

Säkra, lösenordslösa anslutningar till Azure SQL Database kräver vissa databaskonfigurationer. Kontrollera följande inställningar på din logiska servern i Azure för att ansluta korrekt till Azure SQL Database i både lokala och värdbaserade miljöer:

  1. För lokala utvecklingsanslutningar kontrollerar du att den logiska servern är konfigurerad så att din lokala dators IP-adress och andra Azure-tjänster kan ansluta:

    • Gå till sidan Nätverk på din server.

    • Använd Valda nätverk radioknapp för att visa de ytterligare konfigurationsalternativen.

    • Välj Lägg till din klient-IPv4-adress (xx.xx.xx.xx.xx) för att lägga till en brandväggsregel som aktiverar anslutningar från din lokala IPv4-adress. Du kan också välja + Lägg till en brandväggsregel för att ange en specifik IP-adress.

    • Kontrollera att kryssrutan Tillåt Att Azure-tjänster och resurser får åtkomst till den här servern är markerad.

      En skärmbild som visar hur du konfigurerar brandväggsregler.

      Varning

      Att aktivera inställningen Tillåt Azure-tjänster och resurser att komma åt den här servern är inte en rekommenderad säkerhetspraxis för produktionsscenarier. Verkliga program bör implementera säkrare metoder, till exempel starkare brandväggsbegränsningar eller konfigurationer av virtuella nätverk.

      Du kan läsa mer om databassäkerhetskonfigurationer på följande resurser:

  2. Servern måste också ha Microsoft Entra-autentisering aktiverat och ha ett Microsoft Entra-administratörskonto tilldelat. För lokala utvecklingsanslutningar ska Microsoft Entra-administratörskontot vara ett konto som du också kan logga in på Visual Studio eller Azure CLI med lokalt. Du kan kontrollera om din server har Microsoft Entra-autentisering aktiverat på sidan Microsoft Entra-ID på den logiska servern.

    En skärmbild som visar hur du aktiverar Microsoft Entra-autentisering.

  3. Om du använder ett personligt Azure-konto kontrollerar du att du har Microsoft Entra-konfiguration och konfigurerat för Azure SQL Database för att tilldela ditt konto som serveradministratör. Om du använder ett företagskonto är Microsoft Entra-ID förmodligen redan konfigurerat åt dig.

Skapa projektet

För stegen framåt skapar du ett .NET Minimalt webb-API med antingen .NET CLI eller Visual Studio 2022.

  1. I Visual Studio-menyn går du till Arkiv>nytt>projekt...

  2. I dialogrutan anger du ASP.NET i sökrutan för projektmallen och väljer resultatet ASP.NET Core Web API. Välj Nästa längst ned i dialogrutan.

  3. För projektnamnanger du DotNetSQL. Lämna standardvärdena för resten av fälten och välj Nästa.

  4. För Frameworkväljer du .NET 7.0 och avmarkerar Använd kontrollanter (avmarkera för att använda minimala API:er). Den här snabbstarten använder en minimal API-mall för att effektivisera skapandet och konfigurationen av slutpunkter.

  5. Välj Skapa. Det nya projektet öppnas i Visual Studio-miljön.

Lägg till biblioteket Microsoft.Data.SqlClient

Om du vill ansluta till Azure SQL Database med hjälp av .NET installerar du Microsoft.Data.SqlClient. Det här paketet fungerar som en dataprovider för att ansluta till databaser, köra kommandon och hämta resultat.

Anmärkning

Se till att installera Microsoft.Data.SqlClient och inte System.Data.SqlClient. Microsoft.Data.SqlClient är en nyare version av SQL-klientbiblioteket som tillhandahåller ytterligare funktioner.

  1. I Solution Explorer-fönstret, högerklicka på projektets nod Beroenden och välj Hantera NuGet-paket.

  2. I det resulterande fönstret söker du efter SqlClient. Leta upp resultatet Microsoft.Data.SqlClient och välj Installera.

Konfigurera anslutningssträngen

För lokal utveckling med lösenordslösa anslutningar till Azure SQL Database lägger du till följande ConnectionStrings avsnitt i appsettings.json filen. Ersätt platshållarna <database-server-name> och <database-name> med dina egna värden.

"ConnectionStrings": {
    "AZURE_SQL_CONNECTIONSTRING": "Server=tcp:<database-server-name>.database.windows.net,1433;Initial Catalog=<database-name>;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;Authentication=\"Active Directory Default\";"
}

Den lösenordslösa anslutningssträngen anger ett konfigurationsvärde på , som instruerar Microsoft.Data.SqlClient biblioteket att ansluta till Azure SQL Database med hjälp av Authentication="Active Directory Default"en klass med namnet DefaultAzureCredential. DefaultAzureCredential aktiverar lösenordslösa anslutningar till Azure-tjänster och tillhandahålls av Azure Identity-biblioteket som SQL-klientbiblioteket är beroende av. DefaultAzureCredential stöder flera autentiseringsmetoder och avgör vilka som ska användas vid körning för olika miljöer.

När appen till exempel körs lokalt DefaultAzureCredential autentiseras via den användare som du är inloggad i Visual Studio med eller andra lokala verktyg som Azure CLI. När appen har distribuerats till Azure identifierar och tillämpar samma kod den hanterade identitet som är associerad med den värdbaserade appen, som du konfigurerar senare. Översikt över Azure Identity-bibliotek förklarar ordningen och platserna där DefaultAzureCredential söker efter autentiseringsuppgifter.

Anmärkning

Lösenordslösa anslutningssträngar är säkra att checka in på källkontrollen, eftersom de inte innehåller hemligheter som användarnamn, lösenord eller åtkomstnycklar.

Lägg till koden för att ansluta till Azure SQL Database

Ersätt innehållet i Program.cs filen med följande kod, som utför följande viktiga steg:

  • Hämtar den lösenordslösa anslutningssträngen från appsettings.json
  • Skapar en Persons tabell i databasen under start (endast för testningsscenarier)
  • Skapar en HTTP GET slutpunkt för att hämta alla poster som lagras i Persons tabellen
  • Skapar en HTTP POST-slutpunkt för att lägga till nya poster i Persons tabellen
using Microsoft.Data.SqlClient;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

var app = builder.Build();

// For production scenarios, consider keeping Swagger configurations behind the environment check
// if (app.Environment.IsDevelopment())
// {
    app.UseSwagger();
    app.UseSwaggerUI();
// }

app.UseHttpsRedirection();

string connectionString = app.Configuration.GetConnectionString("AZURE_SQL_CONNECTIONSTRING")!;

try
{
    // Table would be created ahead of time in production
    using var conn = new SqlConnection(connectionString);
    conn.Open();

    var command = new SqlCommand(
        "CREATE TABLE Persons (ID int NOT NULL PRIMARY KEY IDENTITY, FirstName varchar(255), LastName varchar(255));",
        conn);
    using SqlDataReader reader = command.ExecuteReader();
}
catch (Exception e)
{
    // Table may already exist
    Console.WriteLine(e.Message);
}

app.MapGet("/Person", () => {
    var rows = new List<string>();

    using var conn = new SqlConnection(connectionString);
    conn.Open();

    var command = new SqlCommand("SELECT * FROM Persons", conn);
    using SqlDataReader reader = command.ExecuteReader();

    if (reader.HasRows)
    {
        while (reader.Read())
        {
            rows.Add($"{reader.GetInt32(0)}, {reader.GetString(1)}, {reader.GetString(2)}");
        }
    }

    return rows;
})
.WithName("GetPersons")
.WithOpenApi();

app.MapPost("/Person", (Person person) => {
    using var conn = new SqlConnection(connectionString);
    conn.Open();

    var command = new SqlCommand(
        "INSERT INTO Persons (firstName, lastName) VALUES (@firstName, @lastName)",
        conn);

    command.Parameters.Clear();
    command.Parameters.AddWithValue("@firstName", person.FirstName);
    command.Parameters.AddWithValue("@lastName", person.LastName);

    using SqlDataReader reader = command.ExecuteReader();
})
.WithName("CreatePerson")
.WithOpenApi();

app.Run();

Lägg slutligen till Person klassen längst ned i Program.cs filen. Den här klassen representerar en enskild post i databasens Persons tabell.

public class Person
{
    public required string FirstName { get; set; }
    public required string LastName { get; set; }
}

Köra och testa appen lokalt

Appen är redo att testas lokalt. Kontrollera att du är inloggad i Visual Studio eller Azure CLI med samma konto som du angav som administratör för databasen.

  1. Tryck på körningsknappen överst i Visual Studio för att starta API-projektet.

  2. På sidan Swagger-användargränssnitt expanderar du POST-metoden och väljer Prova.

  3. Ändra JSON-exemplet så att det first innehåller värden för och-namnet last . Välj Kör för att lägga till en ny post i databasen. API:et returnerar ett lyckat svar.

    Skärmbild som visar hur du testar API:et.

  4. GET Expandera metoden på swagger-användargränssnittssidan och välj Prova. Välj Köroch den person som du nyss skapade returneras.

Distribuera till Azure App Service

Appen är redo att distribueras till Azure. Visual Studio kan skapa en Azure App Service och distribuera ditt program i ett enda arbetsflöde.

  1. Kontrollera att appen har stoppats och att den byggs framgångsrikt.

  2. Högerklicka på projektnoden på den översta nivån i Solution Explorer i Visual Studio och välj Publicera.

  3. I publiceringsdialogrutan väljer du Azure som distributionsmål och väljer sedan Nästa.

  4. För det specifika målet väljer du Azure App Service (Windows)och väljer sedan Nästa.

  5. Välj ikonen + för att skapa en ny App Service att distribuera till och ange följande värden:

    • Namn: Lämna standardvärdet.
    • Prenumerationsnamn: Välj den prenumeration som du vill distribuera till.
    • Resursgrupp: Välj Ny och skapa en ny resursgrupp med namnet msdocs-dotnet-sql.
    • Värdplan: Välj Ny för att öppna dialogrutan värdplan. Lämna standardvärdena och välj OK.
    • Välj Skapa för att stänga den ursprungliga dialogrutan. Visual Studio skapar App Service-resursen i Azure.

    Skärmbild som visar hur du distribuerar med Visual Studio.

  6. När resursen har skapats kontrollerar du att den är markerad i listan över apptjänster och väljer sedan Nästa.

  7. I API Management-steget markerar du kryssrutan Hoppa över det här steget längst ned och väljer sedan Slutför.

  8. I steget Slutför väljer du Stäng om dialogrutan inte stängs automatiskt.

  9. Välj Publicera längst upp till höger i sammanfattningen av publiceringsprofilen för att distribuera appen till Azure.

När distributionen är klar startar Visual Studio webbläsaren för att visa den värdbaserade appen, men i det här läget fungerar inte appen korrekt i Azure. Du måste fortfarande konfigurera den säkra anslutningen mellan App Service och SQL-databasen för att hämta dina data.

Ansluta App Service till Azure SQL Database

Följande steg krävs för att skapa en lösenordslös anslutning mellan App Service-instansen och Azure SQL Database:

  1. Skapa en hanterad identitet för App Service. Det Microsoft.Data.SqlClient bibliotek som ingår i din app identifierar automatiskt den hanterade identiteten, precis som den upptäckte din lokala Visual Studio-användare.
  2. Skapa en SQL-databasanvändare och associera den med den hanterade App Service-identiteten.
  3. Tilldela SQL-roller till databasanvändaren som tillåter läs-, skriv- och potentiellt andra behörigheter.

Det finns flera tillgängliga verktyg för att implementera följande steg:

Service Connector är ett verktyg som effektiviserar autentiserade anslutningar mellan olika tjänster i Azure. Service Connector stöder för närvarande anslutning av en App Service till en SQL-databas via Azure CLI med hjälp av kommandot az webapp connection create sql. Det här enkla kommandot slutför de tre steg som nämns ovan åt dig.

az webapp connection create sql \
    -g <app-service-resource-group> \
    -n <app-service-name> \
    --tg <database-server-resource-group> \
    --server <database-server-name> \
    --database <database-name> \
    --system-identity

Du kan verifiera de ändringar som gjorts av Service Connector i App Service-inställningarna.

  1. Gå till sidan Identity för din App Service. Under fliken Systemtilldelat bör Status anges till . Det här värdet innebär att en systemtilldelad hanterad identitet har aktiverats för din app.

  2. Gå till sidan Konfiguration för din App Service. Under fliken Anslutningssträngar bör du se en anslutningssträng med namnet AZURE_SQL_CONNECTIONSTRING. Välj text Klicka för att visa värdet för att se den genererade anslutningssträngen utan lösenord. Namnet på den här anslutningssträngen matchar den som du konfigurerade i din app, så den identifieras automatiskt när den körs i Azure.

Viktigt!

Även om den här lösningen är en enkel metod för att komma igång är det inte bästa praxis för miljöer i produktionsklass. I dessa scenarier bör appen inte utföra alla åtgärder med en enda upphöjd identitet. Du bör försöka implementera principen om lägsta behörighet genom att konfigurera flera identiteter med specifika behörigheter för specifika uppgifter.

Du kan läsa mer om hur du konfigurerar databasroller och säkerhet på följande resurser:

Testa det distribuerade programmet

  1. Välj knappen Bläddra överst på apptjänstens översiktssida för att starta appens rot-URL.

  2. /swagger/index.html Lägg till sökvägen till URL:en för att läsa in samma Swagger-testsida som du använde lokalt.

  3. Kör test GET - och POST-begäranden för att kontrollera att slutpunkterna fungerar som förväntat.

    Tips/Råd

    Om du får ett 500 internt serverfel under testningen kan det bero på databasnätverkskonfigurationerna. Kontrollera att den logiska servern har konfigurerats med de inställningar som beskrivs i avsnittet Konfigurera databasen.

Ditt program är nu anslutet till Azure SQL Database i både lokala och värdbaserade miljöer.

Rensa resurserna

När du är klar med arbetet med Azure SQL Database tar du bort resursen för att undvika oavsiktliga kostnader.

  1. I sökfältet i Azure-portalen söker du efter Azure SQL- och väljer matchande resultat.

  2. Leta upp och välj databasen i listan över databaser.

  3. På sidan Översikt i Azure SQL Database väljer du Ta bort.

  4. Azure är du säker på att du vill ta bort... På sidan som öppnas, skriver du namnet på din databas för att bekräfta, och väljer sedan Ta bort.