我需要将凭据(集成 Windows 身份验证)从 IIS 上的 django 网站传递到后端 SQL 服务器,以便它在适当的用户上下文中运行。
到目前为止我的设置是这样的:
sql_sever.domain.com
在服务帐户下运行 SQL Serverdomain\svc_sqlserver
app_server.domain.com
使用 IIS 在服务帐户下domain\svc_appserver
使用 Windows 身份验证和 ASP.Net 模拟(提供程序设置为Negotiate:Kerberos -> Negotiate -> NTLM
)运行 Django 网站useAppPoolCredentials=True
Trusted_Connection=yes
通过在连接中设置,使用 Windows 身份验证从 django 连接到 SQL 服务器为 Kerberos 身份验证配置的 SPN
domain\svc_sqlserver
如下domain\svc_appserver
: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
信任
svc_sqlserver
并svc_appserver
委托MSSQLSvc
服务,另外还domain\svc_appserver
添加了HTTP
服务(来自上面的列表)
结果:
- Kerberos 身份验证在 SQL Server 上有效。通过查看已连接用户的身份验证方案
- Kerberos 身份验证在 Django 网站上有效。通过检查
WWW-Authenticate
响应标头和Authorization
请求标头确认(Negotiate
正在正确使用) domain\svc_appserver
SQL Server 仅在其应运行的上下文中运行domain\remote_user
我已经为此工作了一个多星期,但我还是搞不清楚如何将经过身份验证的用户上下文从 IIS 传递到 SQL Server。我浏览了在线找到的数百个链接,但我不知道现在该怎么做。
我还遗漏了什么吗?在 Django 中,有没有办法在建立与数据库的连接之前设置用户的上下文?如果有人能帮忙,我将不胜感激。谢谢!
我在用着:
- django 2.0.7
- django-pyodbc-azure
- Python 3.6.5
- IIS 10,SQL 服务器 2014