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

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

我在一台服务器 (A) 上运行一项服务,该服务传统上在本地系统帐户下运行。现在 SQL Server 已从服务器 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 = 

我不知道为什么该服务认为它正在以匿名登录身份登录。

有任何想法吗?

更新:我编写了一个在本地系统下运行的测试服务,它在 SQL 事件探查器中引发了此消息:

“用户‘NT AUTHORITY\ANONYMOUS LOGON’登录失败。原因:基于令牌的服务器访问验证因基础结构错误而失败。检查先前的错误。”

更新:我现在认为这是一个 Kerberos 问题。Kerberos 不起作用,因为 SQL 运行的域帐户无法注册其服务主体名称(setspn -L 显示了很多),因此无法使用 Kerberos 并使用 NTLM,而出于某种原因,NTLM 对 domain\computer$ 不起作用。

最后,ERRORLOG 显示 SQL Server 记录了无法为 SQL Server 服务注册 SPN 的错误。我认为这证实了我的理论。

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

答案1

用户“NT AUTHORITY\ANONYMOUS LOGON”登录失败

您没有使用机器帐户进行连接...

登录 ID = !!未知用户!!

您没有提供正确的凭证。

NT Authority\Network Service我希望您知道外部所称的 DOMAIN\MACHINE$ 在内部就是帐户:)

答案2

我相信通过为 SQL Server 运行的帐户创建 SPN 可以解决此问题。如果 SPN 存在,则客户端可以使用 Kerberos 进行身份验证,并以客户端计算机的域帐户 domain\clientcomputer$ 身份登录,该帐户可以被授予对 SQL Server 的适当访问权限。

相关内容