Azure SQL-Authentifizierung mit AD
Manchmal möchte man einfach einen Datenbankbenutzer anlegen und einfache SQL-Authentifizierung nutzen – das ist aber nicht immer möglich, besonders bei hochsensiblen Daten. In solchen Fällen muss man AD authentication verwenden, und oft braucht man zusätzlich einen technischen Benutzer für geplante Prozesse. Es ist nicht besonders kompliziert, aber der Ablauf ist nicht immer ganz selbsterklärend.
Besuchen Sie unsere Data Engineering Consultancy für maßgeschneiderte Lösungen für Ihr Unternehmen.
Lösung
Um Azure SQL authentication mit Azure Active Directory (AD) einzurichten, ist der erste Schritt die Erstellung einer app registration in Azure Active Directory. Diese app registration fungiert als „technischer Benutzer“ und ermöglicht eine sichere Authentifizierung. Hier eine Schritt-für-Schritt-Anleitung:
Schritt 1: Navigieren Sie zu Azure Active Directory
Melden Sie sich im Azure Portal an.
Wählen Sie im linken Menü Azure Active Directory unter Azure Services. Hier verwalten Sie alle Aspekte Ihres Verzeichnisses, einschließlich app registrations.
Schritt 2: App Registrations öffnen
Suchen Sie im Azure Active Directory das Menü App Registrations.
Klicken Sie auf App Registrations, um die Liste der bestehenden Registrierungen zu sehen oder eine neue zu erstellen.
Schritt 3: Neue App Registration erstellen
Klicken Sie im Bereich App Registrations oben auf New Registration.
Füllen Sie die erforderlichen Felder aus:
- Name: Geben Sie einen aussagekräftigen Namen ein (z.B. "SQLAuthApp").
- Supported Account Types: Wählen Sie Single Tenant, wenn die App nur in Ihrer Organisation genutzt wird.
- Redirect URI: Optional, kann leer bleiben.
Klicken Sie auf Register, um die app registration zu erstellen.
Schritt 4: App-Eigenschaften abrufen
Nach der Erstellung benötigen Sie folgende Eigenschaften:
- Application (client) ID: Die eindeutige Kennung Ihrer App.
- Directory (tenant) ID: Die Kennung Ihres Azure AD tenant.
- Client Secret: Wird im nächsten Schritt erstellt.
Schritt 5: Client Secret erstellen
Gehen Sie in Ihrer app registration zu Certificates & Secrets.
Klicken Sie auf New Client Secret, um einen secret key zu generieren.
Geben Sie eine Beschreibung ein (z.B. "SQLAuthSecret") und wählen Sie eine Gültigkeitsdauer (z.B. 6 Monate, 1 Jahr).
Klicken Sie auf Add, um das Secret zu generieren.
Kopieren Sie den generierten Wert und speichern Sie ihn sicher, z.B. im Azure Key Vault – er wird nicht erneut angezeigt.
Schritt 6: Berechtigungen zuweisen
Gehen Sie zum Bereich API Permissions Ihrer app registration.
Klicken Sie auf Add a Permission und wählen Sie Azure SQL Database aus der Liste der APIs.
Wählen Sie die passenden Berechtigungen (z.B. user_impersonation) und erteilen Sie ggf. admin consent.
Schritt 7: Azure SQL konfigurieren
Navigieren Sie zu Ihrer Azure SQL-Instanz im Azure Portal.
Fügen Sie die app registration als external user auf Ihrem SQL-Server hinzu.
Weisen Sie die nötigen Rollen und Berechtigungen zu, z.B. db_datareader oder db_datawriter.
Nach diesen Schritten haben Sie eine app registration in Azure Active Directory erstellt, die als technischer Benutzer für die sichere Authentifizierung mit Azure SQL genutzt werden kann. Diese Konfiguration schützt Ihre Datenbank und ermöglicht eine nahtlose Integration mit Ihren Anwendungen.

Dann wähle App Registrations im Menü auf der linken Seite:

Klicken Sie im oberen Teil des Bildschirms auf Neue Registrierung:

Geben Sie den Namen der App ein, aktivieren Sie Single Tenant und klicken Sie abschließend auf die Schaltfläche „Registrieren“.
Wenn die App erstellt ist, benötigen wir einige ihrer Eigenschaften für die weitere Einrichtung:

Wir benötigen außerdem ein Geheimnis, das zur Authentifizierung unserer App verwendet wird. Um ein neues Geheimnis zu erstellen, gehen wir in unsere App und wählen „Zertifikate und Geheimnisse“:

Klicken Sie anschließend auf „Neues Client-Geheimnis“ und speichern Sie es nach der Erstellung an einem sicheren Ort, möglicherweise im Schlüsseltresor.

Sobald wir die oben genannten Informationen erhalten haben, können wir mit der Einrichtung einer Verbindung zu unserer Azure SQL-Instanz beginnen.
An dieser Stelle haben wir mehrere Möglichkeiten, dies zu tun. Wir könnten versuchen, unsere App zu verwenden, ihr Berechtigungen für Azure SQL-Instanzen zu erteilen, externe Benutzer auf dem SQL-Server zu erstellen, aber das ist aufgrund administrativer Einschränkungen in der Azure-Umgebung oft unmöglich.
Versuchen wir es mit einer universelleren Methode, die fast so einfach ist wie letztere — generieren Sie ein Zugriffstoken und verwenden Sie es für die Anmeldung.
Um das Token zu generieren, verwenden wir die MSAL-Bibliothek für Python (ADAL wird bald weggelassen).
Wir müssen die Instanz des ConfidentialClientApplication-Objekts aus der MSAL-Bibliothek aufrufen.
Der Klassenkonstruktor benötigt einige Parameter:
client_id — das ist unsere Service Principal ID (Anwendungs-ID)
Dieser Block enthält unerwarteten oder ungültigen Inhalt.resolveConvert to HtmlAuthority — das ist eine URI, die aus einem API-Link besteht: https://login.microsoftonline.com/ und Tenant Id (Verzeichnis-ID unserer App)
client_credential — zuvor erstelltes App-Client-Geheimnis
Nachdem wir alle Informationen gesammelt haben, instanziieren wir die App:
app = msal.confidentialClientApplication (client_id=ServicePrincipalID, authority=authority, client_credentials = ServicePrincipalPwd,)
Und benutze die Methode acquire_token_silent:
Ergebnis = app.acquire_token_silent (Geltungsbereich = [Geltungsbereich], Konto=Keine)
Dieser Block enthält unerwarteten oder ungültigen Inhalt.resolveConvert to HtmlWhere scope ist: https://database.windows.net//.default (mit doppeltem „//“ — kein Fehler)
Die stille Methode funktioniert möglicherweise nicht. Wählen Sie in diesem Fall eine andere aus:
wenn nicht Ergebnis: result = app.acquire_token_for_client (scope)
Dann überprüfe, ob wir als Antwort ein Token erhalten haben, und speichere es:
wenn „access_token“ im Ergebnis ist: SQLAzureAccessToken = result ["access_token"]
Wir sind fast bereit, uns mit JDBC zu verbinden. Erstelle einfach eine URI:
jdbcURL = „jdbc:sqlserver: //ourserver.database.windows.net:1433; Datenbank=unsere Datenbank; encrypt=true; TrustServerCertificate=False; HostnameinCertificate=*.database.windows.net; LoginTimeout=30; Authentication=ActiveDirectoryPassword“
und Verbindungseigenschaften:
ConnectionProperties = {„accessToken“: SQLAzureAccessToken, „driver“: „com.microsoft.sqlserver.jdbc.sqlserverDriver“, „hostNameInCertificate“: „*.database.windows.net“, „encrypt“: „true“, „serverCertificate“: „false“, „driver“: „com.microsoft.sqlserver.jdbc.SqlServerDriver"}
Und wir können loslegen:
jdbc_db = spark.read .format („com.microsoft.sqlserver.jdbc.spark“)\ .option („url“, „jdbc:sqlserver: //ourserver.database.windows.net“)\ .option („Datenbankname“, „Unsere Datenbank“)\ .option („accessToken“, SQLAzureAccessToken)\ .option („verschlüsseln“, „true“)\ .option („HostNameInCertificate“, „*.database.windows.net“)\ .load ()
Hybrid cloud was ist das und wie funktioniert es
Gcp for business wofur wird die google cloud platform verwendet