Служба, работающая как локальная система на сервере A, подключающаяся к серверу SQL на сервере B. Как?

У меня есть служба, работающая на одном сервере (A), который традиционно работает под учетной записью локальной системы. Теперь SQL-сервер перемещен с сервера A на новый сервер B.

Я попытался добавить учетную запись компьютера сервера a [domain\servera$] к SQL-серверу на сервере B и дал ему все права, которые он мог (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 = 

Я не знаю, почему служба считает, что она входит в систему как ANONYMOUS LOGON.

Есть идеи?

Обновление: я написал тестовую службу, работающую под локальной системой, которая вызывает это сообщение в профилировщике SQL:

"Не удалось войти в систему для пользователя" NT AUTHORITY\ANONYMOUS LOGON ". Причина: проверка доступа к серверу на основе токенов завершилась с ошибкой инфраструктуры. Проверьте наличие предыдущих ошибок".

Обновление: теперь я думаю, что это проблема Kerberos. Kerberos не работает, потому что учетная запись домена, под которой работает SQL, не может зарегистрировать свои имена участников службы (setspn -L показывает столько же), и, следовательно, Kerberos не может использоваться, и NTLM используется, а NTLM не работает для домена \ компьютера $ для некоторых причина.

Наконец, ERRORLOG показывает, что SQL-сервер регистрирует ошибку о невозможности зарегистрировать имя участника-службы для службы SQL Server. Это подтверждает мою теорию, я думаю.

Обновление. Я думаю, что решение состоит в том, чтобы предоставить доменной учетной записи, под которой работает SQL Server, доверенное делегирование в AD, чтобы он мог зарегистрировать свое имя участника-службы при запуске SQL Server.

2 ответа

Решение

Я считаю, что эта проблема была решена путем создания имени участника-службы для учетной записи, под которой работает сервер SQL. Если SPN существует, клиент может пройти проверку подлинности с помощью Kerberos и войти в систему как домен учетной записи домена клиентского компьютера \clientcomputer$, которому может быть предоставлен соответствующий доступ к серверу SQL.

Ошибка входа для пользователя 'NT AUTHORITY\ANONYMOUS LOGON'

Вы не используете учетную запись компьютера для подключения...

LoginId =!! UnknownUser!!

Вы не предоставляете правильные учетные данные.

Вы знаете, что то, что внешне известно как DOMAIN\MACHINE$, является внутренним NT Authority\Network Service аккаунт, я надеюсь:)

Другие вопросы по тегам