背景:
ASP.Net MVC 网站。托管在 IIS7、Intranet 上。
数据库:SQL Server。通过 NHibernate 访问。
在连接字符串中,访问权限设置为集成安全性:SSPI
。
(数据库的权限是基于 Active-Directory 的。)
简而言之,这是一个典型的双跳情况,
我需要将客户端的凭据传递到 IIS,然后从 IIS 传递到 SQL Server。
问题:
问题是蓝屏死机,并出现错误:
用户“MyDomain\UserThatRunsAppPool”登录失败。
我尝试做的事情来解决问题:
- 配置身份验证以仅启用 Windows 身份验证
和 ASP.NET 模拟 - 将 Windows 身份验证
Provider
设置为Negotiate:Kerberos
(禁用内核模式身份验证后) - 确保 UserThatRunsAppPool 的委托(delegate)设置为:
'信任用户对 Active Directory 中任何服务的委派(仅限 Kerberos)
' - 从
Application_BeginRequest() 移动 NHibernate SessionFactory 创建
到Session_Start()
我尝试解决问题的成功程度:
完全没有。
编辑:
我还尝试将 IIS 服务器的委派设置为“信任用户对任何服务的委派(仅限 Kerberos)
”(在 Active Directory 中)。
最佳答案
In short, this is a typical double-hop situation,
where I need to pass client's credentials to IIS, and from IIS to SQL Server.
您遇到了“委托(delegate)”问题。如果您想保持理智,请更改连接字符串以使用 SQL 用户名 + 密码而不是 SSPI。
如果您感觉两周的调试令人沮丧并与域管理员争吵,请阅读 Fun with the Kerberos Delegation Web Site .
关于sql-server - 使用 ASP.Net 网站和 NHibernate 进行双跳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11176400/