Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ez a cikk bemutatja, hogyan konfigurálhat Microsoft Entra hitelesítést Django-alkalmazásokhoz a mssql-django háttérrendszer használatával. Microsoft Entra hitelesítés szükségtelenné teszi a jelszavak tárolását az alkalmazáskonfigurációban.
Prerequisites
-
Microsoft ODBC Driver 18 for SQL Server (ajánlott). A cikkben szereplő összes hitelesítési mód támogatott Microsoft ODBC Driver 18 SQL Server esetén.
ActiveDirectoryInteractiveaz illesztőprogram verziójától függetlenül csak Windowsos. Ha az ODBC Driver 17-et kell használnia, tekintse meg a módonkénti, legalább 17.x verzióra vonatkozó ODBC-hitelesítési referenciát . - Hozzáférési jogkivonat hitelesítéséhez:
pip install azure-identity.
Hitelesítési módszerek
Konfigurálja az egyes metódusokat úgy, hogy hozzáadja vagy szerkeszti a DATABASES beállítást a Django-projekt fájljában settings.py . A cikkben szereplő példák a teljes DATABASES["default"] blokkot mutatják az egyértelműség érdekében; másolja a megfelelő kulcsokat a meglévő konfigurációba.
mssql-djangokétféleképpen támogatja a Microsoft Entra hitelesítést:
- ODBC-illesztőprogram hitelesítése
OPTIONS["extra_params"]használatával. A háttérrendszer ezt a karakterláncot változatlanul hozzáfűzi az ODBC-kapcsolati sztringhez, így a rendelkezésre állóAuthentication=értékek a telepített Microsoft ODBC Driver for SQL Server illesztőprogramból származnak, nem pedig magától amssql-django-től. - Programozott hozzáférési jogkivonat-hitelesítés a
TOKENbeállításon keresztül. A háttérrendszer a(z)TOKENelemetSQL_COPT_SS_ACCESS_TOKENformában továbbítja az ODBC-illesztőprogramnak, megkerülve az ODBCAuthentication=kulcsszót.
A hitelesítési módszerek áttekintése
| Módszer | Konfigurálás ezzel: | Legjobb a számára |
|---|---|---|
| Hozzáférési jogkivonat | TOKEN |
Fejlesztéshez, rövid élettartamú szkriptekhez vagy egyéni tokenfrissítéssel rendelkező alkalmazásokhoz |
ActiveDirectoryMsi |
extra_params |
Azure-ban üzemeltetett éles alkalmazások (rendszer által hozzárendelt és felhasználó által hozzárendelt felügyelt identitás) |
ActiveDirectoryServicePrincipal |
\ |
Alkalmazásregisztrációk, ha a felügyelt identitás nem érhető el |
ActiveDirectoryIntegrated |
extra_params |
Tartományhoz csatlakoztatott felhasználói környezet |
ActiveDirectoryInteractive |
USER, extra_params |
Felhasználói bejelentkezés többtényezős hitelesítéssel (Windows) |
ActiveDirectoryDefault |
extra_params |
Az ODBC-illesztőprogram alapértelmezett Microsoft Entra hitelesítőadat-láncát használó helyi fejlesztés és alkalmazások |
ActiveDirectoryPassword |
\ |
Csak végső megoldásként használt örökölt forgatókönyvekhez (elavult) |
Note
mssql-django Az 1.7.3-as és újabb verzió elfogadja a Authentication=ActiveDirectoryDefault–OPTIONS["extra_params"] tartományt, ha a telepített Microsoft ODBC Driver for SQL Server támogatja ezt a módot. Ha explicit vezérlésre van szüksége a jogkivonatok beszerzésének és frissítésének viselkedése felett, használja a TOKEN mintát az azure.identity.DefaultAzureCredential osztálysal.
Identitáshozzáférés biztosítása a Azure SQL
Felügyelt identitás- vagy szolgáltatásnév-hitelesítéshez hozzon létre egy adatbázis-felhasználót, és csak az alkalmazás által igényelt szerepköröket adja meg:
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>];
A db_ddladmin rögzített adatbázis-szerepkör csak akkor szükséges, ha az alkalmazás áttelepítéseket futtat. Csak olvasási munkaterhelésekhez a db_datareader elegendő.
Note
FROM EXTERNAL PROVIDERaz SQL-kiszolgálónak meg kell hívnia Microsoft Graph az egyszerű név feloldásához. Ha a kiszolgáló csak Microsoft Entra-hitelesítésre van konfigurálva, vagy más okból nem tudja elérni a Graphot, az utasítás sikertelen lesz a következővel: Msg 33130 (Principal '<name>' could not be found...). Hozza létre manuálisan a felhasználót egy explicit SID megadásával:
CREATE USER [<identity-name>] WITH SID = 0x<sid-hex>, TYPE = E;
Egy felügyelt identitás vagy szolgáltatásnév-identitás esetén a SID-t az identitás alkalmazás- (ügyfél-)azonosítójából származtassa, ne pedig az objektumazonosítójából. Azure SQL szolgáltatásnevekhez és felügyelt identitásokhoz használja az alkalmazásazonosítót, az objektumazonosítót pedig csak a normál Entra-felhasználók számára. Alakítsa át a GUID-t úgy, hogy az első három, kötőjellel elválasztott csoportot bájtonként megfordítja, az utolsó kettőt pedig változatlanul hagyja. Az alkalmazásazonosító 00001111-aaaa-2222-bbbb-3333cccc4444 például SID 0x11110000AAAA2222BBBB3333CCCC4444lesz. A PowerShellben:
$b = ([Guid]"<app-id>").ToByteArray()
"0x" + (($b | ForEach-Object { $_.ToString('X2') }) -join '')
Ha tévedésből az objektumazonosítót használja, a kapcsolatnak sikerül tokent szereznie, de az Azure SQL a(z) Login failed for user '<token-identified principal>' értéket adja vissza, mert nincs olyan adatbázis-felhasználó, amely megfelelne a token appid claimjének.
Ha VIEW ANY COLUMN MASTER KEY DEFINITION permission denied hiba jelenik meg, adjon az identitás számára további hozzáférést az Always Encrypted-forgatókönyvekhez:
GRANT VIEW ANY COLUMN MASTER KEY DEFINITION TO [<identity-name>];
GRANT VIEW ANY COLUMN ENCRYPTION KEY DEFINITION TO [<identity-name>];
Felügyelt identitás hitelesítése (ActiveDirectoryMsi)
Felügyelt identitás használata, ha a Django-alkalmazás egy Azure szolgáltatáson fut, például Azure App Service, Azure Container Apps vagy Azure Virtual Machines. Ez a megközelítés éles környezetekben ajánlott, mert az ODBC-illesztő automatikusan lekéri és frissíti a tokeneket.
Rendszer által hozzárendelt felügyelt identitás:
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",
},
},
}
Felhasználó által hozzárendelt felügyelt identitás:
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 a rendszer által hozzárendelt felügyelt identitás (SAMI) és a felhasználó által hozzárendelt felügyelt identitás (UAMI) ODBC-módja. UAMI esetén az ODBC-illesztőprogram elvárja, hogy a UID azonosítsa a felügyelt identitást: Azure App Service vagy Azure Container Instance esetén az ügyfélazonosítót, egyébként pedig az objektumazonosítót használja. Helyezze a(z) UID elemet a(z) extra_params elembe, mert a(z) extra_params közvetlenül az ODBC-illesztőhöz kerül.
Ha felügyelt identitást használ, manuálisan hozza létre a tesztadatbázist, és az egységtesztek futtatásakor adja át a(z) --keepdb értéket.
Hitelesítés szolgáltatásnévvel (ActiveDirectoryServicePrincipal)
Használjon Microsoft Entra alkalmazásregisztrációt (szolgáltatásnév), ha az alkalmazás felhasználói környezet nélkül fut, és a felügyelt identitás nem érhető el.
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",
},
},
}
Ne kódolja az ügyfél titkos kulcsát a fájlban settings.py. Használjon környezeti változókat vagy titkos kulcskezelőt, például Azure Key Vault a hitelesítő adatok futásidőben történő megadásához.
Integrált hitelesítés (ActiveDirectoryIntegrated)
Használjon integrált hitelesítést, amikor a Django-folyamat tartományhoz csatlakoztatott felhasználói környezetben fut, és azt szeretné, hogy az ODBC-illesztő beváltsa ezt a Windows vagy Kerberos-identitást Microsoft Entra hitelesítéshez.
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",
},
},
}
Az ODBC-hitelesítés referenciaanyaga dokumentálja ezt a módot Windows rendszeren, valamint Linux- vagy macOS-rendszeren az ODBC Driver 17.6-os és újabb verzióival, összevont környezetekhez.
Interaktív hitelesítés (ActiveDirectoryInteractive)
Használjon interaktív hitelesítést a helyi felhasználói bejelentkezéshez, ha azt szeretné, hogy az illesztőprogram hitelesítő adatokat kérjen, és kezelje a többtényezős hitelesítést.
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",
},
},
}
A fő ODBC-hitelesítési referencia-dokumentumok ActiveDirectoryInteractive csak Windowsra vonatkozóként hivatkoznak rá. Ha azt tervezi, hogy egy másik platformon használja, először ellenőrizze a viselkedést a pontos illesztőprogram-verzióval.
Alapértelmezett hitelesítőadat-lánc hitelesítése (ActiveDirectoryDefault)
Ezt a módot akkor használja, ha azt szeretné, hogy az ODBC-illesztő alkalmazza az alapértelmezett Microsoft Entra hitelesítőadat-láncot.
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 Az 1.7.3-s és újabb verziók átengedik ezt a módot az ODBC-illesztőnek. Ha explicit vezérlésre van szüksége a hitelesítő adatok forrásának vagy a jogkivonat frissítésének viselkedése felett, használjon hozzáférési jogkivonat-hitelesítést.
Hozzáférési jogkivonat-hitelesítés (TOKEN)
Használja TOKEN, ha azt szeretné, hogy a Python-kód saját maga kérje le a Microsoft Entra tokent.
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",
},
},
}
Ez az elérési út bármely Python-hitelesítő osztállyal működik, beleértve a DefaultAzureCredential, ManagedIdentityCredential és ClientSecretCredential elemeket.
A beolvasott settings.py hozzáférési jogkivonatok kiértékelése a folyamat indításakor történik, és általában 60–90 perc elteltével jár le. Ha a Django-folyamat a jogkivonat élettartamánál hosszabb ideig marad életben, frissítenie kell a jogkivonatot az alkalmazáskódban. A legtöbb hosszan futó, éles környezetben futó alkalmazáshoz olyan ODBC-illesztőprogram-módot használjon, amely automatikusan frissíti a tokeneket, például ActiveDirectoryMsi vagy ActiveDirectoryServicePrincipal.
Jelszó-hitelesítés (ActiveDirectoryPasswordelavult)
Important
Az ActiveDirectoryPassword hitelesítési lehetőség (Microsoft Entra ID jelszóhitelesítés) elavult a Microsoft SQL-illesztőprogramokban. Ez a magas kockázatú hitelesítési folyamat nem kompatibilis a kötelező Microsoft Entra többtényezős hitelesítéssel (MFA), és előfordulhat, hogy nem működik olyan bérlőkben, ahol az MFA kényszerítve van. Tervezze meg a migrálást egy másik Microsoft Entra hitelesítési módszerre.
A Microsoft Entra ID jelszóhitelesítése a OAuth 2.0 Resource Owner Password Credentials (ROPC) engedélyezési folyamaton alapul, amely lehetővé teszi, hogy egy alkalmazás a felhasználó jelszavának közvetlen kezelésével jelentkeztesse be a felhasználót.
Microsoft azt javasolja, hogy ne használja a ROPC-folyamatot, mert nem kompatibilis az MFA-val. A legtöbb forgatókönyvben biztonságosabb alternatívák érhetők el és ajánlottak. Ez a folyamat nagy fokú bizalmat igényel az alkalmazásban, és olyan kockázatokat hordoz, amelyek más folyamatokban nem jelennek meg. Ezt a folyamatot csak akkor használja, ha a biztonságosabb folyamatok nem életképesek. A Microsoft távolodik ettől a magas kockázatú hitelesítési folyamattól, hogy megvédje a felhasználókat a rosszindulatú támadásoktól. További információ: Kötelező többtényezős hitelesítés tervezése az Azure-ban.
Ha egy felhasználó jelen van a bejelentkezéskor, használja az ActiveDirectoryInteractive vagy az ActiveDirectoryIntegrated hitelesítést, hogy a bejelentkezett felhasználó és a feltételes hozzáférési szabályzat naplózási útvonal attribútumai érvényesek legyenek.
Felügyelet nélküli szolgáltatásközi forgatókönyvek esetén kövesse a Microsoft Entra szolgáltatásfiókra vonatkozó útmutatást:
- Ha az alkalmazás Azure infrastruktúrán fut, használja az ActiveDirectoryMSI -t (vagy egyes illesztőprogramokban az ActiveDirectoryManagedIdentitást). A felügyelt identitások kiküszöbölik a titkos kódok és tanúsítványok karbantartásának és elforgatásának többletterhelését.
- Ha a felügyelt identitás nem érhető el (például az alkalmazás Azure kívül fut), használja az ActiveDirectoryServicePrincipal parancsot. Ahol az illesztőprogram támogatja, az ügyféltanúsítványt előnyben részesítse egy titkos ügyfélkóddal szemben. Tanúsítvány esetén a titkos kulcs az ügyfélen marad, és csak egy aláírt állítás lesz elküldve Microsoft Entra az ügyfél hitelesítéséhez. Ha a kulcs hardverben (például TPM-ben vagy HSM-ben) van tárolva, vagy nem portolhatóként van megjelölve, akkor nem másolható sztringként, ahogyan az ügyféltitkok is.
- Ne használjon Microsoft Entra felhasználói fiókot szolgáltatásfiókként.
Ha örökölt forgatókönyvhöz kell használnia, konfigurálja explicit módon:
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",
},
},
}
Kapcsolódó tartalom
- Ajánlott biztonsági eljárások az mssql-django használatához
- mssql-django konfigurációs referencia
- Az mssql-django kapcsolati beállításai
- SQL Servert használó Django-alkalmazás üzembe helyezése az Azure App Service-be
- A Microsoft Entra ID használata az ODBC-illesztőprogrammal
- A Microsoft Entra-hitelesítés konfigurálása és kezelése az Azure SQL-lel
- Microsoft Entra hitelesítési wiki
- Mindig mssql-django titkosítva