作为网络服务运行的 Web 应用程序可以连接到 SQL Server,但作为本地系统运行的 Windows 服务则无法连接到

作为网络服务运行的 Web 应用程序可以连接到 SQL Server,但作为本地系统运行的 Windows 服务则无法连接到

我在 Windows Server 2003 IIS 服务器上安装了一个 .net web 应用程序,该应用程序以身份在应用程序池中运行,NETWORK SERVICE并使用集成安全性连接到另一台计算机上的 SQL Server。SQL Server 计算机也运行 Windows Server 2003。因此,该 web 应用程序以身份进行连接DOMAIN\COMPUTER$并且该帐户在 SQL Server 中有一个登录名和用户,因此一切正常。

我还在连接到同一台 SQL Server 计算机的同一 IIS 服务器上安装了 .net Windows 服务。Windows 服务以身份运行,LOCAL SYSTEM因此也应以身份连接DOMAIN\COMPUTER$。我已经在十几家不同的公司安装了同样的产品,通常都能按我预期的方式运行,但最近有一次,Windows 服务无法连接到数据库,并出现错误:

Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'

有人知道为什么本地系统会出现这种情况,而网络服务不会吗?为了在短期内解决这个问题,我不得不切换到使用 SQL Server 登录,但如果有简单的解决方案,我更愿意使用集成安全性。安全或系统事件日志中没有错误消息,尽管我没有做任何事情来启用其他日志记录。

通常我会认为这是某种 Kerberos/AD 类型的问题,以下文章会有所帮助。但事实上,它可以从 NETWORK SERVICE 运行,这表明我要检查的正常事项已经正常(例如,已正确设置 SPN 并且已为委派启用了计算机域帐户?)。那么,哪个设置出了问题?

如果没有客户 IT 团队的帮助,我无法访问服务器,而且服务器上还安装了其他应用程序,我需要注意不要中断它们,这两者都使故障排除变得更加棘手。非常感谢任何有关故障排除的建议!

答案1

您可能需要确认安全连接是 NTLM 还是 Kerberos。如果恢复为 NTLM,则连接将是匿名的。

有一个组策略可以在使用 NTLM 时使用计算机身份。

网络安全: 允许本地系统使用计算机身份进行 NTLM
http://technet.microsoft.com/en-us/library/jj852275%28v=ws.10%29.aspx


有关如何配置 SPN 以促进 SQL 服务器的 Kerberos 身份验证的详细信息:

http://blogs.msdn.com/b/sql_protocols/archive/2006/12/02/understanding-kerberos-and-ntlm-authentication-in-sql-server-connections.aspx

特别需要注意以下几点:

SQL Server 的 SPN 由以下元素组成:

  • ServiceClass:这标识了服务的一般类别。对于 SQL Server,这始终是 MSSQLSvc。
  • 主机:这是运行 SQL Server 的计算机的完全限定域名 DNS。
  • 端口:这是服务正在监听的端口号。

    例如:MSSQLSvc/myserver.corp.mycomany.com:1433

答案2

我仍然认为 SPN 存在问题。不要只是假设它们存在。检查 SQL Server 的 SPN 注册是否正确。还要检查是否有重复项 ( setspn -x)。

Network Service有效是因为当没有 SPN 时,它仍然可以回退到 NTLM 身份验证。

Local System不起作用,因为它只能像DOMAIN\Computer$能够使用 Kerberos 一样访问网络资源。否则,它会返回到空会话,这就是您看到的原因Anonymous Logon

相关内容