我需要將憑證(整合 Windows 驗證)從 IIS 上的 django 網站傳遞到後端 SQL 伺服器,以便它在正確的使用者上下文下運行。
到目前為止我的設定是這樣的:
sql_sever.domain.com
在服務帳戶下執行 SQL Serverdomain\svc_sqlserver
app_server.domain.com
在具有 Windows 驗證和 ASP.Net 模擬的服務帳戶下使用 IIS執行 Django 網站domain\svc_appserver
(提供者設定為Negotiate:Kerberos -> Negotiate -> NTLM
)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 Server 2014