Ich muss die Anmeldeinformationen (Integrierte Windows-Authentifizierung) von einer Django-Website auf IIS an einen Back-End-SQL-Server weitergeben, damit dieser im richtigen Benutzerkontext ausgeführt wird.
So sieht mein Setup bisher aus:
- Ausführen von SQL Server
sql_sever.domain.com
unter einem Dienstkontodomain\svc_sqlserver
- Ausführen einer Django-Website unter
app_server.domain.com
Verwendung von IIS unter einem Dienstkontodomain\svc_appserver
mit Windows-Authentifizierung und ASP.Net-Identitätswechsel (Provider ist auf eingestelltNegotiate:Kerberos -> Negotiate -> NTLM
) mituseAppPoolCredentials=True
- Herstellen einer Verbindung zum SQL-Server von Django aus mithilfe der Windows-Authentifizierung durch Festlegen
Trusted_Connection=yes
der Verbindung Konfigurierte SPNs für die Kerberos-Authentifizierung für
domain\svc_sqlserver
unddomain\svc_appserver
wie folgt:setspn -a HTTP/app_server domain\svc_appserver setspn -a HTTP/app_server.domain.com domain\svc_appserver setspn -a MSSQLSvc/sql_server.domain.com:PORT domain\svc_sqlserver setspn -a MSSQLSvc/sql_server.domain.com:INSTANCE domain\svc_sqlserver setspn -a MSSQLSvc/sql_server.domain.com domain\svc_sqlserver
Vertrauenswürdig sowohl
svc_sqlserver
fürsvc_appserver
die Delegation anMSSQLSvc
Dienste als auch zusätzlich für diedomain\svc_appserver
von mir hinzugefügtenHTTP
Dienste (aus der obigen Liste)
Ergebnis:
- Die Kerberos-Authentifizierung funktioniert auf SQL Server. Bestätigt durch einen Blick aufAuthentifizierungsschema der verbundenen Benutzer
- Kerberos-Authentifizierung funktioniert auf der Django-Website. Bestätigt durch Überprüfung
WWW-Authenticate
des Antwortheaders undAuthorization
des Anforderungsheaders (Negotiate
wird korrekt verwendet) - SQL Server läuft nur im Kontext,
domain\svc_appserver
wenn er laufen soll unterdomain\remote_user
Ich arbeite jetzt schon seit über einer Woche daran, aber ich kann einfach nicht herausfinden, wie ich den Kontext eines authentifizierten Benutzers von IIS an SQL Server übergebe. Ich habe Hunderte von Links durchgesehen, die ich online gefunden habe, und bin mir an diesem Punkt nicht sicher, was ich tun soll.
Gibt es sonst noch etwas, das ich übersehen habe? Gibt es in Django eine Möglichkeit, den Kontext des Benutzers festzulegen, bevor eine Verbindung zur Datenbank hergestellt wird? Wenn mir jemand helfen kann, wäre ich sehr dankbar. Danke!
Ich benutze:
- Django 2.0.7
- Django-Pyodbc-Azure
- Python 3.6.5
- IIS 10, SQL Server 2014