У меня есть небольшой тестовый сценарий ASP.NET, который открывает соединение с базой данных SQL Server на другом компьютере в домене. Это работает не во всех случаях.
Настроить:
IIS 7.5 под W2K8R2 пытается подключиться к удаленному экземпляру SQL Server 2008 R2. Все машины находятся в одном домене.
Используя ApplicationPoolIdentity для веб-сайта, он не может подключиться к SQL Server со следующим:
Ошибка входа в систему для пользователя NT AUTHORITY \ ANONYMOUS LOGON. Описание: необработанное исключение произошло во время выполнения текущего веб-запроса. Просмотрите трассировку стека для получения дополнительных сведений об ошибке и ее происхождении в коде.
Сведения об исключении: System.Data.SqlClient.SqlException: Ошибка входа для пользователя NT AUTHORITY \ ANONYMOUS LOGON.
Однако, если я переключаю идентификатор модели процесса на СЕТЕВОЙ СЕРВИС или мою учетную запись домена, соединение с базой данных будет успешным.
Я предоставил доступ \ $ в SQL Server.
Я не выполняю никакой аутентификации на веб-сайте, это всего лишь простой скрипт для открытия соединения с базой данных, чтобы убедиться, что она работает.
У меня включена анонимная проверка подлинности и я настроен на использование удостоверения пула приложений.
Как мне заставить это работать? Почему ApplicationPoolIdentity пытается использовать АНОНИМНЫЙ ВХОД? Еще лучше, как мне заставить его прекратить использование анонимного входа в систему?
У меня была такая же проблема. Согласно эта страница, ApplicationPoolIdentity должен получать доступ к сетевым ресурсам как учетная запись компьютера (DOMAIN \ COMPUTERNAME $), но вместо этого он использовал NT AUTHORITY \ ANONYMOUS LOGON для доступа к серверу SQL.
Я смог использовать это исправление чтобы ApplicationPoolIdentity работал так, как указано в документе. Это исправление конкретно не описывает решение для доступа к сетевым ресурсам как NT AUTHORITY \ ANONYMOUS LOGON, но оно связано со сменой пароля компьютера.
Этот поток stackoverflow помог мне найти это решение:
Другие полезные советы по отладке идентификаторов ASP.NET и SQL
Поскольку интегрированная аутентификация SQL связана с идентификацией потока, полезно иметь возможность просматривать вашу идентификацию пользователя, идентификацию потока (которая изменяется в зависимости от олицетворения) и логин на сервере SQL. Этот фрагмент ASPX отображает все три:
<%@ Import Namespace="System.Security.Principal" %>
<div>ASP.NET Request User identity: <%= User.Identity.Name %></div>
<div>Current thread/process WindowsIdentity: <%= WindowsIdentity.GetCurrent(false).Name %></div>
<asp:SqlDataSource ID="CurrentUserData" runat="server" ConnectionString="<%$ ConnectionStrings:ConnID %>"
SelectCommand="select SYSTEM_USER" />
<asp:DetailsView DataSourceID="CurrentUserData" runat="server" />
У меня была такая же проблема. Я выдергивал волосы на несколько часов и, наконец, перезагрузил машину. Проблема ушла! Обратите внимание, что перезапуск IIS через iisreset НЕ решил проблему. Он исчез только после перезапуска сервера.