Проблемы с аутентификацией Windows при использовании asp.net - PullRequest
3 голосов
/ 10 октября 2008

У меня есть приложение asp.net, которое должно получить доступ к данным с двух серверов SQL. Один из SQL-серверов находится на том же компьютере, что и IIS (назовем его SQLSERVER1), тогда как другой SQL-сервер присутствует на другом компьютере (SQLSERVER2).

Строки подключения являются доверенными для обоих серверов SQL. В моем файле web.config для олицетворения установлено значение true. Я использую аутентификацию Windows в IIS и web.config.

Когда я пытаюсь получить доступ к данным из SQLSERVER2, мне не удается войти в систему из-за пользовательской (нулевой) ошибки. Пользователь, через которого я вошел в систему через Windows, существует как учетная запись сервера SQL в SQLSERVER2.

В чем может быть причина?

ПРИМЕЧАНИЕ: Это вопрос новичка ИМХО .

ПРИМЕЧАНИЕ. Используется IIS 6.0 (Windows 2003). Не установлен режим изоляции IIS 5.0.

РЕДАКТИРОВАТЬ: пользователь подражает является пользователем домена

Дополнение:

Я также хочу заявить, что я получаю это сообщение об ошибке при доступе к нему в качестве клиента сервера, на котором работает IIS. Другими словами, позвольте мне сказать, что я работаю на машине A, IIS и SQLSERVER1 на машине B, а SQLSERVER2 на машине C.

Я не получаю это сообщение об ошибке, когда я работаю на компьютере B. Это ставит меня в тупик больше.

Ответы [ 5 ]

7 голосов
/ 10 октября 2008

Это абсолютно делегирование проблемы. Как указал один человек, вам необходимо убедиться, что используется аутентификация Kereberos . Старый стиль NTLM не собирается сокращать его. Подробнее о Kerberos против NTLM .

В двух словах, если у вас есть веб-сервер и база данных, и вы хотите, чтобы веб-сервер выдавал себя за пользователя при выполнении запросов к базе данных (чтобы вы могли настроить разрешения для базы данных непосредственно для каждого пользователя или группы пользователей Вы исполняете двойной прыжок. Учетные данные должны сначала передаваться с компьютера пользователя на веб-сервер, а затем снова в базу данных. Как вы можете себе представить, база данных должна доверять веб-серверу "не делать зла", иначе это может быть чрезвычайно опасной дырой в безопасности. В результате вы должны настроить то, что называется в мире Windows Server «делегирование» ...

У Microsoft есть хорошая статья обо всем этом здесь . Кроме того, вы можете просмотреть статью типа this , чтобы получить представление о том, как все это настроить. Мы часто сталкиваемся с этим, и поначалу это может быть болезненно, тем более что, будучи разработчиком, вы, вероятно, не управляете серверами напрямую (особенно производственными) и вам придется тратить много времени на Сервер парни вниз по коридору.

3 голосов
/ 10 октября 2008

Возможно, вы столкнулись с этой проблемой, потому что олицетворение не на основе Kerberos (NTLM) действительно только на локальном компьютере (веб-сервере). Если вы хотите использовать эти учетные данные для доступа к другому компьютеру, вам нужно убедиться, что вы используете Kerberos.

Попробуйте это: http://support.microsoft.com/kb/810572

0 голосов
/ 10 октября 2008

Вы пытались получить доступ к базе данных на сервере2 с помощью администратора SQL SErver с сервера1 и установили успешное соединение?

Если нет, то это может быть потому, что по умолчанию SQL Server устанавливает себя с отключенным по умолчанию протоколом tcp.

Вам нужно убедиться, что это включено для server2, чтобы позволить server1 соединяться. У сервера server1 нет проблем с подключением, поскольку он может использовать подключение к общей памяти.

0 голосов
/ 10 октября 2008

Вы должны убедиться, что учетная запись компьютера для SQLSERVER1 доверена для включенного делегирования. В противном случае SQLSERVER2 не будет доверять олицетворению, запущенному на SQLSERVER1. Это в дополнение к подтверждению того, что Kerberos используется для настройки олицетворения в первую очередь. Это также предполагает, что серверы и пользователи являются членами одного домена.

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

0 голосов
/ 10 октября 2008

Ваша аутентификация на веб-сервере не передается на сервер sql. Веб-сервер аутентифицируется на SQL Server, используя учетную запись, под которой работает пул приложений.

...