Проблема с передачей учетных данных с ASP.NET К серверу SQL

#.net #asp.net #sql-server #iis-7

#.net #asp.net #sql-сервер #iis-7

Вопрос:

Настройка:

IIS в Windows 2008 Server R2 Enterprise, SQL Server 2008 R2 Enterprise, ASP.NET Веб-приложение 2.0.

Цель:

Мы преобразуем модель безопасности старого веб-приложения с использования одной учетной записи SQL Server на использование учетных записей Active Directory. В ASP.NET приложение, которое мы добавили <identity impersonate="true" /> в качестве первого элемента в <system.web> раздел web.config. Мы добавили роли базы данных, которые содержат группы Active Directory, для предоставления доступа к существующим хранимым процедурам. Наш web.config уже содержит <authentication mode="Windows"/> . Вот моя строка подключения, редактирование имен серверов и БД:

 <add name="DbConn" 
     connectionString="
         Data Source=SERVER;
         Initial Catalog=DBNAME;
         Integrated Security=SSPI;"
     providerName="System.Data.SqlClient"
/>
  

Проблема:

Я получаю сообщение об ошибке при попытке открыть SqlConnection к базе данных:

Не удалось войти в систему для пользователя ‘NT AUTHORITY АНОНИМНЫЙ ВХОД в СИСТЕМУ’.

Вместо того, чтобы проходить через все логические уровни приложения (от веб-страницы к слоям .DLL), я добавил быструю простую веб-страницу, которая выполняет некоторые Response.Write Page_Load() действия. Я получаю это (информация об учетной записи отредактирована):

HttpContext.Current.User.Идентификация.Имя = домен моя учетная запись

My.User.Name = домен моя учетная запись

Затем Page_Load вызывает вспомогательный модуль, который выполняет некоторые Response.Write действия, и пытается запустить существующую хранимую процедуру. Я понимаю это:

Перед открытием подключения к БД…

HttpContext.Current.User.Идентификация.Имя = домен моя учетная запись

My.User.Name = домен моя учетная запись

Сбой Sub TestDbCall ()! например. Сообщение = Ошибка входа для пользователя «NT AUTHORITY АНОНИМНЫЙ ВХОД в СИСТЕМУ».

При открытии SqlConnection с сообщением об ошибке выше (ошибка входа в систему …) происходит сбой. Очевидно, что ASP.NET приложение распознает мою доменную учетную запись. Кажется, что мои учетные данные Windows не распространяются из ASP.NET приложение к SQL Server. Я в недоумении, почему.

Редактировать:

Я нашел эту страницу на microsoft.com это говорит о том, что для доступа к SQL-серверу, которого нет на сервере IIS (кто бы это вообще СДЕЛАЛ ???), вы не можете использовать проверку подлинности Windows в IIS. Скорее, вы должны использовать базовую аутентификацию. Это работает, но мне не нравится идея, чтобы имя учетной записи пользователя и пароль перемещались по корпоративной сети в виде обычного текста. Поэтому, несмотря на то, что это «работает», я не принимаю свой собственный вывод в качестве ответа.

Комментарии:

1. Глупый вопрос: имеет ли ваша строка подключения «Доверенное соединение = true»?

2. в ваших настройках iis может быть что-то. Я не могу вспомнить, что нужно изменить, но я думаю, вам нужно изменить настройку пула приложений, чтобы не использовать учетную запись службы .net.

3. @Coding Gorilla: Integrated Security=SSPI; эквивалентно доверенному соединению.

4. @HardCode правильно; просто хотел сначала проверить очевидное. Какие методы проверки подлинности разрешает веб-сайт (в IIS)?

5. @HardCode попробуйте изменить это на дайджест аутентификации и посмотреть, работает ли это.

Ответ №1:

Когда ваш IIS проверяет подлинность пользователя с помощью проверки подлинности Windows, а затем, выдавая себя за подключенного пользователя, подключается к любому ресурсу за пределами локального окна IIS (например, экземпляра SQL Server), процесс называется делегированием, как описано в разделе Переход по протоколу Kerberos и ограниченное делегирование . Процесс, который иногда неофициально называют «двойным переходом», является предметом многих инструкций:

Комментарии:

1. Я проверю это и посмотрю, что я могу придумать. Спасибо.

Ответ №2:

Требуется некоторая настройка IIS. Смотрите Следующий документ для хорошего объяснения:

Как получить доступ к SQL Server с помощью встроенной безопасности Windows

Комментарии:

1. Я нашел эту статью, но для нее требуется базовая аутентификация. Я не чувствую, что в круге технологий Microsoft (Active Directory, IIS, ASP.NET , SQL Server), что отправка информации для входа в систему по проводам в виде обычного текста является решением: (

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

3. Находится ли ваш SQL Server в том же окне, что и IIS? Мои находятся в отдельных полях, поэтому в статье упоминается, что базовая аутентификация является единственным средством передачи токена безопасности на SQL Server.

4. @HardCode — Нет, мои IIS и SQL Server находятся в разных полях.

Ответ №3:

Я бы посоветовал изменить способ, которым вы собираетесь использовать AD в своем приложении.

Я бы сопоставил пользователей AD с внутренними пользователями приложения вместе с их ролями AD, сопоставленными с ролями приложений, и использовал роли приложений для определения доступа не к хранимым процедурам напрямую, а к функциям бизнес-уровня

Комментарии:

1. У меня есть роли базы данных (не роли приложений), с которыми сопоставляются группы Active Directory, и эти роли БД сопоставляются с SPS. Однако, в конце концов, все равно получается разрешить пользователям в группе AD доступ к SP.