ApplicationPoolIdentity IIS 7.5 для SQL Server 2008 R2 не працює


11

У мене є невеликий тестовий скрипт 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 намагається використовувати ANONYMOUS LOGON? А ще краще, як змусити її припинити використання входу Anonymous?


1
Ви завжди можете просто встановити особу AppPool як мережну службу.
JohnThePro

Відповіді:


4

У мене було те саме питання. Відповідно до цієї сторінки , ApplicationPoolIdentity повинен мати доступ до мережевих ресурсів як обліковий запис машини (DOMAIN \ COMPUTERNAME $), але для доступу до SQL-сервера замість цього використовується NT AUTHORITY \ ANONYMOUS LOGON.

Я зміг скористатися цим виправленням, щоб змусити 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" />

2

У мене було саме таке питання. Я витягнув волосся на кілька годин і нарешті перезавантажив машину. Питання пішло! Зауважте, що перезапуск IIS через iisreset DID НЕ вирішує проблему. Це пішло лише тоді, коли я перезапустив сервер.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.