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?
źródło
Odpowiedzi:
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:
źródło
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.
źródło