Настройка:
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.Скорее, вы должны использовать базовую аутентификацию.Это работает, но мне не нравится идея, что имя пользователя и пароль пользователя плавают по корпоративной сети в виде обычного текста.Поэтому, хотя это «работает», я не принимаю мои собственные выводы как ответ.