Wiem, że jest to prawie duplikat: Błąd „Logowanie nie powiodło się dla użytkownika„ NT AUTHORITY \ IUSR ”” w ASP.NET i SQL Server 2008 i logowanie nie powiodło się dla użytkownika „nazwa_użytkownika” - System.Data.SqlClient.SqlException z LINQ w zewnętrzna biblioteka projektów / klas, ale niektóre rzeczy nie sumują się w porównaniu z innymi aplikacjami na moim serwerze i nie wiem dlaczego.
Używane pudełka:
Pole
testowe
SQL Box w sieci Web
Moja aplikacja:
Mam aplikację sieci Web ASP.NET, która odwołuje się do biblioteki klas, która używa LINQ-to-SQL. Parametry połączenia skonfigurowane poprawnie w bibliotece klas. Zgodnie z logowaniem nie powiodło się dla użytkownika „nazwa użytkownika” - System.Data.SqlClient.SqlException z LINQ w zewnętrznej bibliotece projektu / klasy , dodałem również ten ciąg połączenia do aplikacji internetowej.
Parametry połączenia używają poświadczeń SQL jako takich (w aplikacji internetowej i bibliotece klas):
<add name="Namespace.My.MySettings.ConnectionStringProduction"
connectionString="Data Source=(SQL Test Box);Initial Catalog=(db name);Persist Security Info=True;User ID=ID;Password=Password"
providerName="System.Data.SqlClient" />
Potwierdzono, że połączenie działa poprzez dodanie go do Eksploratora serwera. To są parametry połączenia, których używa mój plik .dbml.
Problem:
Otrzymuję następujący błąd:
System.Data.SqlClient.SqlException: Login failed for user 'DOMAIN\MACHINENAME$'.
Teraz odwołując się do tego Błąd „Logowanie nie powiodło się dla użytkownika 'NT AUTHORITY \ IUSR'” w ASP.NET i SQL Server 2008 mówi, że to naprawdę usługa sieci lokalnej i użycie jakiejkolwiek innej nazwy spoza domeny nie będzie działać.
Ale jestem zdezorientowany, ponieważ sprawdziłem zarówno SQL Box, jak i SQL Test Box SQL Management Studio i oba mają NT AUTHORITY/NETWORK SERVICE
pod Security -> Logins, na poziomie bazy danych, które nie są wymienione w Security -> Users, ale na poziomie bazy danych Security -> Użytkownicy Mam użytkownika wyświetlanego w ciągu połączenia.
Na poziomie NTFS na serwerze sieciowym uprawnienia mają USŁUGA SIECIOWA ma pełną kontrolę.
Powodem, dla którego jestem zdezorientowany, jest to, że mam wiele innych aplikacji internetowych na moim serwerze sieciowym, które odwołują się do baz danych zarówno w SQL Box, jak i SQL Test Box i wszystkie działają. Ale nie mogę znaleźć różnicy między nimi a moją obecną aplikacją, poza tym, że używam biblioteki klas. Czy to ma znaczenie? Sprawdzanie uprawnień NTFS, konfiguracja logowania zabezpieczeń na poziomie serwera i baz danych, parametry połączenia i metoda łączenia (poświadczenia programu SQL Server), pula aplikacji IIS i inne opcje folderów są takie same.
Dlaczego te aplikacje działają bez dodawania nazwy maszyny $ do uprawnień któregokolwiek z moich pól SQL? Ale to właśnie nakazuje mi jedno łącze, aby rozwiązać ten problem.
źródło
Odpowiedzi:
USŁUGA SIECIOWA i system lokalny będą zawsze uwierzytelniać się lokalnie jako odpowiednie konto (usługa wbudowana \ usługa sieciowa i \ system wbudowany), ale oba będą uwierzytelniać się zdalnie jako konto komputera.
Jeśli zobaczysz błąd, na przykład
Login failed for user 'DOMAIN\MACHINENAME$'
oznacza to, że proces działający jako USŁUGA SIECIOWA lub jako system lokalny uzyskał dostęp do zdalnego zasobu, uwierzytelnił się jako konto komputera i odmówiono mu autoryzacji.Typowym przykładem może być aplikacja ASP działająca w puli aplikacji skonfigurowana do korzystania z poświadczeń usługi NETWORK SERVICE i łącząca się ze zdalnym serwerem SQL: pula aplikacji zostanie uwierzytelniona jako maszyna z uruchomioną pulą aplikacji i czy to konto komputera musi mieć przyznany dostęp .
W przypadku odmowy dostępu do konta komputera należy udzielić dostępu do konta komputera. Jeśli serwer odmówi zalogowania się do „DOMENA \ MASZYNA $”, należy nadać prawa logowania do „DOMENA \ MASZYNA $”, a nie do USŁUGI SIECIOWEJ. Przyznanie dostępu do USŁUGI SIECIOWEJ umożliwiłoby połączenie procesowi lokalnemu działającemu jako USŁUGA SIECIOWA, a nie zdalnemu, ponieważ zdalny będzie uwierzytelniał się tak, jak zgadłeś, DOMENA \ MASZYNA $.
Jeśli spodziewasz się, że aplikacja asp będzie łączyć się ze zdalnym serwerem SQL jako login SQL i otrzymujesz wyjątki dotyczące DOMAIN \ MACHINE $, oznacza to, że w parametrach połączenia używasz zintegrowanych zabezpieczeń. Jeśli jest to nieoczekiwane, oznacza to, że zepsułeś parametry połączenia, których używasz.
źródło
Ten błąd występuje, gdy skonfigurowano aplikację z usługami IIS, a usługi IIS przechodzą do programu SQL Server i próbują zalogować się przy użyciu poświadczeń, które nie mają odpowiednich uprawnień. Ten błąd może również wystąpić podczas konfigurowania replikacji lub dublowania. Omówię rozwiązanie, które zawsze działa i jest bardzo proste. Przejdź do SQL Server >> Security >> Logins i kliknij prawym przyciskiem myszy NT AUTHORITY \ NETWORK SERVICE i wybierz Właściwości
Na nowo otwartym ekranie Właściwości logowania przejdź do zakładki „Mapowanie użytkowników”. Następnie w zakładce „User Mapping” należy wybrać żądaną bazę danych - w szczególności bazę danych, dla której wyświetlany jest ten komunikat o błędzie. Na dolnym ekranie zaznacz rolę db_owner. Kliknij OK.
źródło
W moim przypadku miałem
Identity="ApplicationPoolIdentity"
dla mojej puli aplikacji IIS.Po dodaniu
IIS APPPOOL\ApplicationName
użytkownika do SQL Server to działa.źródło
Zasadniczo, aby rozwiązać ten problem, musimy skonfigurować coś takiego jak
Parametry połączenia używane z uwierzytelnianiem systemu Windows obejmują
Trusted_Connection=Yes
atrybut lub równoważny atrybutIntegrated Security=SSPI
wWeb.config
plikuMoje połączenie z bazą danych jest w trybie uwierzytelniania systemu Windows. Więc postanowiłem go po prostu zmieniając Pule aplikacji Identity od ApplicationPoolIdentity do mojego dziennika w poświadczeń domeny NazwaDomeny \ MyloginId
Krok:
Wybierz nazwę swojej aplikacji
Przejdź do ustawień zaawansowanych
Dla mnie to zostało rozwiązane.
Uwaga: W środowisku produkcyjnym lub IT możesz mieć konto usługi w tej samej domenie dla tożsamości puli aplikacji. Jeśli tak, użyj konta usługi zamiast loginu.
źródło
Sztuczka, która zadziałała dla mnie, polegała na usunięciu
Integrated Security
z moich parametrów połączenia i dodaniu zwykłych parametrówUser ID=userName; Password=password
połączenia wApp.config
lutym może nie używać zintegrowanych zabezpieczeń, ale ten utworzony wWeb.config
jest!źródło
Kolega miał ten sam błąd i wynikało to z małego błędu konfiguracji w IIS.
Do aplikacji internetowej została przypisana niewłaściwa pula aplikacji.
Rzeczywiście używamy niestandardowej puli aplikacji z określoną tożsamością, aby zaspokoić nasze potrzeby.
W jego lokalnym Menedżerze IIS -> Witryny -> Domyślna witryna internetowa -> Nazwa naszej aplikacji internetowej -> Ustawienia podstawowe ... Pula aplikacji to „DefaultAppPool” zamiast naszej niestandardowej puli aplikacji.
Ustawienie poprawnej puli aplikacji rozwiązało problem.
źródło
Dodałem
<identity impersonate="true" />
do mojego web.config i działało dobrze.źródło
U mnie problem został rozwiązany, kiedy zastąpiłem domyślne konto wbudowane „ApplicationPoolIdentity” kontem sieciowym, które miało dostęp do bazy danych.
Ustawienia można wprowadzić w Internet Information Server (IIS 7+)> Pule aplikacji> Zaawansowane ustawienia> Model procesu> Tożsamość
źródło
Dla mnie problem z „DOMENA \ NAZWA MASZYNY $” naprawiony przez ustawienie
DefaultApplicationPool
tożsamości naNetworkService
.źródło
Otrzymywaliśmy podobne komunikaty o błędach podczas przetwarzania bazy danych usług Analysis Services. Okazało się, że nazwa użytkownika, która była używana do uruchamiania wystąpienia usług Analysis Services, nie została dodana do logowania zabezpieczeń SQL Server.
W programie SQL Server 2012 usługi SQL Server i Analysis są domyślnie skonfigurowane do uruchamiania jako różni użytkownicy. Jeśli wybrałeś ustawienia domyślne, zawsze upewnij się, że użytkownik AS ma dostęp do twojego źródła danych!
źródło
Sprawdź, czy masz
w ciągu połączenia. Spróbuj go usunąć, co rozwiąże problem.
źródło
Miałem również ten błąd z uwierzytelnionym użytkownikiem SQL Server
Wypróbowałem kilka poprawek, ale nie zadziałały.
Rozwiązaniem w moim przypadku było skonfigurowanie jego „trybu uwierzytelniania serwera”, aby umożliwić uwierzytelnianie SQL Server w Management Studio: Właściwości / Bezpieczeństwo.
źródło
Jedyną kwestią, którą wszyscy przeoczyli, jest to, że możesz chcieć, aby zintegrowane zabezpieczenia = prawda. Witryna może działać w ramach konta puli. Wszystko w porządku, więc nadal można trafić na serwer SQL z oryginalnymi danymi użytkownika, a nie z pulą. Nazywa się to delegacją ograniczoną. Jeśli ją włączysz i skonfigurujesz SPN, okna będą tłumaczyć poświadczenia puli z użytkownikami na żądania kierowane do usługi końcowej (SQL jest tylko jedną z takich usług). Musisz zarejestrować JEDEN I TYLKO serwer SQL obsługujący żądania SQL na serwerze WWW. Ustawienie tego wszystkiego jest dla mnie zbyt trudne, abym starał się dokładnie opisać to tutaj. Zajęło mi to trochę czasu, zanim sam to przepracowałem.
źródło
Spędziłem kilka godzin próbując rozwiązać problem iw końcu udało mi się to - przeglądarka SQL Server została „zatrzymana”. Poprawka polega na zmianie trybu na „Automatyczny”:
cytat stąd
źródło
Miałem ten sam problem wcześniej, usunięcie
Persist Security Info=True
z connectionstring działało dla mnie.źródło
Napotkałem ten problem, gdy klient zmienił nazwę serwera SQL. Usługa SQL Reporting Service została skonfigurowana tak, aby łączyć się ze starą nazwą serwera, dla którego utworzono również alias dla tego przekierowanego na adres IP nowej nazwy serwera.
Wszystkie ich stare aplikacje IIS działały, przekierowując do nowej nazwy serwera za pośrednictwem aliasu. W pewnym sensie sprawdziłem, czy mają SSRS. Próba połączenia się z witryną SSRS. Wystąpił błąd:
„Usługa jest niedostępna. Skontaktuj się z administratorem systemu, aby rozwiązać ten problem. Administratorzy systemu: serwer raportów nie może połączyć się ze swoją bazą danych. Upewnij się, że baza danych jest uruchomiona i dostępna. Szczegółowe informacje można również sprawdzić w dzienniku śledzenia serwera raportów ”.
Działał na serwerze, ale nie mógł się połączyć, ponieważ używał aliasu dla starej nazwy serwera. Ponowna konfiguracja usług SSRS, aby używała nowej nazwy serwera zamiast starej / aliasu, naprawiła problem.
źródło
źródło
Wystąpił ten błąd podczas próby przetestowania rozwiązania przy użyciu następującego
Sposób, w jaki rozwiązałem, był następujący: musiałem otworzyć Visual Studio i uruchomić go na innym koncie, ponieważ konto, którego użyłem do otwarcia, nie było moim kontem administratora.
Więc jeśli twój problem jest podobny do mojego: przypnij VS do paska zadań, a następnie użyj klawisza Shift i prawego przycisku myszy, aby otworzyć menu, aby móc otworzyć VS jako inny użytkownik.
źródło
Doceniam, że jest tutaj kilka dobrych odpowiedzi, ale ponieważ właśnie straciłem czas na rozwiązywanie tego, mam nadzieję, że może to komuś pomóc.
W moim przypadku wszystko działało dobrze, po czym zatrzymało się bez wyraźnego powodu z błędem podanym w pytaniu.
Usługi IIS działały jako usługa sieciowa, a usługa sieciowa została wcześniej skonfigurowana na serwerze SQL (zobacz inne odpowiedzi do tego postu). Role serwera i mapowania użytkowników wyglądały poprawnie.
Problem był; bez żadnego wyraźnego powodu; Usługa sieciowa zmieniła uprawnienia logowania w bazie danych na „Odmów”.
Naprawić:
Permission to Connect To Database Engine
„Grant”.źródło