Назад | Перейти на главную страницу

Проблема с двойным прыжком с sql server 2008

Я пытаюсь создать следующий сценарий. У меня 3 сервера, все они в одном домене.

Серверы B и C находятся в кластере SQL. Экземпляры B и C являются связанными серверами.

Когда я запускаю SQL Server Management Studio из A и подключаюсь к B, используя свою учетную запись домена (dom \ usr), я пытаюсь выполнить запрос, который выбирает данные из B и C, и он работает.

Когда я пробую веб-приложение, которое пытается сделать то же самое, я получаю сообщение об ошибке:

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

Я вижу, что соединение в SQL имеет auth_scheme KERBEROS для пользователя dom \ web, поэтому это не NTLM.

Кроме того, для учетной записи домена dom \ web не выбран параметр «учетная запись является конфиденциальной и не может быть делегирована» в AD.

Я также считаю, что SPN настроен правильно, потому что в первом случае двойной прыжок не сработает.

Это ошибка на сервере C:

Исходный вход в систему

Сообщение Ошибка входа в систему для пользователя NT AUTHORITY \ ANONYMOUS LOGON. Причина: проверка доступа к серверу на основе токенов завершилась неудачно из-за ошибки инфраструктуры. Проверьте предыдущие ошибки. [КЛИЕНТ: 10.65.10.53]

Исходный вход в систему

Ошибка сообщения: 18456, уровень серьезности: 14, состояние: 11.

Я считаю, что IIS настроил веб-сайт для «Анонимного» с учетной записью IUSR. Это проходит через домен как АНОНИМНЫЙ ВХОД.

Если вы откроете диспетчер IIS, в левой части будет дерево. В этом дереве разверните сервер, затем разверните «Сайты», затем щелкните веб-сайт, который вы используете для этого проекта (то есть веб-сайт по умолчанию). В правой части диспетчера IIS дважды щелкните значок «Проверка подлинности». На следующем экране щелкните правой кнопкой мыши «Анонимная аутентификация» и выберите «Изменить» в контекстном меню. Убедитесь, что выбран «Определенный пользователь», и нажмите кнопку «Установить». Измените пользователя на dom \ web и введите правильный пароль. Щелкните ОК.

На этом этапе у вас может быть проблема с тем, что dom \ web не имеет доступа к серверу SQL. Вам нужно будет создать учетную запись SQL для dom \ web, а затем создать пользователя в базе данных, к которому вы хотите, чтобы dom \ web имел доступ.

Чтобы добавить к другим, я был в ситуации, когда выполнение запроса работает из SSMS, но не из IIS через интерфейс приложения.

Я использую в основном эти две ссылки только для решения проблем. Существует так много разных настроек для Active Directory, файлов конфигурации, IIS и O / S, которые следует учитывать, и это может быть то, чего вы не совсем ожидаете. Ключ в том, чтобы знать, что думает операционная система / IIS / SQL Server, см. Ссылку DELEGCONFIG ниже.

Итак, ссылка на библию Kerberos для правильной настройки SQL Server - http://msdn.microsoft.com/en-us/library/ff679930(v=SQL.100).aspx. Я знаю, что это относится к службам Reporting Services, но по-прежнему применяется к серверу приложений, так как вы можете рассматривать службы Reporting Services как другое приложение.

Я обнаружил, что лучший способ устранения проблем с аутентификацией - это инструмент под названием DELEGCONFIG; он помогает настроить правильное имя участника-службы для работы Kerberos. Вы можете найти этот инструмент здесь: http://www.iis.net/community/default.aspx?tabid=34&g=6&i=1434. Это веб-сайт IIS, который вы устанавливаете на сервере, и он сообщает вам, правильно ли настроены ваше SPN и делегирование. Он также может вносить изменения за вас. Запускаю до тех пор, пока все проверки не станут зелеными - поймете, если запустите инструмент.

Я не оставляю веб-сайт DELEGCONFIG в рабочем состоянии, но при настройке или настройке ваших производственных администраторов серверов db / app они могут использовать его для выяснения ситуации. Как только вы все сделаете правильно, удалите сайт или скройте и защитите его.

HTH

Создайте логин для dom \ web на серверах B и C и предоставьте доступ к вашим базам данных только что созданному логину.

Просто чтобы изложить свои предположения:

  • Вы хотите, чтобы удостоверение пользователя веб-приложения использовалось в SQL
    • Это приводит к необходимости использовать Kerberos (для двойной аутентификации)
    • Ограничение вас браузерами, поддерживающими Kerberos (IE, Chrome, Firefox (с изменениями настроек))
    • Это означает, что вам необходимо настроить имя участника-службы для веб-приложения в соответствии с dom \ web
  • Вы используете IIS 6 или 7 в качестве веб-сервера
  • Управление идентификацией вашего веб-приложения построено для поддержки Kerberos в качестве поставщика членства в ASP .Net, построенного на основе Windows Auth.

Итак, поскольку вы упомянули SPN, я предполагаю, что вы зарегистрировали его, используя что-то похожее на это:

setspn -S http/webapp.fqdn.tld dom\web

Затем вы включили делегирование для учетной записи пользователя dom \ web? Чтобы двойной прыжок работал, учетной записи пользователя, на которой запущено веб-приложение, должно быть разрешено снова передавать эти учетные данные. В свойствах учетной записи пользователя в домене найдите вкладку «Делегирование» и включите «Доверительное делегирование для любой службы (kerberos)».

Когда это нормально, убедитесь, что ваш веб-сайт IIS настроен на сквозную проверку подлинности Windows и вместо этого не используйте учетную запись NT USER \ Anonymous.

На этом этапе вы можете проверить, правильно ли настроены Kerberos и IIS, запустив klist из командной строки. Это выведет все проблемы с билетами Kerberos для текущего пользователя, вошедшего в систему. Ищите тот, у которого есть Server: http/webapp.fqdn.tld и проверьте это forwardable и ok_as_delegate установлены.

Затем (как было предложено выше) добавьте группу пользователей, которые, вероятно, будут использовать приложение в SQL, и при необходимости предоставьте им разрешение на доступ к базе данных.

... уже почти час ночи. Я думаю, что пока могу дать своим предложениям отдохнуть. Надеюсь, что-то там вам поможет, попробую добавить завтра на работе. (Я нахожусь в Новой Зеландии, отсюда странный часовой пояс).

Я помню, что в прошлом у меня была аналогичная проблема с двойным прыжком, которую некоторые коллеги решили, сделав учетные записи служб SQL в качестве членов группы администраторов домена при запуске служб, а затем удалив их. Это была проблема с SPN.

Вероятно, это был неправильный способ решить проблему, но все заработало и заработало в критический период незапланированного простоя.