Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In dit artikel wordt uitgelegd hoe u Microsoft Entra verificatie configureert voor Django-toepassingen met behulp van de mssql-django back-end. Microsoft Entra verificatie elimineert de noodzaak om wachtwoorden op te slaan in de configuratie van uw toepassing.
Prerequisites
-
Microsoft ODBC-stuurprogramma 18 voor SQL Server (aanbevolen). Alle verificatiemodi in dit artikel worden ondersteund met Microsoft ODBC-stuurprogramma 18 voor SQL Server.
ActiveDirectoryInteractiveis alleen voor Windows, ongeacht de stuurprogrammaversie. Als u ODBC-stuurprogramma 17 moet gebruiken, raadpleegt u de naslaginformatie over ODBC-verificatie voor de minimale 17.x-versie per modus. - Voor verificatie van toegangstokens:
pip install azure-identity.
Verificatiemethoden
Configureer elke methode door de DATABASES instelling toe te voegen of te bewerken in het bestand van settings.py uw Django-project. In de voorbeelden in dit artikel ziet u het volledige DATABASES["default"] blok voor duidelijkheid. Kopieer de relevante sleutels naar uw bestaande configuratie.
mssql-djangoondersteunt Microsoft Entra verificatie op twee manieren:
- ODBC-stuurprogrammaverificatie via
OPTIONS["extra_params"]. De back-end voegt deze tekenreeks toe aan de ODBC-verbindingsreeks ongewijzigd, zodat de beschikbareAuthentication=waarden afkomstig zijn van het geïnstalleerde Microsoft ODBC-stuurprogramma voor SQL Server, niet vanmssql-djangozichzelf. - Programmatische toegangstokenverificatie via de
TOKENinstelling. De backend geeftTOKENalsSQL_COPT_SS_ACCESS_TOKENdoor aan het ODBC-stuurprogramma, waardoor het ODBC-trefwoordAuthentication=wordt omzeild.
Verificatiemethoden in één oogopslag
| Method | Configureren met | Ideaal voor |
|---|---|---|
| Toegangstoken | TOKEN |
Ontwikkelomgevingen, kortdurende scripts of apps met aangepaste tokenvernieuwing |
ActiveDirectoryMsi |
extra_params |
Azure gehoste productie-apps (door het systeem toegewezen en door de gebruiker toegewezen beheerde identiteit) |
ActiveDirectoryServicePrincipal |
USER, PASSWORD, extra_params |
App-registraties wanneer beheerde identiteit niet beschikbaar is |
ActiveDirectoryIntegrated |
extra_params |
Aan een domein gekoppelde gebruikerscontext |
ActiveDirectoryInteractive |
USER, extra_params |
Gebruikersaanmelding met meervoudige verificatie (Windows) |
ActiveDirectoryDefault |
extra_params |
Lokale ontwikkeling en apps die gebruikmaken van de standaardreferentieketen van het ODBC-stuurprogramma Microsoft Entra |
ActiveDirectoryPassword |
USER, PASSWORD, extra_params |
Alleen als laatste redmiddel voor verouderde scenario's (verouderd) |
Note
mssql-django 1.7.3 en latere versies accepteren Authentication=ActiveDirectoryDefault tot en met OPTIONS["extra_params"] wanneer het geïnstalleerde Microsoft ODBC-stuurprogramma voor SQL Server deze modus ondersteunt. Als u expliciet controle nodig hebt over het gedrag van het verkrijgen en vernieuwen van tokens, gebruikt u het TOKEN-patroon met de azure.identity.DefaultAzureCredential klasse.
De identiteitstoegang verlenen in Azure SQL
Voor verificatie van beheerde identiteit of service-principal maakt u een databasegebruiker en verleent u alleen de rollen die uw toepassing nodig heeft:
CREATE USER [<identity-name>] FOR EXTERNAL PROVIDER;
ALTER ROLE db_datareader ADD MEMBER [<identity-name>];
ALTER ROLE db_datawriter ADD MEMBER [<identity-name>];
ALTER ROLE db_ddladmin ADD MEMBER [<identity-name>];
De db_ddladmin vaste databaserol is alleen vereist als de toepassing migraties uitvoert. Voor workloads met alleen-leestoegang is db_datareader voldoende.
Note
FROM EXTERNAL PROVIDERvereist dat de SQL-server Microsoft Graph aanroept om de principal-naam op te lossen. Als de server is geconfigureerd voor Microsoft Entra-alleen-verificatie of Graph anderszins niet kan bereiken, mislukt de instructie met Msg 33130 (Principal '<name>' could not be found...). Maak de gebruiker in plaats daarvan handmatig aan door een expliciete SID op te geven:
CREATE USER [<identity-name>] WITH SID = 0x<sid-hex>, TYPE = E;
Voor een beheerde identiteit of service-principal moet u de SID afleiden van de toepassings-id van de identiteit (client), niet van de object-id. Azure SQL gebruikt de toepassings-id voor service-principals en beheerde identiteiten en de object-id alleen voor gewone Entra-gebruikers. Zet de GUID om door de eerste drie door koppeltekens gescheiden groepen byte voor byte om te keren en de laatste twee ongewijzigd te laten. De toepassings-id 00001111-aaaa-2222-bbbb-3333cccc4444 wordt bijvoorbeeld SID 0x11110000AAAA2222BBBB3333CCCC4444. In PowerShell:
$b = ([Guid]"<app-id>").ToByteArray()
"0x" + (($b | ForEach-Object { $_.ToString('X2') }) -join '')
Als u per ongeluk de object-id gebruikt, slaagt de verbinding erin een token te verkrijgen, maar Azure SQL retourneert Login failed for user '<token-identified principal>' omdat er geen database-principal overeenkomt met de claim van appid het token.
Als u een VIEW ANY COLUMN MASTER KEY DEFINITION permission denied-fout ziet, verleen de identiteit extra toegang voor Always Encrypted-scenario's:
GRANT VIEW ANY COLUMN MASTER KEY DEFINITION TO [<identity-name>];
GRANT VIEW ANY COLUMN ENCRYPTION KEY DEFINITION TO [<identity-name>];
Verificatie van beheerde identiteit (ActiveDirectoryMsi)
Gebruik een beheerde identiteit wanneer uw Django-app wordt uitgevoerd op een Azure-service, zoals Azure App Service, Azure Container Apps of Azure Virtuele Machines. Deze methode wordt aanbevolen voor productieomgevingen omdat het ODBC-stuurprogramma automatisch tokens verkrijgt en vernieuwt.
Door het systeem toegewezen beheerde identiteit:
DATABASES = {
"default": {
"ENGINE": "mssql",
"NAME": "<your-database>",
"HOST": "<your-server>.database.windows.net",
"PORT": "1433",
"OPTIONS": {
"driver": "ODBC Driver 18 for SQL Server",
"extra_params": "Authentication=ActiveDirectoryMsi",
},
},
}
Door de gebruiker toegewezen beheerde identiteit:
DATABASES = {
"default": {
"ENGINE": "mssql",
"NAME": "<your-database>",
"HOST": "<your-server>.database.windows.net",
"PORT": "1433",
"OPTIONS": {
"driver": "ODBC Driver 18 for SQL Server",
"extra_params": (
"Authentication=ActiveDirectoryMsi;"
"UID=<managed-identity-client-id-or-object-id>"
),
},
},
}
ActiveDirectoryMsi is de ODBC-modus voor zowel door het systeem toegewezen beheerde identiteit (SAMI) als door de gebruiker toegewezen beheerde identiteit (UAMI). Voor UAMI verwacht UID het ODBC-stuurprogramma de beheerde identiteit te identificeren: gebruik de client-id voor Azure App Service of Azure Container Instance, gebruik anders de object-id. Plaats dat UID in extra_params, omdat extra_params rechtstreeks aan het ODBC-stuurprogramma wordt doorgegeven.
Als u een beheerde identiteit gebruikt, maak de testdatabase dan handmatig aan en geef --keepdb op wanneer u unit-tests uitvoert.
Service-principalauthenticatie (ActiveDirectoryServicePrincipal)
Gebruik een Microsoft Entra app-registratie (service-principal) als uw app zonder gebruikerscontext draait en de beheerde identiteit niet beschikbaar is.
DATABASES = {
"default": {
"ENGINE": "mssql",
"NAME": "<your-database>",
"USER": "<application-client-id>",
"PASSWORD": "<client-secret>",
"HOST": "<your-server>.database.windows.net",
"PORT": "1433",
"OPTIONS": {
"driver": "ODBC Driver 18 for SQL Server",
"extra_params": "Authentication=ActiveDirectoryServicePrincipal",
},
},
}
Codeer geen clientgeheimen in settings.py. Gebruik omgevingsvariabelen of een geheimbeheerder, zoals Azure Key Vault om tijdens runtime referenties op te geven.
Geïntegreerde verificatie (ActiveDirectoryIntegrated)
Gebruik geïntegreerde verificatie wanneer het Django-proces wordt uitgevoerd onder een gebruikerscontext die lid is van een domein en u wilt dat het ODBC-stuurprogramma die Windows- of Kerberos-identiteit voor Microsoft Entra-verificatie inwisselt.
DATABASES = {
"default": {
"ENGINE": "mssql",
"NAME": "<your-database>",
"HOST": "<your-server>.database.windows.net",
"PORT": "1433",
"OPTIONS": {
"driver": "ODBC Driver 18 for SQL Server",
"extra_params": "Authentication=ActiveDirectoryIntegrated",
},
},
}
De ODBC-verificatie verwijst naar deze modus op Windows en op Linux of macOS met ODBC-stuurprogramma 17.6 en hoger voor federatieve omgevingen.
Interactieve verificatie (ActiveDirectoryInteractive)
Gebruik interactieve verificatie voor aanmelding van lokale gebruikers wanneer u wilt dat het stuurprogramma om referenties vraagt en meervoudige verificatie afhandelt.
DATABASES = {
"default": {
"ENGINE": "mssql",
"NAME": "<your-database>",
"USER": "<user@email.com>",
"HOST": "<your-server>.database.windows.net",
"PORT": "1433",
"OPTIONS": {
"driver": "ODBC Driver 18 for SQL Server",
"extra_params": "Authentication=ActiveDirectoryInteractive",
},
},
}
De belangrijkste ODBC-referentiedocumenten voor verificatie beschrijven ActiveDirectoryInteractive als alleen voor Windows. Als u van plan bent om het te gebruiken op een ander platform, valideert u eerst het gedrag met uw exacte stuurprogrammaversie.
Authenticatie met de standaardketen voor aanmeldingsgegevens (ActiveDirectoryDefault)
Gebruik deze modus als u wilt dat het ODBC-stuurprogramma de standaard-Microsoft Entra referentieketen toepast.
DATABASES = {
"default": {
"ENGINE": "mssql",
"NAME": "<your-database>",
"HOST": "<your-server>.database.windows.net",
"PORT": "1433",
"OPTIONS": {
"driver": "ODBC Driver 18 for SQL Server",
"extra_params": "Authentication=ActiveDirectoryDefault",
},
},
}
mssql-django 1.7.3 en latere versies geven deze modus door aan het ODBC-stuurprogramma. Als u expliciet controle nodig hebt over het gedrag van referentiebron of tokenvernieuwing, gebruikt u verificatie van toegangstokens.
Verificatie van toegangstokens (TOKEN)
Gebruik TOKEN dit als u wilt dat uw Python code het Microsoft Entra token zelf verkrijgt.
from azure.identity import DefaultAzureCredential
credential = DefaultAzureCredential()
token = credential.get_token("https://database.windows.net/.default").token
DATABASES = {
"default": {
"ENGINE": "mssql",
"NAME": "<your-database>",
"HOST": "<your-server>.database.windows.net",
"PORT": "1433",
"TOKEN": token,
"OPTIONS": {
"driver": "ODBC Driver 18 for SQL Server",
},
},
}
Dit pad werkt met elke Python referentieklasse, inclusief DefaultAzureCredential, ManagedIdentityCredentialen ClientSecretCredential.
Toegangstokens die in settings.py worden opgehaald, worden eenmaal geëvalueerd bij het starten van het proces en verlopen meestal na 60 tot 90 minuten. Als uw Django-proces langer in leven blijft dan de levensduur van het token, moet u het token vernieuwen in de toepassingscode. Gebruik voor de meeste langlopende productie-apps een ODBC-stuurprogrammamodus waarmee tokens automatisch worden vernieuwd, zoals ActiveDirectoryMsi of ActiveDirectoryServicePrincipal.
Wachtwoordverificatie (ActiveDirectoryPassword, afgeschaft)
Important
De optie ActiveDirectoryPassword-verificatie (Microsoft Entra ID wachtwoordverificatie) is afgeschaft in de Microsoft SQL-stuurprogramma's. Deze verificatiestroom met een hoog risico is niet compatibel met verplichte Microsoft Entra multifactorauthenticatie (MFA) en functioneert mogelijk niet in tenants waar MFA wordt afgedwongen. Plan om te migreren naar een andere Microsoft Entra verificatiemethode.
Microsoft Entra ID wachtwoordverificatie is gebaseerd op de OAuth 2.0 ROPC-toekenning (Resource Owner Password Credentials), waarmee een toepassing zich kan aanmelden bij de gebruiker door het wachtwoord rechtstreeks te verwerken.
Microsoft raadt u aan de ROPC-stroom niet te gebruiken omdat deze niet compatibel is met MFA. In de meeste scenario's zijn veiligere alternatieven beschikbaar en aanbevolen. Deze stroom vereist een hoge mate van vertrouwen in de toepassing en brengt risico's met zich mee die niet aanwezig zijn in andere stromen. Gebruik deze stroom alleen als veiligere stromen niet haalbaar zijn. Microsoft gaat weg van deze verificatiestroom met een hoog risico om gebruikers te beschermen tegen schadelijke aanvallen. Zie Planning voor verplichte meervoudige verificatie voor Azure voor meer informatie.
Wanneer een gebruiker aanwezig is bij het aanmelden, gebruikt u ActiveDirectoryInteractive- of ActiveDirectoryIntegrated-verificatie, zodat de kenmerken van het audittrailbeleid voor de aangemelde gebruiker en het beleid voor voorwaardelijke toegang van toepassing zijn.
Voor service-naar-servicescenario's zonder toezicht volgt u de richtlijnen voor het Microsoft Entra serviceaccount:
- Als uw toepassing wordt uitgevoerd op Azure infrastructuur, gebruikt u ActiveDirectoryMSI (of ActiveDirectoryManagedIdentity in sommige stuurprogramma's). Beheerde identiteiten elimineren de overhead van het onderhouden en roteren van geheimen en certificaten.
- Als beheerde identiteit niet beschikbaar is (de toepassing wordt bijvoorbeeld buiten Azure uitgevoerd), gebruikt u ActiveDirectoryServicePrincipal. Als het stuurprogramma dit ondersteunt, geef dan de voorkeur aan een clientcertificaat boven een clientgeheim. Met een certificaat blijft de persoonlijke sleutel op de client staan en wordt alleen een ondertekende assertie verzonden naar Microsoft Entra om de client te verifiëren. Als de sleutel is opgeslagen in hardware (zoals een TPM of HSM) of als niet-exporteerbaar is gemarkeerd, kan deze niet worden gekopieerd als een tekenreeks zoals een clientgeheim dat kan.
- Gebruik geen Microsoft Entra gebruikersaccount als een serviceaccount.
Als u dit moet gebruiken voor een verouderd scenario, configureert u het expliciet:
DATABASES = {
"default": {
"ENGINE": "mssql",
"NAME": "<your-database>",
"USER": "<user@email.com>",
"PASSWORD": "<your-password>",
"HOST": "<your-server>.database.windows.net",
"PORT": "1433",
"OPTIONS": {
"driver": "ODBC Driver 18 for SQL Server",
"extra_params": "Authentication=ActiveDirectoryPassword",
},
},
}
Verwante inhoud
- Aanbevolen beveiligingsprocedures voor mssql-django
- naslaginformatie voor mssql-django-configuratie
- Verbindingsopties voor mssql-django
- Een Django-app met SQL Server implementeren in Azure App Service
- Microsoft Entra-id gebruiken met het ODBC-stuurprogramma
- Azure SQL configureren en beheren met Microsoft Entra-verificatie
- wiki voor Microsoft Entra verificatie
- Always Encrypted met mssql-django