5

我有一个服务,我想在访问数据库时使用我想访问数据库以使用调用身份凭证。

在访问特定数据库之前,我通过以下方式进行模拟

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。

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

4

2 回答 2

10

您最有可能遇到的问题是Delegation相反Impersonation的。

我假设在您的生产环境中,您实际上拥有 Web 浏览器、IIS 服务器和 SQL Server 都在不同的机器上。

简单模拟不支持Multi-Hop

为了支持Multi-Hop您需要Kerberos设置Delegation. 您将不得不SPN在您的Active Directory. 完成后,您还需要Delgation在 AD 上启用 IIS 机器。

简而言之,委派是一个巨大的蠕虫罐。

于 2013-11-02T23:19:32.860 回答
3

您必须确保 IIS 提供“Windows 身份验证”身份验证并且已启用。默认情况下,未安装 WindowsAuthenticationModule 并使用匿名身份验证。

默认

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

设置并启用后

有关详细信息,请参阅配置 Windows 身份验证 (IIS 7)

你也可以看看右边的相关问题,特别是 SQL Server返回错误“用户'NT AUTHORITY\ANONYMOUS LOGON'登录失败”。在 Windows 应用程序中

于 2013-10-31T12:22:37.353 回答