我在 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 身份验证的详细信息:
特别需要注意以下几点:
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
。