在访问我想访问数据库的数据库时,我想要一个服务 使用呼叫身份凭证。
在访问特定数据库之前,我通过
进行模拟var winId = HttpContext.Current.User.Identity as WindowsIdentity;
var ctx = winId.Impersonate();
//Access Database
ctx.Undo();
当服务在我的PC上本地运行时,此方案可以正常工作。但是,当部署在另一台远程PC上时,我收到错误:
用户“NT Authority \ Anonymous Logon”登录失败“
一旦尝试访问数据库。
DBAdmin告诉我,SQL Server有一个SPN。
运行服务的帐户是域帐户。
答案 0 :(得分:9)
您最常遇到的问题是Delegation
,而不是Impersonation
。
我假设您的生产环境中实际上有Web浏览器,IIS服务器和SQL Server都在不同的计算机上。
简单模拟不支持Multi-Hop
。
要支持Multi-Hop
,您需要使用Kerberos
设置Delegation
。您必须在SPN
上设置Active Directory
条记录。完成后,您还需要为AD上的IIS计算机启用Delgation
。
简而言之,代表团是一个巨大的蠕虫病毒。
答案 1 :(得分:3)
您必须确保IIS提供“Windows身份验证”身份验证并启用它。默认情况下,未安装WindowsAuthenticationModule并使用匿名身份验证。
要设置Windows身份验证,请使用Web平台安装程序并搜索“Windows身份验证”。安装完成后,为您的站点启用“Windows身份验证”身份验证。
有关详细信息,请参阅Configure Windows Authentication (IIS 7)。
您也可以查看右侧的相关问题,尤其是 SQL Server returns error "Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'." in Windows application