Мне нужно передать учетные данные (встроенную аутентификацию Windows) с веб-сайта django в IIS на внутренний сервер SQL, чтобы он работал в надлежащем пользовательском контексте.
Так выглядит моя установка :
- Запуск SQL Server на
sql_sever.domain.com
под учетной записью службы domain\svc_sqlserver
- Запуск веб-сайта Django на
app_server.domain.com
с использованием IIS под учетной записью службы domain\svc_appserver
с аутентификацией Windows и олицетворением ASP.Net (для провайдеров установлено значение Negotiate:Kerberos -> Negotiate -> NTLM
) с useAppPoolCredentials=True
- Подключение к серверу SQL из django с использованием аутентификации Windows путем установки
Trusted_Connection=yes
в соединении
Сконфигурированные имена SPN для аутентификации Kerberos как для 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
используется правильно)
- Сервер Sql работает только в контексте
domain\svc_appserver
, когда он должен работать под domain\remote_user
Я работаю над этим уже больше недели, но я не могу понять, как передать контекст аутентифицированного пользователя из IIS в SQL Server. Я просмотрел сотни ссылок, которые нашел в Интернете, и я не уверен, что делать на этом этапе.
Есть что-то еще, что я пропускаю? Есть ли способ в Django установить контекст пользователя перед установлением соединения с базой данных? Если кто-то может помочь, я был бы очень признателен. Спасибо!
Я использую :