模拟远程服务说用户'NT Authority \ Anonymous Logon'登录失败

时间:2013-10-31 08:42:12

标签: c# sql-server impersonation windows-identity

在访问我想访问数据库的数据库时,我想要一个服务 使用呼叫身份凭证。

在访问特定数据库之前,我通过

进行模拟
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。

运行服务的帐户是域帐户。

2 个答案:

答案 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并使用匿名身份验证。

Default

要设置Windows身份验证,请使用Web平台安装程序并搜索“Windows身份验证”。安装完成后,为您的站点启用“Windows身份验证”身份验证。

After setup and enable

有关详细信息,请参阅Configure Windows Authentication (IIS 7)

您也可以查看右侧的相关问题,尤其是 SQL Server returns error "Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'." in Windows application