ApplicationPoolIdentity IIS 7.5 do SQL Server 2008 R2 nie działa

11

Mam mały skrypt testowy ASP.NET, który otwiera połączenie z bazą danych SQL Server na innym komputerze w domenie. Nie działa we wszystkich przypadkach.

Ustawiać:

IIS 7.5 pod W2K8R2 próbuje połączyć się ze zdalną instancją SQL Server 2008 R2. Wszystkie maszyny są w tej samej domenie.

Korzystając z ApplicationPoolIdentity dla witryny sieci Web, nie można połączyć się z serwerem SQL Server, wykonując następujące czynności:

Logowanie nie powiodło się dla użytkownika „NT AUTHORITY \ ANONYMOUS LOGON”. Opis: Wystąpił nieobsługiwany wyjątek podczas wykonywania bieżącego żądania internetowego. Przejrzyj dane śledzenia stosu, aby uzyskać więcej informacji o błędzie i jego źródle w kodzie.

Szczegóły wyjątku: System.Data.SqlClient.SqlException: Logowanie nie powiodło się dla użytkownika „NT AUTHORITY \ ANONYMOUS LOGON”.

Jeśli jednak zmienię tożsamość modelu procesu na USŁUGĘ SIECIOWĄ lub moje konto domeny, połączenie z bazą danych zakończy się powodzeniem.

Udzieliłem dostępu \ $ w SQL Server.

Nie wykonuję żadnego uwierzytelnienia na stronie internetowej, to tylko prosty skrypt, aby otworzyć połączenie z bazą danych, aby upewnić się, że działa.

Mam włączone Anonimowe Uwierzytelnianie i skonfigurowałem używanie tożsamości puli aplikacji.

Jak sprawić, żeby to działało? Dlaczego ApplicationPoolIdentity próbuje użyć ANONIMOWEGO LOGOWANIA? Jeszcze lepiej, jak sprawić, by przestała korzystać z Anonimowego logowania?

Jacek
źródło
1
Zawsze możesz po prostu ustawić tożsamość AppPool jako SERWIS SIECI.
JohnThePro

Odpowiedzi:

4

Miałem również ten sam problem. Zgodnie z tą stroną ApplicationPoolIdentity ma uzyskiwać dostęp do zasobów sieciowych jako konto komputera (DOMAIN \ COMPUTERNAME $), ale zamiast tego używał NT AUTHORITY \ ANONYMOUS LOGON, aby uzyskać dostęp do serwera SQL.

Byłem w stanie użyć tej poprawki, aby aplikacja ApplicationPoolIdentity działała tak, jak powinien to zrobić dokument. Ta poprawka nie opisuje konkretnie rozwiązania dostępu do zasobów sieciowych jako NT AUTHORITY \ ANONYMOUS LOGON, ale jest związana ze zmianą hasła komputera.

Ten wątek przepełnienia stosu pomógł mi znaleźć to rozwiązanie:

Inne przydatne wskazówki dotyczące debugowania tożsamości ASP.NET i tożsamości SQL

Ponieważ zintegrowane uwierzytelnianie SQL jest powiązane z tożsamością wątku, przydatna jest możliwość przeglądania tożsamości użytkownika, tożsamości wątku (która zmienia się w zależności od personifikacji) oraz loginu serwera SQL. Ten fragment ASPX wyświetla wszystkie trzy:

<%@ 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" />
crimbo
źródło
2

Miałem dokładnie ten sam problem. Wyciągnąłem włosy na kilka godzin i w końcu ponownie uruchomiłem maszynę. Problem zniknął! Należy pamiętać, że ponowne uruchomienie IIS za pomocą iisreset NIE MOGŁO rozwiązać problemu. To zniknęło dopiero po ponownym uruchomieniu serwera.

Xparrot
źródło