2009-08-13 36 views
13

Moja aplikacja internetowa ASP.NET v3.5 rzuca następujący wyjątek przy próbie otwarcia połączenia z serwerem SQL 2008 bazy danych:Błąd "Logowanie nie powiodło się dla użytkownika" ZARZĄDZANIE NT IUSR '"w ASP.NET i SQL Server 2008

System.Data.SqlClient.SqlException: nie można otworzyć bazy danych "MyDbName" żądanie logowania. Zalogowanie się nie powiodło się. Logowanie nie powiodło się dla użytkownika "NT AUTORYZACJA \ IUSR".

Chodzi o to, że dodałem NT AUTHORITY\IUSR do listy logowania na serwerze i do listy użytkowników bazy danych. Na serwerze przyznano użytkownikowi rolę Publiczną, a dla bazy danych przyznano uprawnienia: db_datareader.

Też nadałem to samo dla NT AUTHORITY\NETWORK SERVICE, która jest tożsamością, na której działa pula aplikacji.

Aplikacja internetowa jest hostowana przez IIS7, jeśli to robi różnicę. Problem repros, gdy DB i IIS są również na tym samym komputerze fizycznym.

Odpowiedz

6

Podejście polega na tym, że NT AUTHORITY\NETWORK SERVICE pojawia się w bazie danych jako DOMAINNAME\MACHINENAME$ (uwaga na znak $!). Oznacza to, że po przekroczeniu granicy maszyny z serwera WWW do SQL Server, SQL Server widzi konto komputera, jeśli używasz kont NETWORK SERVICE lub LOCAL SYSTEM. Jeśli używasz innego konta innego niż domeny, SQL Server nie otrzyma danych uwierzytelniających.

Jestem trochę zdziwiony twoim komunikatem o błędzie. Prawdę mówiąc, nie sądzę, że kiedy DB jest na innym pudełku, zobaczysz coś innego niż Login Failed for NT AUTHORITY\ANONYMOUS LOGON.

IUSR jest używany do anonimowych stron internetowych i nie może przekazać połączenia do SQL Server. Możesz znaleźć sposób, żeby zadziałał, jeśli robisz wszystko na tym samym komputerze, ale nigdy bym tego nie wiedział, ponieważ nigdy bym tego nie zrobił ;-)

+1

właśnie badania, aby sprawdzić czy wszystko będzie praca na tym samym polu - w produkcji topologia jest najlepiej opisać jako rozwalony. W każdym razie, przybijałeś to - musiałem dodać uprawnienia do machineName $. Dziękuję Ci! –

+1

Po prostu chciałem dodać, że podobnie rozwiązałem ten problem, tworząc uprawnienia dla nazwy użytkownika IUSER znalezionej w witrynach sieci Web IIS 6.0-> Właściwości-> Zabezpieczenia katalogów-> Edycja (uwierzytelnianie ...), która była IUSR_MACHINENAME – shawad

+0

W jaki sposób dodałeś uprawnienia do MachineName $ in VS –

1

Proponuję stworzyć oddzielne konto (najlepiej domenowe) i określ je w łańcuchu połączenia (zazwyczaj w web.config). Następnie możesz ograniczyć uprawnienia na serwerze sieciowym, co to konto może i nie może zrobić. Następnie można przyznać temu kontowi wymagane uprawnienia w serwerze SQL.

-1

Prostym rozwiązaniem jest sprawdzenie pliku web.config i upewnij się, że jeden z nich jest częścią ciąg połączenia db:

zaufanego połączenia = false

LUB

Integrated Security = True

1

Miałem ten sam problem i rozwiązałem to, zmieniając pulę aplikacji.

-2

Ten problem jest wyświetlany po odtworzeniu nowej bazy danych w ostatniej bazie danych.

Aby rozwiązać ten problem, musisz przejść do sqlserver, a następnie bezpieczeństwa, a następnie ponownie ustawić swój apppool.

1

Jeśli ktoś pomógł, w web.config dodałem < tożsamość personerson = "false" />, aby ten błąd zniknął (pod < system.WWW>)

0

Zamiast Integrated Security=True; w ciągu połączenia, wystarczy użyć uwierzytelniania hasłem użytkownika i user=sa; pwd=mypassword;

+0

Nie! Nie można polecić używania nazwy użytkownika i hasła, gdy istnieje inny przypadek użycia, na przykład autoryzacja przy użyciu konta komputera. –

Powiązane problemy