Migrace aplikace v Pythonu pro použití bez hesel s Azure SQL Database

Platí pro:Azure SQL Database

Žádosti o aplikace do služby Azure SQL Database musí být ověřeny. I když existuje několik možností ověřování ve službě Azure SQL Database, měli byste v aplikacích určit prioritu bez hesel. Tradiční metody ověřování, které používají hesla nebo tajné klíče, vytvářejí bezpečnostní rizika a komplikace. Další informace o výhodách přechodu na připojení bez hesla najdete v centru služeb Azure. Následující kurz vysvětluje, jak migrovat existující aplikaci Pythonu pro připojení ke službě Azure SQL Database, aby místo řešení uživatelského jména a hesla používala připojení bez hesla.

Konfigurace služby Azure SQL Database

Připojení bez hesla používají ověřování Microsoft Entra pro připojení ke službám Azure, včetně Azure SQL Database. Ověřování Microsoft Entra umožňuje spravovat identity v centrálním umístění za účelem zjednodušení správy oprávnění. Další informace o konfiguraci ověřování Microsoft Entra pro službu Azure SQL Database:

V tomto průvodci migrací se ujistěte, že máte přiřazeného správce Microsoft Entra ke službě Azure SQL Database.

  1. Přejděte na stránku Microsoft Entra vašeho logického serveru.

  2. Výběrem možnosti Nastavit správce otevřete rozevírací nabídku Microsoft Entra ID .

  3. V rozevírací nabídce Microsoft Entra ID vyhledejte uživatele, kterého chcete přiřadit jako správce.

  4. Vyberte uživatele a zvolte Vybrat.

    A screenshot showing how to enable Microsoft Entra admin.

Konfigurace místního vývojového prostředí

Připojení bez hesla je možné nakonfigurovat tak, aby fungovala pro místní i hostovaná prostředí Azure. V této části použijete konfigurace, které jednotlivým uživatelům umožní ověřovat se ve službě Azure SQL Database pro místní vývoj.

Přihlášení k Azure

V případě místního vývoje se ujistěte, že jste přihlášení pomocí stejného účtu Azure AD, který chcete použít pro přístup ke službě Azure SQL Database. Ověřování můžete provést prostřednictvím oblíbených vývojových nástrojů, jako je Azure CLI nebo Azure PowerShell. Vývojové nástroje, pomocí kterých se můžete ověřovat, se liší v různých jazycích.

Přihlaste se k Azure přes Azure CLI pomocí následujícího příkazu:

az login

Vytvoření uživatele databáze a přiřazení rolí

Vytvořte uživatele ve službě Azure SQL Database. Uživatel by měl odpovídat účtu Azure, který jste použili k místnímu přihlášení v části Přihlášení k Azure .

  1. Na webu Azure Portal přejděte do databáze SQL a vyberte Editor dotazů (Preview).

  2. Výběrem možnosti Pokračovat <your-username> na pravé straně obrazovky se přihlaste k databázi pomocí svého účtu.

  3. V zobrazení editoru dotazů spusťte následující příkazy T-SQL:

    CREATE USER [user@domain] FROM EXTERNAL PROVIDER;
    ALTER ROLE db_datareader ADD MEMBER [user@domain];
    ALTER ROLE db_datawriter ADD MEMBER [user@domain];
    ALTER ROLE db_ddladmin ADD MEMBER [user@domain];
    GO
    

    A screenshot showing how to use the Azure Query editor.

    Spuštěním těchto příkazů přiřadíte zadanému účtu roli Přispěvatel databáze SQL. Tato role umožňuje identitě číst, zapisovat a upravovat data a schéma databáze. Další informace o přiřazených rolích naleznete v tématu Pevné databázové role.

Aktualizace konfigurace místního připojení

Stávající kód aplikace, který se připojuje ke službě Azure SQL Database pomocí ovladače Python SQL – pyodbc stále pracuje s bezserverovými připojeními s drobnými změnami. Následující kód například funguje s ověřováním SQL i bez heslovými připojeními při místním spuštění a při nasazení do služby Aplikace Azure Service.

import os
import pyodbc, struct
from azure.identity import DefaultAzureCredential

connection_string = os.environ["AZURE_SQL_CONNECTIONSTRING"]

def get_all():
    with get_conn() as conn:
        cursor = conn.cursor()
        cursor.execute("SELECT * FROM Persons")
        # Do something with the data
    return

def get_conn():
    credential = DefaultAzureCredential(exclude_interactive_browser_credential=False)
    token_bytes = credential.get_token("https://database.windows.net/.default").token.encode("UTF-16-LE")
    token_struct = struct.pack(f'<I{len(token_bytes)}s', len(token_bytes), token_bytes)
    SQL_COPT_SS_ACCESS_TOKEN = 1256  # This connection option is defined by microsoft in msodbcsql.h
    conn = pyodbc.connect(connection_string, attrs_before={SQL_COPT_SS_ACCESS_TOKEN: token_struct})
    return conn

Tip

V tomto ukázkovém kódu se proměnná WEBSITE_HOSTNAME prostředí Služby App Service používá k určení prostředí, ve kterém je kód spuštěný. V případě jiných scénářů nasazení můžete k určení prostředí použít jiné proměnné prostředí.

Pokud chcete aktualizovat odkazované připojovací řetězec (AZURE_SQL_CONNECTIONSTRING) pro místní vývoj, použijte formát bez hesla připojovací řetězec:

Driver={ODBC Driver 18 for SQL Server};Server=tcp:<database-server-name>.database.windows.net,1433;Database=<database-name>;Encrypt=yes;TrustServerCertificate=no;Connection Timeout=30

Otestování aplikace

Spusťte aplikaci místně a ověřte, že připojení ke službě Azure SQL Database fungují podle očekávání. Mějte na paměti, že může trvat několik minut, než se změny uživatelů a rolí Azure rozšíří prostřednictvím vašeho prostředí Azure. Vaše aplikace je teď nakonfigurovaná tak, aby běžela místně, aniž by vývojáři museli spravovat tajné kódy v samotné aplikaci.

Konfigurace hostitelského prostředí Azure

Jakmile je vaše aplikace nakonfigurovaná tak, aby používala místně připojení bez hesla, může se stejný kód po nasazení do Azure ověřit ve službě Azure SQL Database. Následující části vysvětlují, jak nakonfigurovat nasazenou aplikaci pro připojení ke službě Azure SQL Database pomocí spravované identity. Spravované identity poskytují automaticky spravovanou identitu v Microsoft Entra ID (dříve Azure Active Directory) pro aplikace, které se používají při připojování k prostředkům, které podporují ověřování Microsoft Entra. Další informace o spravovaných identitách:

Vytvoření spravované identity

Vytvořte spravovanou identitu přiřazenou uživatelem pomocí webu Azure Portal nebo Azure CLI. Vaše aplikace používá identitu k ověření v jiných službách.

  1. V horní části webu Azure Portal vyhledejte spravované identity. Vyberte výsledek spravovaných identit.
  2. V horní části stránky přehledu spravovaných identit vyberte + Vytvořit.
  3. Na kartě Základy zadejte následující hodnoty:
    • Předplatné: Vyberte požadované předplatné.
    • Skupina prostředků: Vyberte požadovanou skupinu prostředků.
    • Oblast: Vyberte oblast blízko vaší polohy.
    • Název: Zadejte rozpoznatelný název vaší identity, například MigrationIdentity.
  4. Vyberte Zkontrolovat a vytvořit v dolní části stránky.
  5. Po dokončení ověření vyberte Vytvořit. Azure vytvoří novou identitu přiřazenou uživatelem.

Po vytvoření prostředku vyberte Přejít k prostředku a zobrazte podrobnosti o spravované identitě.

A screenshot showing how to create a managed identity using the Azure portal.

Přidružení spravované identity k webové aplikaci

Nakonfigurujte webovou aplikaci tak, aby používala spravovanou identitu přiřazenou uživatelem, kterou jste vytvořili.

Pomocí následujících kroků na webu Azure Portal přidružte spravovanou identitu přiřazenou uživatelem k vaší aplikaci. Stejný postup platí pro následující služby Azure:

  • Azure Spring Apps
  • Azure Container Apps
  • Virtuální počítače Azure
  • Azure Kubernetes Service
  • Přejděte na stránku přehledu vaší webové aplikace.
  1. V levém navigačním panelu vyberte Identitu .

  2. Na stránce Identita přepněte na kartu Přiřazené uživatelem.

  3. Výběrem + Přidat otevřete informační nabídku Přidat spravovanou identitu přiřazenou uživatelem.

  4. Vyberte předplatné, které jste použili dříve k vytvoření identity.

  5. Vyhledejte migrationIdentity podle názvu a vyberte ji z výsledků hledání.

  6. Vyberte Přidat a přidružte identitu k vaší aplikaci.

    A screenshot showing how to assign a managed identity.

Vytvoření uživatele databáze pro identitu a přiřazení rolí

Vytvořte uživatele databáze SQL, který se mapuje zpět na spravovanou identitu přiřazenou uživatelem. Přiřaďte uživateli potřebné role SQL, aby aplikace mohla číst, zapisovat a upravovat data a schéma databáze.

  1. Na webu Azure Portal přejděte do databáze SQL a vyberte Editor dotazů (Preview).

  2. Výběrem možnosti Pokračovat <username> na pravé straně obrazovky se přihlaste k databázi pomocí svého účtu.

  3. V zobrazení editoru dotazů spusťte následující příkazy T-SQL:

    CREATE USER [user-assigned-identity-name] FROM EXTERNAL PROVIDER;
    ALTER ROLE db_datareader ADD MEMBER [user-assigned-identity-name];
    ALTER ROLE db_datawriter ADD MEMBER [user-assigned-identity-name];
    ALTER ROLE db_ddladmin ADD MEMBER [user-assigned-identity-name];
    GO
    

    A screenshot showing how to use the Azure Query editor to create a SQL user for a managed identity.

    Spuštění těchto příkazů přiřadí roli Přispěvatel databáze SQL spravované identitě přiřazené uživatelem. Tato role umožňuje identitě číst, zapisovat a upravovat data a schéma databáze.


Důležité

Při přiřazování rolí uživatelů databáze v podnikových produkčních prostředích buďte opatrní. V těchto scénářích by aplikace neměla provádět všechny operace pomocí jedné zvýšené identity. Pokuste se implementovat princip nejnižší úrovně 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í:

Aktualizace připojovacího řetězce

Aktualizujte konfiguraci aplikace Azure tak, aby používala formát bez hesla připojovací řetězec. Formát by měl být stejný jako v místním prostředí.

Připojení řetězce můžou být uloženy jako proměnné prostředí v hostitelském prostředí vaší aplikace. Následující pokyny se zaměřují na Službu App Service, ale jiné hostitelské služby Azure poskytují podobné konfigurace.

Driver={ODBC Driver 18 for SQL Server};Server=tcp:<database-server-name>.database.windows.net,1433;Database=<database-name>;Encrypt=yes;TrustServerCertificate=no;Connection Timeout=30

<database-server-name> je název vašeho serveru Azure SQL Database a <database-name> je to název vaší služby Azure SQL Database.

Vytvoření nastavení aplikace pro ID klienta spravované identity

Pokud chcete použít spravovanou identitu přiřazenou uživatelem, vytvořte AZURE_CLIENT_ID proměnnou prostředí a nastavte ji na id klienta spravované identity. Tuto proměnnou můžete nastavit v části Konfigurace aplikace na webu Azure Portal. ID klienta najdete v části Přehled prostředku spravované identity na webu Azure Portal.

Uložte změny a restartujte aplikaci, pokud to neprovádí automaticky.

Poznámka:

Ukázkový kód připojení zobrazený v tomto průvodci migrací používá při nasazení třídu DefaultAzureCredential . Konkrétně používá DefaultAzureCredential bez předání ID klienta spravované identity přiřazené uživatelem konstruktoru. V tomto scénáři je záložním řešením zkontrolovat proměnnou prostředí AZURE_CLIENT_ID. Pokud proměnná prostředí AZURE_CLIENT_ID neexistuje, použije se spravovaná identita přiřazená systémem, pokud je nakonfigurovaná.

Pokud předáte ID klienta spravované identity v konstruktoru DefaultAzureCredential, můžete kód připojení použít místně a nasadit, protože proces ověřování se vrátí k interaktivnímu ověřování v místním scénáři. Další informace najdete v klientské knihovně Azure Identity pro Python.

Testování aplikace

Otestujte aplikaci, abyste měli jistotu, že všechno pořád funguje. Rozšíření všech změn v prostředí Azure může trvat několik minut.

Další kroky

V tomto kurzu jste zjistili, jak migrovat aplikaci na připojení bez hesla.

Podrobnější informace o konceptech probíraných v tomto článku najdete v následujících zdrojích informací: