Sdílet prostřednictvím


Připojení ke službě Azure SQL Database a dotazování na ji pomocí .NET a knihovny Microsoft.Data.SqlClient

Platí pro: Azure SQL Database

Tento rychlý start popisuje, jak připojit aplikaci k databázi ve službě Azure SQL Database a provádět dotazy pomocí .NET a knihovny Microsoft.Data.SqlClient . Tento rychlý start se řídí doporučeným přístupem bez hesla pro připojení k databázi. Další informace o připojeních bez hesel najdete v centru bez hesel.

Požadavky

Konfigurace databáze

Zabezpečená bez hesla připojení ke službě Azure SQL Database vyžadují určité konfigurace databáze. Ověřte na logickém serveru v Azure následující nastavení, abyste se mohli správně připojit ke službě Azure SQL Database v místním i hostovaným prostředí:

  1. V případě místních vývojových připojení se ujistěte, že je váš logický server nakonfigurovaný tak, aby umožňoval připojení IP adresy místního počítače a dalších služeb Azure:

    • Přejděte na stránku Sítě vašeho serveru.

    • Přepněte přepínač Vybrané sítě, aby se zobrazily další možnosti konfigurace.

    • Vyberte Přidat adresu IPv4 klienta (xx.xx.xx.xx) a přidejte pravidlo brány firewall, které povolí připojení z adresy IPv4 místního počítače. Případně můžete také vybrat + Přidat pravidlo brány firewall a zadat konkrétní IP adresu podle vašeho výběru.

    • Ujistěte se, že je zaškrtnuté políčko Povolit službám a prostředkům Azure přístup k tomuto serveru .

      Snímek obrazovky znázorňující, jak nakonfigurovat pravidla brány firewall

      Upozorňující

      Povolení přístupu ke službám a prostředkům Azure pro přístup k tomuto nastavení serveru není doporučeným postupem zabezpečení pro produkční scénáře. Skutečné aplikace by měly implementovat bezpečnější přístupy, jako jsou silnější omezení brány firewall nebo konfigurace virtuální sítě.

      Další informace o konfiguracích zabezpečení databáze najdete v následujících zdrojích informací:

  2. Server musí mít také povolené ověřování Microsoft Entra a musí mít přiřazený účet správce Microsoft Entra. Pro místní vývojová připojení by měl být účet správce Microsoft Entra účtem, ke kterým se můžete také přihlásit do sady Visual Studio nebo Azure CLI místně. Můžete ověřit, zda má váš server povolené ověřování Microsoft Entra na stránce Microsoft Entra ID vašeho logického serveru.

    Snímek obrazovky znázorňující povolení ověřování Microsoft Entra

  3. Pokud používáte osobní účet Azure, ujistěte se, že máte nastavené a nakonfigurované Microsoft Entra pro Azure SQL Database , abyste mohli účet přiřadit jako správce serveru. Pokud používáte podnikový účet, Bude pro vás pravděpodobně již nakonfigurované ID Microsoft Entra.

Vytvoření projektu

V následujících krocích vytvořte webové rozhraní API .NET Minimal pomocí rozhraní příkazového řádku .NET nebo sady Visual Studio 2022.

  1. V nabídce sady Visual Studio přejděte na Soubor>nový>projekt...

  2. V dialogovém okně zadejte ASP.NET do vyhledávacího pole šablony projektu a vyberte výsledek webového rozhraní API ASP.NET Core. V dolní části dialogového okna zvolte Další .

  3. Jako název projektu zadejte DotNetSQL. Ponechte výchozí hodnoty pro zbývající pole a vyberte Další.

  4. V rozhraní vyberte .NET 7.0 a zrušte zaškrtnutí políčka Použít kontrolery (zrušte zaškrtnutí pro použití minimálních rozhraní API). Tento rychlý start používá šablonu minimálního rozhraní API ke zjednodušení vytváření a konfigurace koncových bodů.

  5. Zvolte Vytvořit. Nový projekt se otevře v prostředí sady Visual Studio.

Přidání knihovny Microsoft.Data.SqlClient

Pokud se chcete připojit ke službě Azure SQL Database pomocí .NET, nainstalujte Microsoft.Data.SqlClient. Tento balíček funguje jako zprostředkovatel dat pro připojení k databázím, spouštění příkazů a načítání výsledků.

Poznámka:

Nezapomeňte nainstalovat Microsoft.Data.SqlClient a ne System.Data.SqlClient. Microsoft.Data.SqlClient je novější verze klientské knihovny SQL, která poskytuje další možnosti.

  1. V okně Průzkumník řešení klikněte pravým tlačítkem na uzel Závislosti projektu a vyberte Spravovat balíčky NuGet.

  2. Ve výsledném okně vyhledejte SqlClient. Microsoft.Data.SqlClient Vyhledejte výsledek a vyberte Nainstalovat.

Konfigurace připojovacího řetězce

Pokud chcete místní vývoj s bez heslem připojit ke službě Azure SQL Database, přidejte do appsettings.json souboru následující ConnectionStrings část. <database-server-name> Nahraďte zástupné <database-name> symboly vlastními hodnotami.

"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\";"
}

Bez hesla připojovací řetězec nastaví konfigurační hodnotu Authentication="Active Directory Default", která dává knihovně Microsoft.Data.SqlClient pokyn, aby se připojila ke službě Azure SQL Database pomocí volané DefaultAzureCredentialtřídy . DefaultAzureCredential umožňuje připojení bez hesla ke službám Azure a poskytuje ji knihovna identit Azure, na které závisí klientská knihovna SQL. DefaultAzureCredential podporuje více metod ověřování a určuje, které použít za běhu pro různá prostředí.

Když se například aplikace spustí místně, ověří se prostřednictvím uživatele, DefaultAzureCredential se kterým jste přihlášení k sadě Visual Studio, nebo pomocí jiných místních nástrojů, jako je Azure CLI. Jakmile se aplikace nasadí do Azure, stejný kód zjistí a použije spravovanou identitu přidruženou k hostované aplikaci, kterou nakonfigurujete později. Přehled knihovny Identit Azure vysvětluje pořadí a umístění, ve kterých DefaultAzureCredential se hledají přihlašovací údaje.

Poznámka:

Bez hesla připojovací řetězec se bezpečně potvrdí do správy zdrojového kódu, protože neobsahují tajné kódy, jako jsou uživatelská jména, hesla nebo přístupové klíče.

Přidání kódu pro připojení ke službě Azure SQL Database

Program.cs Obsah souboru nahraďte následujícím kódem, který provádí následující důležité kroky:

  • Načte připojovací řetězec bez hesla zappsettings.json
  • Vytvoří Persons tabulku v databázi během spuštění (pouze pro testovací scénáře).
  • Vytvoří koncový bod HTTP GET pro načtení všech záznamů uložených Persons v tabulce.
  • Vytvoří koncový bod HTTP POST pro přidání nových záznamů do Persons tabulky.
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();

Nakonec přidejte Person třídu do dolní části Program.cs souboru. Tato třída představuje jeden záznam v tabulce databáze Persons .

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

Místní spuštění a otestování aplikace

Aplikace je připravená k místnímu otestování. Ujistěte se, že jste přihlášení k sadě Visual Studio nebo Azure CLI pomocí stejného účtu, který jste nastavili jako správce vaší databáze.

  1. Stisknutím tlačítka Spustit v horní části sady Visual Studio spusťte projekt rozhraní API.

  2. Na stránce s uživatelským rozhraním Swagger rozbalte metodu POST a vyberte Vyzkoušet.

  3. Upravte ukázkový KÓD JSON tak, aby zahrnoval hodnoty pro název first a last název. Vyberte Spustit a přidejte do databáze nový záznam. Rozhraní API vrátí úspěšnou odpověď.

    Snímek obrazovky znázorňující, jak otestovat rozhraní API

  4. Rozbalte metodu GET na stránce uživatelského rozhraní Swagger a vyberte Vyzkoušet. Zvolte Spustit a osoba, kterou jste právě vytvořili, se vrátí.

Nasazení do Azure App Service

Aplikace je připravená k nasazení do Azure. Visual Studio může vytvořit službu Aplikace Azure a nasadit aplikaci v jednom pracovním postupu.

  1. Ujistěte se, že je aplikace zastavená a úspěšně se sestavuje.

  2. V okně Průzkumník řešení sady Visual Studio klikněte pravým tlačítkem myši na uzel projektu nejvyšší úrovně a vyberte Publikovat.

  3. V dialogovém okně publikování vyberte Azure jako cíl nasazení a pak vyberte Další.

  4. Pro konkrétní cíl vyberte Aplikace Azure Service (Windows) a pak vyberte Další.

  5. + Výběrem ikony vytvořte novou službu App Service pro nasazení a zadejte následující hodnoty:

    • Název: Ponechte výchozí hodnotu.

    • Název předplatného: Vyberte předplatné, do které se má nasadit.

    • Skupina prostředků: Vyberte Možnost Nový a vytvořte novou skupinu prostředků s názvem msdocs-dotnet-sql.

    • Plán hostování: Výběrem možnosti Nový otevřete dialogové okno plán hostování. Ponechte výchozí hodnoty a vyberte OK.

    • Výběrem možnosti Vytvořit zavřete původní dialogové okno. Visual Studio vytvoří prostředek služby App Service v Azure.

      Snímek obrazovky znázorňující postup nasazení pomocí sady Visual Studio

  6. Po vytvoření prostředku se ujistěte, že je vybraný v seznamu aplikačních služeb, a pak vyberte Další.

  7. V kroku SLUŽBY API Management zaškrtněte políčko Přeskočit tento krok v dolní části a pak zvolte Dokončit.

  8. V kroku Dokončení vyberte Zavřít , pokud se dialogové okno automaticky nezavře.

  9. Výběrem možnosti Publikovat v pravém horním rohu souhrnu profilu publikování nasadíte aplikaci do Azure.

Po dokončení nasazení visual Studio spustí prohlížeč pro zobrazení hostované aplikace, ale v tomto okamžiku aplikace v Azure nefunguje správně. Stále potřebujete nakonfigurovat zabezpečené připojení mezi službou App Service a databází SQL pro načtení dat.

Připojení služby App Service ke službě Azure SQL Database

K vytvoření připojení bez hesla mezi instancí služby App Service a službou Azure SQL Database je potřeba provést následující kroky:

  1. Vytvořte spravovanou identitu pro službu App Service. Knihovna Microsoft.Data.SqlClient , která je součástí vaší aplikace, automaticky zjistí spravovanou identitu stejně jako místní uživatel sady Visual Studio.
  2. Vytvořte uživatele databáze SQL a přidružte ho ke spravované identitě služby App Service.
  3. Přiřaďte databázovému uživateli role SQL, které umožňují čtení, zápis a potenciálně další oprávnění.

K dispozici je několik nástrojů pro implementaci těchto kroků:

Service Connector je nástroj, který zjednodušuje ověřená připojení mezi různými službami v Azure. Konektor služby v současné době podporuje připojení služby App Service k databázi SQL přes Azure CLI pomocí az webapp connection create sql příkazu. Tento jediný příkaz dokončí tři kroky uvedené výše.

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

Změny provedené konektorem služby můžete ověřit v nastavení služby App Service.

  1. Přejděte na stránku Identita vaší služby App Service. Pod kartou Přiřazený systém by měl být stav nastaven na Zapnuto. Tato hodnota znamená, že pro vaši aplikaci byla povolena spravovaná identita přiřazená systémem.

  2. Přejděte na stránku Konfigurace vaší služby App Service. Na kartě Připojovací řetězce byste měli vidět připojovací řetězec s názvem AZURE_SQL_CONNECTIONSTRING. Kliknutím zobrazíte text hodnoty pro zobrazení vygenerovaného připojovací řetězec bez hesla. Název tohoto připojovací řetězec odpovídá názvu, který jste v aplikaci nakonfigurovali, takže se automaticky zjistí při spuštění v Azure.

Důležité

I když toto řešení poskytuje jednoduchý přístup pro začátek, nejedná se o osvědčený postup pro produkční prostředí. V těchto scénářích by aplikace neměla provádět všechny operace pomocí jedné zvýšené identity. Měli byste se pokusit implementovat princip nejnižšího oprávnění konfigurací více identit s konkrétními oprávněními pro konkrétní úlohy.

Další informace o konfiguraci databázových rolí a zabezpečení najdete v následujících zdrojích informací:

Otestování nasazené aplikace

  1. Výběrem tlačítka Procházet v horní části stránky přehledu služby App Service spusťte kořenovou adresu URL vaší aplikace.

  2. /swagger/index.html Připojte cestu k adrese URL, aby se načetla stejná testovací stránka Swaggeru, kterou jste použili místně.

  3. Spusťte testovací požadavky GET a POST a ověřte, že koncové body fungují podle očekávání.

Tip

Pokud se při testování zobrazí chyba 500 Interní server, může to být způsobeno konfigurací sítě databáze. Ověřte, že je váš logický server nakonfigurovaný s nastavením popsanými v části Konfigurace databáze .

Vaše aplikace je teď připojená ke službě Azure SQL Database v místním i hostovaným prostředí.

Vyčištění prostředků

Po dokončení práce se službou Azure SQL Database odstraňte prostředek, abyste se vyhnuli nezamýšleným nákladům.

  1. Na panelu hledání na webu Azure Portal vyhledejte Azure SQL a vyberte odpovídající výsledek.

  2. Vyhledejte a vyberte databázi v seznamu databází.

  3. Na stránce Přehled služby Azure SQL Database vyberte Odstranit.

  4. Na stránce Azure, kterou opravdu chcete odstranit, která se otevře, zadejte název databáze, abyste ji potvrdili, a pak vyberte Odstranit.