服务作为本地系统运行在服务器A上连接到服务器B上的SQL服务器。

我有一个服务运行在一个服务器(A),传统上在本地系统帐户下运行。 现在SQL服务器已经从服务器A移动到新的服务器B.

我尝试将服务器a [domain \ servera $]的计算机帐户添加到服务器B上的SQL服务器,并给予它可能想要的所有权限(sa),但该服务仍然无法连接。

我在服务日志中发现的错误如下

enbase ODBC database error: Connect() szSqlState = 28000 pfNativeError = 18456 szErrorMsg = [Microsoft][ODBC SQL Server Driver][SQL Server]Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'. pcbErrorMsg = 100 LoginId = !!UnknownUser!! ODBCRowNumber = 0 SSrvrLine = 0 SSrvrColumn = 0 SSrvrMsgState = 0 SSrvrSeverity = 0 SSrvrProcname = SSrvrSrvname = 

我不知道为什么服务认为它是作为匿名loginlogin。

有任何想法吗?

更新:我写了一个在localsystem下运行的testing服务,在SQL profiler中导致这个消息:

“NT AUTHORITY \ ANONYMOUS LOGON”用户login失败原因:基于令牌的服务器访问validation失败,出现基础结构错误,请检查以前的错误。

更新:我现在认为这是一个Kerberos问题。 Kerberos不起作用,因为域帐户SQL正在运行下无法注册其服务主体名称(setspn -L显示尽可能多),因此Kerberos不能使用和NTLM使用和NTLM不适用于某些域\计算机$原因。

最后,ERRORLOG显示SQL服务器logging了一个关于无法注册SQL Server服务的SPN的错误。 我认为这证实了我的理论。

更新:我认为解决scheme是授予域名帐户SQL Server运行在AD委托的信任,以便它可以注册其SQL Server启动时的SPN。

用户'NT AUTHORITY \ ANONYMOUS LOGON'login失败

您没有使用机器帐户连接…

LoginId = !! UnknownUser !!

你没有提供正确的凭据。

你知道什么是外部已知的DOMAIN \ MACHINE $内部是NT Authority\Network Service帐户,我希望:)

我相信这个问题是通过为运行SQL服务器的帐户创build一个SPN来解决的。 如果存在SPN,则客户端可以使用Kerberos进行身份validation,并以客户端计算机的域帐户域\ clientcomputer $的身份login,从而可以对SQL Server进行相应的访问。