SQL Server возвращает ошибку "Ошибка входа для пользователя' NT AUTHORITYANONYMOUS LOGON'."в Windows приложения
приложение, которое работает без проблем (и не было никакой активной разработки сделано на нем около 6 месяцев или около того) недавно начал не удается подключиться к базе данных. Администраторы операций не могут сказать, что могло бы измениться, что вызвало бы проблему.
клиентское приложение использует жестко закодированную строку подключения с Integrated Security=True, но когда приложения пытаются создать соединение с базой данных, оно выдает исключение SQLException со словами " ошибка входа для пользователя 'NT AUTHORITYANONYMOUS LOGON".
Я могу войти в базу данных через Management Studio на этой учетной записи без проблем. Все вещи, которые я видел для этой проблемы, предназначены для ASP.NET проекты, и это, по-видимому, "проблема двойного прыжка", которая является клиентским приложением чертовски хорошо, лучше не быть проблемой. Любая помощь будет очень признательна.
Edit
клиентская машина и серверная машина, а также учетные записи пользователей находятся на одном и том же домен.
Это происходит, когда Брандмауэр Windows выключен.
ведущая теория:
Сервер был перезапущен около недели назад, и не удалось зарегистрировать имя участника-службы (SPN). Сбой регистрации имени участника-службы может привести к возвращению встроенной проверки подлинности в NTLM вместо Kerberos.
5 ответов:
Если ваша проблема связана с серверами, вы должны смотреть на несколько вещей.
во-первых, ваши пользователи должны иметь делегирование включено, и если единственное, что изменилось, это, вероятно, они делают. В противном случае вы можете снять флажок "учетная запись чувствительна и не может быть делегирована" - это свойства пользователя в AD.
во-вторых, ваша учетная запись(ы) службы должна быть доверенной для делегирования. Поскольку вы недавно изменили свою учетную запись службы, я подозреваю, что это виновник. (http://technet.microsoft.com/en-us/library/cc739474 (v=ws.10).aspx)
вы упомянули, что у вас могут быть некоторые проблемы с SPN, поэтому обязательно установите SPN для обеих конечных точек, иначе вы не сможете увидеть вкладку делегирование в AD. Также убедитесь, что вы находитесь в расширенном виде в "Active Directory-пользователи и компьютеры."
Если вы все еще не видите вкладку делегирование, даже после исправления SPN, убедитесь, что ваш домен не в режиме 2000. Если это так, вы можете "повышение уровня функционирования домена."
теперь вы можете отметить учетную запись как доверенную для делегирования:
в области сведений щелкните правой кнопкой мыши пользователя, которому вы хотите доверять делегирование и нажмите кнопку Свойства.
перейдите на вкладку делегирование, выберите Учетная запись доверена для делегирования установите флажок и нажмите кнопку ОК.
наконец, Вам также нужно будет установить все машины как доверенные для делегирования.
Как только вы это сделаете, снова подключитесь к sql server и протестируйте свои любимые серверы. Они должны работать.
во-первых: моя проблема не такая же, как у вас, но этот пост-первое, что появляется в google для
Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'ошибка в то время, когда я написал это. Решение может быть полезно для людей, ищущих эту ошибку, поскольку я не нашел это конкретное решение в любом месте в интернете.в моем случае я использовал Xampp / Apache и PHP sqlsrv, чтобы попытаться подключиться к базе данных MSSQL с помощью проверки подлинности Windows и получил
Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'ошибка, которую вы описали. Я, наконец, нашел проблему быть самой службой Apache, работающей под пользователем "LOCAL SERVICE"вместо учетной записи Пользователя, в которую я вошел. Другими словами, он буквально использовал анонимный аккаунт. Было принято решение ехать в сервис.msc, щелкните правой кнопкой мыши службу Apache, перейдите в Свойства, перейдите на вкладку Вход в систему и введите учетные данные для пользователя. Это соответствует вашей проблеме, связанной с SPN, поскольку ваши SPN настроены для запуска от определенного пользователя в домене. Поэтому, если правильное имя участника-службы не работает, окна аутентификация будет по умолчанию для неправильного пользователя (вероятно, пользователя "локальной службы") и даст вам анонимную ошибку.вот где это отличается от вашей проблемы. Ни один из компьютеров в локальной сети не находится в домене, они находятся только в рабочей группе. Чтобы использовать проверку подлинности Windows с рабочей группой, как компьютер с сервером (в моем случае MSSQL Server), так и компьютер со службой запроса данных (в моем случае Apache) должны иметь пользователя с одинаковым именем и идентичный пароль.
подведем итоги:
Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'ошибка в обоих наших случаях, по-видимому, вызвана не запущенной службой и/или не на правильном пользователе. Обеспечение правильного SPN или другой службы выполняется и под правильным пользователем должно решить анонимную часть проблемы.
Я думаю, что должно было быть какое-то изменение в группе объявлений, используемой для аутентификации в базе данных. Добавить название веб-сервера, в формате\сервера домен$, в группе объявлений, которые имели доступ к базе данных. Кроме того, также попробуйте установить веб.config атрибут "false". Надеюсь, это поможет.
EDIT: идя по тому, что вы редактировали.. это, скорее всего, указывает на то, что протокол проверки подлинности вашего SQL Server откатился от Kerberos(по умолчанию, если вы использовали встроенную проверку подлинности Windows) для NTLM. Для использования Kerberos имя участника-службы (SPN) должно быть зарегистрировано в службе каталогов Active Directory. Имя участника - службы (SPN) - это уникальные идентификаторы служб, запущенных на серверах. Для каждой службы, которая будет использовать проверку подлинности Kerberos, необходимо задать имя участника-службы, чтобы клиенты могли идентифицировать службу в сети. Он зарегистрирован в Active Directory под учетной записью компьютера или учетной записью пользователя. Хотя Протокол Kerberos используется по умолчанию, если по умолчанию происходит сбой, процесс проверки подлинности будет опробован с помощью NTLM.
в вашем сценарии клиент должен устанавливать tcp-соединение, и он, скорее всего, работает под учетной записью LocalSystem, и для экземпляра SQL не зарегистрировано SPN, следовательно, используется NTLM, однако учетная запись LocalSystem наследует от системного контекста вместо истинного пользовательского контекста, таким образом, не удалось выполнить "анонимный вход".
чтобы решить эту проблему, спросите свой домен администратор вручную зарегистрировать имя участника-службы, если SQL Server работает под учетной записью пользователя домена. Следующие ссылки могут помочь вам more:
http://blogs.msdn.com/b/sql_protocols/archive/2005/10/12/479871.aspx
http://support.microsoft.com/kb/909801
У одного из моих заданий SQL была такая же проблема. Он включал в себя загрузку данных с одного сервера на другой. Ошибка произошла, потому что я использовал учетную запись службы агента sql Server. Я создал учетные данные, используя идентификатор пользователя (который использует проверку подлинности окна), общий для всех серверов. Затем создал прокси-сервер, используя эти учетные данные. Использовал прокси-сервер в задании sql server, и он работает нормально.
вам, вероятно, просто нужно указать имя пользователя и пароль в вашей connectionstring и установить Integrated Security=false
Comments