Я пытаюсь создать следующий сценарий. У меня 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 и предоставьте доступ к вашим базам данных только что созданному логину.
Просто чтобы изложить свои предположения:
Итак, поскольку вы упомянули 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.
Вероятно, это был неправильный способ решить проблему, но все заработало и заработало в критический период незапланированного простоя.