作为NETWORK SERVICE运行的Web应用程序可以连接到SQL Server,但是作为LOCAL SYSTEM运行的Windows服务不能

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

我还在连接到同一台SQL Server计算机的同一个IIS服务器上安装了一个.net Windows服务。 Windows服务作为LOCAL SYSTEM运行,因此也应该以身份DOMAIN\COMPUTER$ 。 我已经在十几个不同的公司安装了同样的产品,通常所有的工作都是我所期望的,但是在最近的情况下,Windows服务无法连接到数据库,出现这样的错误:

 Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON' 

任何想法,为什么这将是本地系统的情况下,而不是networking服务? 要在短期内解决这个问题,我必须切换到使用SQL Serverlogin,但如果有一个简单的解决scheme,则宁愿使用集成安全性。 安全或系统事件日志中没有错误消息,但我没有做任何事情来启用额外的日志logging。

通常我会认为这是某种Kerberos / ADtypes的问题,并按照这样的文章, 这将有所帮助。 但是,从networking服务工作的事实表明,我会检查正常的事情已经确定(例如SPNs已经正确设置,机器域帐户启用委派?)。 那么是什么情况出错?

如果没有我的客户的IT团队的帮助,我无法访问服务器,并且在服务器上安装了其他应用程序,我需要注意不要中断,这使得故障排除更加微妙。 任何疑难解答build议非常感谢!

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

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

networking安全:允许本地系统为NTLM使用计算机标识
http://technet.microsoft.com/en-us/library/jj852275%28v=ws.10%29.aspx


有关如何configurationSPN以便于SQL Server的Kerberos身份validation的更多信息,请执行以下操作:

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

我仍然打赌SPN问题。 不要只假定他们在那里。 检查SQL Server的SPN是否正确注册。 同时检查重复项( setspn -x )。

Network Service工作,因为当SPN不在那里,它仍然可以回落到NTLM身份validation。

Local System不起作用,因为它只能访问networking资源,如DOMAIN\Computer$如果它能够使用Kerberos。 否则,它会回到空会话,这就是为什么你看到Anonymous Logon