Проблема двойного прыжка с SQL Server 2008
Я пытаюсь настроить следующий сценарий. У меня 3 сервера, все они в одном домене.
- Сервер A имеет веб-приложение, которое работает под учетной записью службы (домена), dom\web.
- Сервер B имеет экземпляр SQL Server 2008 R2, который работает под учетной записью службы (домена), dom\sql.
- Сервер C имеет экземпляр SQL Server 2008 R2, который работает под учетной записью службы (домена), dom\sql.
Серверы 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 domain не выбрала опцию "учетная запись чувствительна и не может быть делегирована" в AD.
Я также думаю, что SPN настроен правильно, потому что двойной переход не будет работать в первом случае.
Это ошибка на сервере C:
Исходный вход
Сообщение Ошибка входа пользователя 'NT AUTHORITY\ANONYMOUS LOGON'. Причина: проверка доступа к серверу на основе токенов завершилась ошибкой инфраструктуры. Проверьте на наличие предыдущих ошибок. [КЛИЕНТ: 10.65.10.53]
Исходный вход
Ошибка сообщения: 18456, серьезность: 14, состояние: 11.
5 ответов
Я считаю, что IIS имеет веб-сайт, настроенный для "Анонимного" с учетной записью IUSR. Это распространяется на домен как анонимный вход в систему.
Если вы откроете диспетчер IIS, слева будет дерево. В этом дереве разверните сервер, затем разверните "Сайты", затем щелкните веб-сайт, который вы используете для этого проекта (то есть веб-сайт по умолчанию). Справа от диспетчера IIS дважды щелкните значок "Аутентификация". На следующем экране щелкните правой кнопкой мыши "Anonymous Authentication" и выберите "Edit" из контекстного меню. Убедитесь, что выбран "Конкретный пользователь", и нажмите кнопку "Установить". Измените пользователя на 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, они могут использовать его, чтобы разобраться. Как только вы сделаете это правильно, удалите сайт или спрячьте и обезопасьте его.
НТН
Создайте логин для dom\web на серверах B и C и предоставьте доступ к вашим базам данных только что созданному логину.
Просто чтобы изложить мои предположения:
- Вы хотите, чтобы личность пользователя веб-приложения использовалась в SQL
- Это тогда заставляет вас использовать Kerberos (для аутентификации двойного прыжка)
- Ограничение вас браузерами, которые поддерживают Kerberos (IE, Chrome, Firefox (с изменениями настроек))
- Это означает, что вам нужно настроить имя участника службы для веб-приложения для dom\web
- Вы используете IIS 6 или 7 в качестве веб-сервера
- Управление идентификацией вашего веб-приложения создано для поддержки Kerberos как поставщика членства ASP .Net, созданного на основе аутентификации Windows.
Итак, поскольку вы упомянули 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 и дайте им разрешение на базу данных по мере необходимости.
... почти 1 час ночи. Я думаю, что я могу дать мои предложения отдохнуть сейчас. Надеюсь, что-то там вам поможет, я постараюсь добавить еще завтра на работе. (Я в Новой Зеландии, отсюда и странно звучащий часовой пояс).
Я помню, что в прошлом у меня была похожая проблема с двойным переходом, которую некоторые коллеги решили, когда при запуске служб учетные записи служб SQL входили в группу администраторов домена, а затем удаляли их. Это была проблема с SPN.
Вероятно, это был неправильный способ решить проблему, но все заработало в критический период незапланированных простоев.