Uwierzytelnianie Azure SQL z usługą AD
wystarczy utworzyć użytkownika bazy danych i używać prostego uwierzytelniania sql - ale nie zawsze jest to możliwe, zwłaszcza w przypadku wysoce ograniczonych danych.
W takich przypadkach jesteśmy zmuszeni do korzystania z uwierzytelniania AD, a aby uczynić sprawy jeszcze mniej przyjaznymi, często musimy poprosić użytkownika technicznego do zaplanowanego przetwarzania i tym podobnych.
Nie jest to zbyt skomplikowane, ale proces może nie być zbyt prosty. Odwiedź nasze Doradztwo w zakresie inżynierii danych aby znaleźć rozwiązania odpowiednie dla Twojej firmy
Rozwiązanie
Aby skonfigurować uwierzytelnianie Azure SQL za pomocą usługi Azure Active Directory (AD), pierwszym krokiem jest utworzenie Rejestracja aplikacji w usłudze Azure Active Directory. Ta rejestracja aplikacji zastąpi „użytkownika technicznego” i pozwoli nam bezpiecznie uwierzytelnić. Poniżej znajduje się szczegółowy przewodnik krok po kroku, który pomoże Ci przejść przez ten proces:
Krok 1: Przejdź do usługi Azure Active Directory
- Zaloguj się do swojego Portal platformy Azure.
- W menu po lewej stronie znajdź i kliknij Usługa Azure Active Directory pod Usługi platformy Azure. W tym miejscu będziesz zarządzać wszystkimi aspektami swojego katalogu, w tym rejestracją aplikacji.
Krok 2: Uzyskaj dostęp do rejestracji aplikacji
- Po wejściu do usługi Azure Active Directory poszukaj Rejestracje aplikacji opcja w menu po lewej stronie.
- Kliknij Rejestracje aplikacji aby wyświetlić listę istniejących rejestracji aplikacji lub utworzyć nową.
Krok 3: Utwórz nową rejestrację aplikacji
- W Rejestracje aplikacji sekcja, kliknij Nowa rejestracja przycisk znajdujący się u góry ekranu.
- Wpisz wymagane dane:
- Nazwa: Wprowadź znaczącą nazwę aplikacji (np. „SqlAuthApp”).
- Obsługiwane typy kont: Wybierz Pojedynczy najemca jeśli aplikacja będzie używana tylko w Twojej organizacji.
- Przekierowanie URI: Na razie jest to opcjonalne i można pozostawić puste, chyba że masz na myśli określony identyfikator URI.
- Po wypełnieniu wszystkich szczegółów kliknij Rejestracja przycisk, aby utworzyć rejestrację aplikacji.
Krok 4: Pobierz właściwości aplikacji
Po utworzeniu rejestracji aplikacji będziesz musiał zebrać kilka kluczowych właściwości do dalszej konfiguracji:
- Identyfikator aplikacji (klienta): To jest unikalny identyfikator Twojej aplikacji.
- Identyfikator katalogu (najemcy): Jest to identyfikator najemcy usługi Azure AD.
- Sekret klienta: Utworzysz to w następnym kroku.
Krok 5: Utwórz sekret klienta
- Przejdź do Certyfikaty i tajemnice sekcja w ramach rejestracji aplikacji.
- Kliknij Sekret nowego klienta aby wygenerować tajny klucz do swojej aplikacji.
- Podaj opis tajemnicy (np. „SQLAthSecret”) i ustaw okres ważności (np. 6 miesięcy, 1 rok lub zwykły).
- Kliknij Dodaj aby wygenerować sekret.
- Skopiuj wygenerowaną tajną wartość i przechowuj ją w bezpiecznej lokalizacji, takiej jak Azure Key Vault, ponieważ nie będzie ona ponownie wyświetlana.
Krok 6: Przypisz uprawnienia
- Idź do Uprawnienia API sekcja rejestracji aplikacji.
- Kliknij Dodaj uprawnienia i wybierz Azure SQL Database z listy interfejsów API.
- Wybierz odpowiednie uprawnienia (np. podszywanie się pod użytkownika) i udziel zgody administratora, jeśli jest to wymagane.
Krok 7: Skonfiguruj platformę Azure SQL
- Przejdź do instancji usługi Azure SQL w usłudze Azure Portal.
- Dodaj rejestrację aplikacji jako użytkownika zewnętrznego na serwerze SQL.
- Przypisywanie niezbędnych ról i uprawnień do aplikacji, takich jak db_datareader albo db_datawriter, w zależności od Twoich wymagań.
Wykonując te kroki, pomyślnie utworzysz rejestrację aplikacji w usłudze Azure Active Directory, która może być teraz używana jako użytkownik techniczny do bezpiecznego uwierzytelniania za pomocą usługi Azure SQL. Ta konfiguracja zapewnia ochronę bazy danych, jednocześnie umożliwiając bezproblemową integrację z aplikacjami.

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

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

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:

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”:

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

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 ()
Odwiedź nasz blog, aby uzyskać bardziej szczegółowe artykuły dotyczące inżynierii danych:
- Wprowadzenie do koali i databricks
- Testowanie Databricka z działaniami github
- Co to jest denormalizacja bazy danych?