Migrowanie aplikacji w języku Python do używania połączeń bez hasła z usługą Azure SQL Database

Dotyczy:Azure SQL Database

Żądania aplikacji do usługi Azure SQL Database muszą być uwierzytelnione. Chociaż istnieje wiele opcji uwierzytelniania w usłudze Azure SQL Database, należy określić priorytety połączeń bez hasła w aplikacjach, jeśli to możliwe. Tradycyjne metody uwierzytelniania korzystające z haseł lub kluczy tajnych tworzą zagrożenia bezpieczeństwa i komplikacje. Odwiedź centrum usług platformy Azure bez hasła, aby dowiedzieć się więcej o zaletach przechodzenia do połączeń bez hasła. W poniższym samouczku wyjaśniono, jak przeprowadzić migrację istniejącej aplikacji w języku Python w celu nawiązania połączenia z usługą Azure SQL Database w celu używania połączeń bez hasła zamiast nazwy użytkownika i rozwiązania haseł.

Konfigurowanie usługi Azure SQL Database

Połączenia bez hasła używają uwierzytelniania Entra firmy Microsoft do łączenia się z usługami platformy Azure, w tym z usługą Azure SQL Database. Uwierzytelnianie firmy Microsoft Entra umożliwia zarządzanie tożsamościami w centralnej lokalizacji w celu uproszczenia zarządzania uprawnieniami. Dowiedz się więcej o konfigurowaniu uwierzytelniania usługi Microsoft Entra dla usługi Azure SQL Database:

W tym przewodniku migracji upewnij się, że masz administratora firmy Microsoft Entra przypisanego do usługi Azure SQL Database.

  1. Przejdź do strony Microsoft Entra serwera logicznego.

  2. Wybierz pozycję Ustaw administratora , aby otworzyć menu wysuwane Identyfikator entra firmy Microsoft.

  3. W menu wysuwany Microsoft Entra ID wyszukaj użytkownika, który chcesz przypisać jako administrator.

  4. Wybierz użytkownika i wybierz pozycję Wybierz.

    A screenshot showing how to enable Microsoft Entra admin.

Konfigurowanie lokalnego środowiska deweloperskiego

Połączenia bez hasła można skonfigurować tak, aby działały zarówno w środowiskach lokalnych, jak i hostowanych na platformie Azure. W tej sekcji zastosujesz konfiguracje, aby umożliwić poszczególnym użytkownikom uwierzytelnianie w usłudze Azure SQL Database na potrzeby programowania lokalnego.

Logowanie do platformy Azure

W przypadku programowania lokalnego upewnij się, że zalogowaliśmy się przy użyciu tego samego konta usługi Azure AD, którego chcesz użyć do uzyskiwania dostępu do usługi Azure SQL Database. Możesz uwierzytelnić się za pomocą popularnych narzędzi programistycznych, takich jak interfejs wiersza polecenia platformy Azure lub program Azure PowerShell. Narzędzia programistyczne, za pomocą których można uwierzytelniać się w różnych językach.

Zaloguj się do platformy Azure za pomocą interfejsu wiersza polecenia platformy Azure przy użyciu następującego polecenia:

az login

Tworzenie użytkownika bazy danych i przypisywanie ról

Tworzenie użytkownika w usłudze Azure SQL Database. Użytkownik powinien odpowiadać kontu platformy Azure użytego do logowania lokalnego w sekcji Logowanie do platformy Azure .

  1. W witrynie Azure Portal przejdź do bazy danych SQL i wybierz pozycję Edytor zapytań (wersja zapoznawcza).

  2. Wybierz pozycję Kontynuuj po <your-username> prawej stronie ekranu, aby zalogować się do bazy danych przy użyciu konta.

  3. W widoku edytora zapytań uruchom następujące polecenia języka 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.

    Uruchomienie tych poleceń powoduje przypisanie roli Współautor bazy danych SQL do określonego konta. Ta rola umożliwia tożsamości odczytywanie, zapisywanie i modyfikowanie danych i schematu bazy danych. Aby uzyskać więcej informacji na temat przypisanych ról, zobacz Stałe role bazy danych.

Aktualizowanie konfiguracji połączenia lokalnego

Istniejący kod aplikacji łączący się z usługą Azure SQL Database przy użyciu sterownika SQL języka Python — pyodbc nadal współpracuje z połączeniami bez hasła z drobnymi zmianami. Na przykład poniższy kod działa zarówno z uwierzytelnianiem SQL, jak i połączeniami bez hasła podczas uruchamiania lokalnego i podczas wdrażania w usłudze aplikacja systemu Azure.

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

Napiwek

W tym przykładowym kodzie zmienna środowiskowa WEBSITE_HOSTNAME usługi App Service służy do określania środowiska, w którym działa kod. W przypadku innych scenariuszy wdrażania można użyć innych zmiennych środowiskowych do określenia środowiska.

Aby zaktualizować przywołyną parametry połączenia (AZURE_SQL_CONNECTIONSTRING) na potrzeby programowania lokalnego, użyj formatu parametry połączenia bez hasła:

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

Testowanie aplikacji

Uruchom aplikację lokalnie i sprawdź, czy połączenia z usługą Azure SQL Database działają zgodnie z oczekiwaniami. Należy pamiętać, że propagowanie zmian użytkowników i ról platformy Azure za pośrednictwem środowiska platformy Azure może potrwać kilka minut. Aplikacja jest teraz skonfigurowana do uruchamiania lokalnie bez konieczności zarządzania wpisami tajnymi w samej aplikacji.

Konfigurowanie środowiska hostingu platformy Azure

Po skonfigurowaniu aplikacji do lokalnego używania połączeń bez hasła ten sam kod może uwierzytelniać się w usłudze Azure SQL Database po jej wdrożeniu na platformie Azure. W poniższych sekcjach opisano sposób konfigurowania wdrożonej aplikacji w celu nawiązania połączenia z usługą Azure SQL Database przy użyciu tożsamości zarządzanej. Tożsamości zarządzane zapewniają automatyczną tożsamość zarządzaną w usłudze Microsoft Entra ID (dawniej Azure Active Directory) dla aplikacji używanych podczas nawiązywania połączenia z zasobami obsługującymi uwierzytelnianie firmy Microsoft Entra. Dowiedz się więcej o tożsamościach zarządzanych:

Tworzenie tożsamości zarządzanej

Utwórz tożsamość zarządzaną przypisaną przez użytkownika przy użyciu witryny Azure Portal lub interfejsu wiersza polecenia platformy Azure. Aplikacja używa tożsamości do uwierzytelniania w innych usługach.

  1. W górnej części witryny Azure Portal wyszukaj pozycję Tożsamości zarządzane. Wybierz wynik tożsamości zarządzanych.
  2. Wybierz pozycję + Utwórz w górnej części strony przeglądu tożsamości zarządzanych .
  3. Na karcie Podstawy wprowadź następujące wartości:
    • Subskrypcja: wybierz żądaną subskrypcję.
    • Grupa zasobów: wybierz żądaną grupę zasobów.
    • Region: wybierz region w pobliżu lokalizacji.
    • Nazwa: wprowadź rozpoznawalną nazwę tożsamości, taką jak MigrationIdentity.
  4. Wybierz pozycję Przejrzyj i utwórz w dolnej części strony.
  5. Po zakończeniu sprawdzania poprawności wybierz pozycję Utwórz. Platforma Azure tworzy nową tożsamość przypisaną przez użytkownika.

Po utworzeniu zasobu wybierz pozycję Przejdź do zasobu , aby wyświetlić szczegóły tożsamości zarządzanej.

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

Kojarzenie tożsamości zarządzanej z aplikacją internetową

Skonfiguruj aplikację internetową tak, aby korzystała z utworzonej tożsamości zarządzanej przypisanej przez użytkownika.

Wykonaj następujące kroki w witrynie Azure Portal, aby skojarzyć tożsamość zarządzaną przypisaną przez użytkownika z aplikacją. Te same kroki dotyczą następujących usług platformy Azure:

  • Azure Spring Apps
  • Azure Container Apps
  • Maszyny wirtualne platformy Azure
  • Azure Kubernetes Service
  • Przejdź do strony przeglądu aplikacji internetowej.
  1. Wybierz pozycję Tożsamość w obszarze nawigacji po lewej stronie.

  2. Na stronie Tożsamość przejdź do karty Przypisane przez użytkownika.

  3. Wybierz pozycję + Dodaj, aby otworzyć okno wysuwane Dodawanie tożsamości zarządzanej przypisanej przez użytkownika.

  4. Wybierz subskrypcję użytą wcześniej do utworzenia tożsamości.

  5. Wyszukaj pozycję MigrationIdentity według nazwy i wybierz ją z wyników wyszukiwania.

  6. Wybierz pozycję Dodaj , aby skojarzyć tożsamość z aplikacją.

    A screenshot showing how to assign a managed identity.

Tworzenie użytkownika bazy danych dla tożsamości i przypisywanie ról

Utwórz użytkownika bazy danych SQL, który mapuje z powrotem na tożsamość zarządzaną przypisaną przez użytkownika. Przypisz użytkownikowi niezbędne role SQL, aby umożliwić aplikacji odczytywanie, zapisywanie i modyfikowanie danych i schematu bazy danych.

  1. W witrynie Azure Portal przejdź do bazy danych SQL i wybierz pozycję Edytor zapytań (wersja zapoznawcza).

  2. Wybierz pozycję Kontynuuj po <username> prawej stronie ekranu, aby zalogować się do bazy danych przy użyciu konta.

  3. W widoku edytora zapytań uruchom następujące polecenia języka 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.

    Uruchomienie tych poleceń powoduje przypisanie roli Współautor bazy danych SQL do tożsamości zarządzanej przypisanej przez użytkownika. Ta rola umożliwia tożsamości odczytywanie, zapisywanie i modyfikowanie danych i schematu bazy danych.


Ważne

Należy zachować ostrożność podczas przypisywania ról użytkowników bazy danych w środowiskach produkcyjnych przedsiębiorstwa. W tych scenariuszach aplikacja nie powinna wykonywać wszystkich operacji przy użyciu jednej tożsamości z podwyższonym poziomem uprawnień. Spróbuj zaimplementować zasadę najniższych uprawnień, konfigurując wiele tożsamości z określonymi uprawnieniami dla określonych zadań.

Więcej informacji na temat konfigurowania ról bazy danych i zabezpieczeń można uzyskać w następujących zasobach:

Aktualizowanie parametrów połączenia

Zaktualizuj konfigurację aplikacji platformy Azure, aby używać formatu parametry połączenia bez hasła. Format powinien być taki sam, jak używany w środowisku lokalnym.

ciągi Połączenie ion mogą być przechowywane jako zmienne środowiskowe w środowisku hostingu aplikacji. Poniższe instrukcje koncentrują się na usłudze App Service, ale inne usługi hostingowe platformy Azure zapewniają podobne konfiguracje.

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> to nazwa serwera usługi Azure SQL Database i <database-name> jest nazwą usługi Azure SQL Database.

Tworzenie ustawienia aplikacji dla identyfikatora klienta tożsamości zarządzanej

Aby użyć tożsamości zarządzanej przypisanej przez użytkownika, utwórz zmienną środowiskową AZURE_CLIENT_ID i ustaw ją równą identyfikatorowi klienta tożsamości zarządzanej. Tę zmienną można ustawić w sekcji Konfiguracja aplikacji w witrynie Azure Portal. Identyfikator klienta można znaleźć w sekcji Przegląd zasobu tożsamości zarządzanej w witrynie Azure Portal.

Zapisz zmiany i uruchom ponownie aplikację, jeśli nie zostanie to wykonane automatycznie.

Uwaga

Przykładowy kod połączenia pokazany w tym przewodniku migracji używa klasy DefaultAzureCredential podczas wdrażania. W szczególności używa wartości DefaultAzureCredential bez przekazywania identyfikatora klienta tożsamości zarządzanej przypisanej przez użytkownika do konstruktora. W tym scenariuszu rezerwowe jest sprawdzenie zmiennej środowiskowej AZURE_CLIENT_ID. Jeśli zmienna środowiskowa AZURE_CLIENT_ID nie istnieje, w przypadku skonfigurowania zostanie użyta tożsamość zarządzana przypisana przez system.

Jeśli przekażesz identyfikator klienta tożsamości zarządzanej w konstruktorze DefaultAzureCredential, kod połączenia będzie nadal używany lokalnie i wdrożony, ponieważ proces uwierzytelniania wraca do uwierzytelniania interaktywnego w scenariuszu lokalnym. Aby uzyskać więcej informacji, zobacz bibliotekę klienta tożsamości platformy Azure dla języka Python.

Testowanie aplikacji

Przetestuj aplikację, aby upewnić się, że wszystko nadal działa. Propagacja wszystkich zmian w środowisku platformy Azure może potrwać kilka minut.

Następne kroki

W tym samouczku przedstawiono sposób migrowania aplikacji do połączeń bez hasła.

Aby zapoznać się z pojęciami omówionymi w tym artykule, zapoznaj się z następującymi zasobami: