Preciso passar as credenciais (Autenticação Integrada do Windows) de um site Django no IIS para um servidor SQL back-end para que ele seja executado no contexto de usuário adequado.
É assim que minha configuração parece até agora:
- Executando o SQL Server em
sql_sever.domain.com
uma conta de serviçodomain\svc_sqlserver
- Executando o site Django
app_server.domain.com
usando IIS em uma conta de serviçodomain\svc_appserver
com autenticação do Windows e representação ASP.Net (provedores está definido comoNegotiate:Kerberos -> Negotiate -> NTLM
) comuseAppPoolCredentials=True
- Conectando-se ao servidor SQL do Django usando autenticação do Windows configurando
Trusted_Connection=yes
a conexão SPNs configurados para autenticação Kerberos para
domain\svc_sqlserver
edomain\svc_appserver
como segue: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
Confiável tanto
svc_sqlserver
parasvc_appserver
delegação deMSSQLSvc
serviços quanto para serviçosdomain\svc_appserver
adicionadosHTTP
(da lista acima)
Resultado:
- A autenticação Kerberos funciona no SQL Server. Confirmado olhandoesquema de autenticação de usuários conectados
- A autenticação Kerberos funciona no site Django. Confirmado inspecionando
WWW-Authenticate
o cabeçalho de resposta eAuthorization
o cabeçalho de solicitação (Negotiate
está sendo usado corretamente) - O servidor SQL é executado apenas no contexto de
domain\svc_appserver
quando deveria estar sendo executadodomain\remote_user
Estou trabalhando nisso há mais de uma semana, mas não consigo descobrir como passar o contexto do usuário autenticado do IIS para o SQL Server. Passei por centenas de links que encontrei on-line e não tenho certeza do que fazer neste momento.
Há mais alguma coisa que estou perdendo? Existe alguma maneira no Django de definir o contexto do usuário antes de estabelecer conexão com o banco de dados? Se alguém puder ajudar, eu realmente aprecio. Obrigado!
estou a usar:
- Django2.0.7
- Django-pyodbc-azure
- Pitão 3.6.5
- IIS 10, SQL Server 2014