Проблема передачи учетных данных из ASP.NET на SQL Server - PullRequest
4 голосов
/ 11 октября 2011

Настройка:

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 \ ANONYMOUS LOGON'.

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

HttpContext.Current.User.Identity.Name = домен \ моя учетная запись

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

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

Перед открытием соединения с БД ...

HttpContext.Current.User.Identity.Name = domain \ my account

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

Sub TestDbCall () Ошибка!ex.Message = Ошибка входа для пользователя 'NT AUTHORITY \ ANONYMOUS LOGON'.

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

РЕДАКТИРОВАТЬ:

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

Ответы [ 3 ]

4 голосов
/ 12 октября 2011

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

1 голос
/ 11 октября 2011

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

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

0 голосов
/ 14 октября 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...