Служба, работающая как локальная система на сервере 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
аккаунт, я надеюсь:)