我正在尝试运行一个连接到 SQL Server 的 django 网站,使用带有 Windows 身份验证的 IIS。
IIS 服务器和 SQL 服务器位于同一域下的不同计算机上,即iis_machine.example.com和sql_machine.example.com
我想要实现的目标:
- 模拟访问托管在 IIS 上的 django 网站的远程用户,以便将其 Windows 凭据传递给 SQL Server 进行身份验证。
我迄今为止尝试过:
将其添加到我的 web.config 文件中以进行模拟
<system.web> <identity impersonate="true" /> </system.web>
启用 Windows 身份验证并设置应用程序池(django_web)如下所示
添加IIS APPPOOL\django_web到 SQL Server安全\登录
结果:
- 当我访问 django 网站时,IIS 会提示用户输入其 Windows 凭据,然后我就可以成功登录
如果用户登录后尝试访问 SQL Server
案例一。IIS、SQL Server 位于不同的机器上:SQL Server 身份验证失败,显示“用户“domain\MACHINENAME$”登录失败‘
案例二。IIS、SQL Server 在同一台机器上,SQL Server 身份验证成功,但使用的身份验证凭据IIS APPPOOL\django_web不是域\远程用户
我知道此设置涉及一些 Kerberos 技巧。不幸的是,我只是一名程序员,对 Kerberos 的工作原理不太熟悉。如果有人在这方面有经验,可以解释一下此设置的工作原理,我将不胜感激。谢谢!
我在用:
- IIS 10
- SQL 服务器 2014
- django 2.0.7
- Python 3.6.5
- Windows 8/10
答案1
您必须配置django_web
允许委派给 SQL 服务器的帐户。我想既然如此,IIS APPPOOL\django_web
您实际上需要在 Active Directory 中的计算机帐户上进行配置。或者,您可以为其创建一个自定义服务帐户。