Uwierzytelnianie Azure SQL z usługą AD

Marcin Miazga
Marcin Miazga
May 27, 2025
15 min read
Loading the Elevenlabs Text to Speech AudioNative Player...

Często chcielibyśmy po prostu utworzyć użytkownika bazy danych i użyć prostego uwierzytelniania SQL – ale nie zawsze jest to możliwe, zwłaszcza gdy mamy do czynienia z mocno ograniczonymi danymi. W takich przypadkach jesteśmy zmuszeni korzystać z AD authentication, a żeby było jeszcze trudniej, często musimy uzyskać technical user do przetwarzania zadań cyklicznych itp. Nie jest to bardzo skomplikowane, ale proces może nie być całkowicie intuicyjny.

Odwiedź naszą Data Engineering Consultancy, aby znaleźć rozwiązania dopasowane do Twojej firmy.

Rozwiązanie

Aby skonfigurować Azure SQL authentication z Azure Active Directory (AD), pierwszym krokiem jest utworzenie app registration w Azure Active Directory. Ta app registration będzie pełnić rolę „technical user” i pozwoli nam na bezpieczne uwierzytelnianie. Poniżej znajdziesz szczegółowy przewodnik krok po kroku:

Krok 1: Przejdź do Azure Active Directory
Zaloguj się do Azure Portal.
W menu po lewej stronie znajdź i kliknij Azure Active Directory w sekcji Azure Services. Tutaj zarządzasz wszystkimi aspektami katalogu, w tym app registrations.

Krok 2: Przejdź do App Registrations
Będąc w Azure Active Directory, znajdź opcję App Registrations w menu po lewej.
Kliknij App Registrations, aby zobaczyć listę istniejących rejestracji lub utworzyć nową.

Krok 3: Utwórz nową App Registration
W sekcji App Registrations kliknij przycisk New Registration u góry ekranu.
Wypełnij wymagane dane:

  • Name: Wpisz nazwę aplikacji (np. "SQLAuthApp").
  • Supported Account Types: Wybierz Single Tenant, jeśli aplikacja będzie używana tylko w Twojej organizacji.
  • Redirect URI: Opcjonalne, można zostawić puste.
    Po wypełnieniu kliknij Register, aby utworzyć app registration.

Krok 4: Pobierz właściwości aplikacji
Po utworzeniu app registration będziesz potrzebować kilku kluczowych właściwości:

  • Application (client) ID: Unikalny identyfikator aplikacji.
  • Directory (tenant) ID: Identyfikator Twojego Azure AD tenant.
  • Client Secret: Utworzysz go w następnym kroku.

Krok 5: Utwórz Client Secret
Przejdź do sekcji Certificates & Secrets w swojej app registration.
Kliknij New Client Secret, aby wygenerować secret key dla aplikacji.
Podaj opis (np. "SQLAuthSecret") i ustaw okres ważności (np. 6 miesięcy, 1 rok).
Kliknij Add, aby wygenerować secret.
Skopiuj wygenerowaną wartość i przechowuj ją w bezpiecznym miejscu, np. w Azure Key Vault – nie będzie już ponownie wyświetlona.

Krok 6: Przyznaj uprawnienia
Przejdź do sekcji API Permissions w app registration.
Kliknij Add a Permission i wybierz Azure SQL Database z listy API.
Wybierz odpowiednie uprawnienia (np. user_impersonation) i udziel admin consent, jeśli to wymagane.

Krok 7: Skonfiguruj Azure SQL
Przejdź do swojej instancji Azure SQL w Azure Portal.
Dodaj app registration jako external user na serwerze SQL.
Przyznaj odpowiednie role i uprawnienia, np. db_datareader lub db_datawriter, w zależności od potrzeb.

Po wykonaniu tych kroków masz utworzoną app registration w Azure Active Directory, która może być używana jako technical user do bezpiecznego uwierzytelniania z Azure SQL. Takie ustawienie zapewnia ochronę bazy danych i umożliwia płynną integrację z aplikacjami.

 

Azure services interface showing options to create a resource and access Azure Active Directory for managing app registrations and authentication.

 

Następnie wybierz Rejestracje aplikacji w menu po lewej stronie:

 

Azure Active Directory left-hand menu showing options like Users, Groups, Roles, and App Registrations for managing access and configurations.

 

Kliknij Nowa rejestracja w górnej części ekranu:

 

Button labeled 'New registration' in the Azure Active Directory interface for creating a new app registration.

 

Wpisz nazwę aplikacji, zaznacz Single Tenant, a na koniec kliknij przycisk „Zarejestruj się”.

 

Po utworzeniu aplikacji będziemy potrzebować niektórych jej właściwości do dalszej konfiguracji:

 

Azure app registration properties showing fields for Display Name, Application (client) ID, Directory (tenant) ID, and Object ID needed for setup.

 

Będziemy również potrzebować tajemnicy, która zostanie użyta do uwierzytelniania naszej aplikacji. Aby stworzyć nowy sekret, przejdźmy do naszej aplikacji i wybierz „Certyfikaty i tajemnice”:

 

Certificates & Secrets

 

Następnie kliknij „Nowy sekret klienta”, a po jego utworzeniu przechowuj go w bezpiecznym miejscu, potencjalnie skarbcu kluczy.

 

Client secrets

 

Po uzyskaniu powyższych informacji możemy rozpocząć konfigurowanie połączenia z naszą instancją Azure SQL.

 

W tym momencie mamy na to kilka sposobów. Możemy spróbować użyć naszej aplikacji, nadać jej uprawnienia dla instancji Azure SQL, utworzyć użytkownika zewnętrznego na serwerze SQL, ale często jest to niemożliwe ze względu na ograniczenia administracyjne w środowisku Azure.

 

Spróbujmy bardziej uniwersalny sposób, który jest prawie tak prosty jak drugi — wygeneruj token dostępu i używaj go do logowania.

 

Aby wygenerować token użyjemy biblioteki MSAL dla Pythona (ADAL wkrótce zostanie pominięty).

 

Musimy wywołać instancję obiektu ConfidencialClientApplication z biblioteki msal.

 

Konstruktor klasy potrzebuje pewnych parametrów:

 

client_id — to jest nasz identyfikator głównego usługi (ID aplikacji)

Ten blok zawiera nieoczekiwaną lub nieprawidłową zawartość.ResolvePrzekształć to HTMLAuthority — jest to identyfikator URI składający się z łącza api: https://login.microsoftonline.com/ i identyfikator najemcy (identyfikator katalogu naszej aplikacji)

 

client_credential — wcześniej utworzony sekret klienta aplikacji

 

Po zebraniu wszystkich informacji tworzymy aplikację:

 

app = msal.confidencialClientApplication (client_id=servicePrincipalID, authority=organ, client_credential=ServicePrincipalPwd,)

 

I użyj metody aquire_token_silent:

 

wynik = app.aquire_token_silent (zakres = [zakres], konto = brak)

Ten blok zawiera nieoczekiwaną lub nieprawidłową zawartość.ResolvePrzekształć do HTMLGdzie zakres jest: https://database.windows.net//.default (z podwójnym „//” - nie pomyłka)

 

Metoda cicha może nie działać, w takim przypadku wybierz inną:

 

jeśli nie wynik: result = app.aquire_token_for_client (zakres)

 

Następnie sprawdź, czy otrzymaliśmy token w odpowiedzi, i zapisz go:

 

jeśli „access_token” w wyniku: SQLazureAccessStoken = wynik ["access_token"]

 

Jesteśmy prawie gotowi do połączenia z JDBC. Wystarczy utworzyć identyfikator URI:

 

JDBCurl = „jdbc:sqlserver: //ourserver.database.windows.net:1433; baza danych = nasza baza danych; szyfruj = true; TrustServerCertificate=false; HostNameInCertificate=*.database.windows.net; loginTimeOut=30; uwierzytelnianie = ActiveDirectoryPassword”

 

i właściwości połączenia:

 

connectionProperties = {„AccessToken”: SQLazureAccessTok, „sterownik”: „com.microsoft.sqlServer.jdbc.sqlServerDriver”, „HostNameInCertificate”: „*.database.windows.net”, „encrypt”: „true”, „ServerCertificate”: „false”, „driver”: „com.microsoft.sqlserver.jdbc.LServerDriver"}

 

I jesteśmy gotowi iść:

 

jdbc_db = spark.read.format („com.microsoft.sqlserver.jdbc.spark”)\ .option („url”, „jdbc:sqlserver: //ourserver.database.windows.net”)\ .option („dbtable”, „(WYBIERZ* Z mytablespace.mytable) a”)\ .option („Nazwa bazy danych”, "ourNazwa bazy danych”, "ourNazwa bazy danych”, "our_db database”)\ .option („AccessToken”, SQLazureAccessToken)\ .option („szyfruj”, „true”)\ .option („HostNameInCertificate”, „*.database.windows.net”)\ .load ()

Niezawodne dag i local development z airflow i docker

Gcp dla firm do czego sluzy google cloud platform

Hybrid cloud co to jest i jak działa

Share this post
Chmura obliczeniowa
Marcin Miazga
MORE POSTS BY THIS AUTHOR
Marcin Miazga

Curious how we can support your business?

TALK TO US