Nie można otworzyć „testu” bazy danych żądanego podczas logowania. Logowanie nie powiodło się. Logowanie nie powiodło się dla użytkownika „xyz \ ASPNET”

101

Stworzyłem serwis WWW, który zapisuje pewne dane do bazy danych. Ale otrzymuję ten błąd:

Nie można otworzyć „testu” bazy danych żądanego podczas logowania. Logowanie nie powiodło się. Logowanie nie powiodło się dla użytkownika „xyz \ ASPNET”.

Moje parametry połączenia to

Data Source=.\SQLExpress;Initial Catalog=IFItest;Integrated Security=True
coure2011
źródło
Potrzebujemy znacznie więcej informacji, zanim będziemy mogli pomóc w zdiagnozowaniu tego.
sblom
Miałem ten problem i zamknąłem studio wizualne, otworzyłem je ponownie i zaczęło działać.
trees_are_great

Odpowiedzi:

47

Cóż, błąd jest całkiem jasny, nie? Próbujesz połączyć się z serwerem SQL za pomocą użytkownika „xyz / ASPNET” - jest to konto, na którym działa Twoja aplikacja ASP.NET.

To konto nie może łączyć się z SQL Server - albo utwórz login na SQL Server dla tego konta, albo określ inne prawidłowe konto SQL Server w parametrach połączenia.

Czy możesz pokazać nam swoje parametry połączenia (aktualizując swoje oryginalne pytanie)?

AKTUALIZACJA: OK, używasz zintegrowanego uwierzytelniania systemu Windows -> musisz utworzyć login SQL Server dla „xyz \ ASPNET” na swoim serwerze SQL - lub zmienić parametry połączenia na coś takiego:

connectionString="Server=.\SQLExpress;Database=IFItest;User ID=xyz;pwd=top$secret"

Jeśli masz użytkownika „xyz” z hasłem „ściśle tajne” w Twojej bazie danych.

marc_s
źródło
12
Nie „nie ma uprawnień do łączenia się z SQL Server”, ale „nie może używać bazy danych„ test ””.
WRAR
@wRAR: prawda - ale wydaje mi się, że szansa, że ​​login użytkownika istnieje na serwerze, ale nie jest włączona w tej konkretnej bazie danych, jest prawdopodobnie niewielka (przynajmniej tak mi się wydaje)
marc_s
Zobacz także „Baza danych = IFItest” a „test”, chociaż może to być błąd w druku.
WRAR
2
Jedyną kwestią, której nigdy nie poruszyłeś, jest to, że nazwa bazy danych również może być błędna. Otrzymałem komunikat wyjątku wyglądający jak ten sam z mojego Azure SQL Server i okazało się, że podałem złą nazwę mojej bazy danych w jednym z ciągów połączeń w kodzie C # w moim projekcie ASP.NET.
Ron16
Ron, to był mój problem. Nawet dwukrotnie sprawdziłem pisownię, ale nawet wtedy nie zauważyłem.
Darrell Lloyd Harvey
32
  • Albo: „xyz \ ASPNET” nie jest loginem (w sys.server_principals)
  • Lub: „xyz \ ASPNET” jest skonfigurowany, ale nie jest mapowany na użytkownika w teście bazy danych (sys.database_principals)

Wybrałbym drugą opcję: komunikat o błędzie sugeruje, że domyślna baza danych albo nie ma do niej dostępu, albo nie ma do niej praw, a nie jest skonfigurowana jako login.

Aby sprawdzić, czy jest skonfigurowany jako login

SELECT SUSER_ID('xyz\ASPNET') -- (**not** SUSER_SID)

Jeśli NULL

CREATE LOGIN [xyz\ASPNET] FROM WINDOWS

Jeśli nie NULL

USE test
GO
SELECT USER_ID('xyz\ASPNET')

Jeśli NULL

USE test
GO
CREATE USER [xyz\ASPNET] FROM LOGIN [xyz\ASPNET]
gbn
źródło
1
To jest po prostu świetne !, prosty przepływ pracy umożliwiający wykrycie i rozwiązanie problemu.
Mazen el Senih
Z jaką tabelą działa „SELECT USER_ID (...”?)? Master?
Sam
13

Miałem ten problem i rozwiązałem go:

  • Przejdź do pul aplikacji w usługach IIS
  • Kliknij prawym przyciskiem myszy moją pulę aplikacji projektu
  • W sekcji Model procesu otwórz Tożsamość
  • Wybierz opcję konta niestandardowego
  • Wprowadź nazwę użytkownika i hasło do komputera.
ParPar
źródło
8

Najlepszym rozwiązaniem problemu z logowaniem jest utworzenie użytkownika logowania w sqlServer. Oto kroki, aby utworzyć login SQL Server, który używa uwierzytelniania systemu Windows (SQL Server Management Studio):

  1. W SQL Server Management Studio otwórz Object Explorer i rozwiń folder wystąpienia serwera, w którym chcesz utworzyć nowy login.
  2. Kliknij prawym przyciskiem myszy folder Zabezpieczenia, wskaż polecenie Nowy, a następnie kliknij Zaloguj się.
  3. Na stronie Ogólne wprowadź nazwę użytkownika systemu Windows w polu Nazwa logowania.
  4. Wybierz opcję Uwierzytelnianie systemu Windows.
  5. Kliknij OK.

Na przykład, jeśli nazwa użytkownika to xyz\ASPNET, wprowadź tę nazwę w polu Nazwa logowania.

Musisz także zmienić mapowanie użytkownika, aby umożliwić dostęp do bazy danych, do której chcesz uzyskać dostęp.

Rajeev
źródło
8

W większości przypadków nie jest to problem z logowaniem, ale z tworzeniem samej bazy danych. Więc jeśli wystąpi błąd podczas tworzenia bazy danych, nie zostanie ona utworzona w pierwszej kolejności. W takim przypadku, jeśli spróbujesz się zalogować, niezależnie od użytkownika, logowanie zakończy się niepowodzeniem. Zwykle dzieje się tak z powodu logicznej błędnej interpretacji kontekstu db.

Odwiedź witrynę w przeglądarce i NAPRAWDĘ przeczytaj te dzienniki błędów, może to pomóc w wykryciu problemu z Twoim kodem (zwykle są to sprzeczne problemy logiczne z modelem).

W moim przypadku kod skompilowany dobrze, ten sam problem z logowaniem, podczas gdy nadal pobierałem studio zarządzania, przeszedłem przez dziennik błędów, naprawiłem ograniczenia kontekstu bazy danych i strona zaczęła działać poprawnie ... tymczasem studio zarządzania nadal pobiera

Sprawiedliwość O.
źródło
6

Dla mnie baza danych nie została utworzona, a kod EF powinien ją najpierw utworzyć, ale zawsze kończy się tym błędem. Te same parametry połączenia działały w domyślnym projekcie sieci Web ASPNET Core. Rozwiązaniem było dodanie

_dbContext.Database.EnsureCreated()

przed pierwszym kontaktem z bazą danych (przed umieszczeniem w bazie danych).

cyptus
źródło
4

Problem

Błąd prezentuje się jako komunikat podobny do tego:

Nie można otworzyć bazy danych „DATABASE NAME” żądanej przy logowaniu. Logowanie nie powiodło się. Logowanie nie powiodło się dla użytkownika XYZ.

  • Zwykle nie można naprawić tego błędu przez proste ponowne uruchomienie programu Visual Studio lub pełnego komputera.
  • Błąd można również znaleźć jako pozornie zablokowany plik bazy danych.

Poprawka

Rozwiązanie jest układane w następujących krokach. Nie utracisz żadnych danych w swojej bazie danych i nie powinieneś usuwać pliku bazy danych!

Wymaganie wstępne: musisz mieć zainstalowany program SQL Server Management Studio (pełny lub ekspresowy)

  1. Otwórz program SQL Server Management Studio
  2. W oknie „Połącz z serwerem” (File-> Connect object explorer) wpisz:
    • Typ serwera: aparat bazy danych
    • Nazwa serwera: (localdb) \ v11.0
    • Uwierzytelnianie: [Cokolwiek użyłeś podczas tworzenia lokalnej bazy danych. Prawdopodobnie uwierzytelnianie systemu Windows).
  3. Kliknij „Połącz”
  4. Rozwiń folder „Bazy danych” w Eksploratorze obiektów (Widok-> Eksplorator obiektów, F8)
  5. Znajdź swoją bazę danych. Powinien być nazwany pełną ścieżką do pliku bazy danych (.mdf)
    • Powinieneś zobaczyć, że na końcu nazwy bazy danych znajduje się napis „(Oczekiwanie na odzyskiwanie)” lub podczas próby rozszerzenia bazy danych nie będzie to możliwe i może, ale nie musi, wyświetlić komunikat o błędzie.
    • To jest problem! Twoja baza danych zasadniczo uległa awarii ...
  6. Kliknij prawym przyciskiem myszy bazę danych i wybierz „Zadania -> Odłącz ...”.
  7. W oknie odłączania wybierz swoją bazę danych z listy i zaznacz kolumnę „Porzuć połączenia”
  8. Kliknij OK.
  9. Baza danych powinna zniknąć z listy baz danych. Twój problem powinien zostać rozwiązany. Idź i uruchom aplikację, która korzysta z Twojej bazy danych localdb.
  10. Po uruchomieniu aplikacji Twoja baza danych pojawi się ponownie na liście baz danych - to prawda. Nie powinien już mówić „Oczekiwanie na naprawę”, ponieważ powinien działać prawidłowo.

Źródło rozwiązania: https://www.codeproject.com/Tips/775607/How-to-fix-LocalDB-Requested-Login-failed

Anton Lyhin
źródło
Problem w tym, że nie mogę nawet znaleźć tego DB.
Shimmy Weitzhandler
3

Próbowałem zaktualizować użytkownika i zadziałało. Zobacz poniższe polecenie.

USE ComparisonData// databaseName
EXEC  sp_change_users_login @Action='update_one', @UserNamePattern='ftool',@LoginName='ftool';

Wystarczy user('ftool')odpowiednio wymienić .

shashank
źródło
3

Dzieje się tak również, gdy wpiszesz złą nazwę DB

ex : xxx-db-dev to xxx-dev-db

Czasami to tylko głupi błąd. Potrzeba mi więcej niż 1 godziny, żeby się tego dowiedzieć :( ponieważ najpierw próbuję wielu trudnych rzeczy

Szary Wilk
źródło
2

To działa dla mnie.

  1. Przejdź do SQL Server >> Security >> Logins i kliknij prawym przyciskiem myszy NT AUTHORITY \ NETWORK SERVICE i wybierz Właściwości
  2. Na nowo otwartym ekranie Właściwości logowania przejdź do zakładki „Mapowanie użytkowników”.
  3. 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.
  4. Kliknij OK.

Przeczytaj tego bloga.

http://blog.sqlauthority.com/2009/08/20/sql-server-fix-error-cannot-open-database-requested-by-the-login-the-login-failed-login-failed-for- user-nt-Authoritynetwork-service /

Kamran
źródło
dzięki, użycie „ZARZĄDZANIA NT \ SYSTEM” rozwiązało mój problem.
Farzad Karimi,
2

Użyłem uwierzytelniania systemu Windows, aby połączyć się z plikiem .mdf lokalnej bazy danych, a moim serwerem lokalnym był serwer sql 2014. Mój problem został rozwiązany przy użyciu tych parametrów połączenia:

string sqlString = " Data Source = (LocalDB)\\MSSQLLocalDB;" + "AttachDbFilename = F:\\.........\\myDatabase.mdf; Integrated Security = True; Connect Timeout = 30";
Ehsan
źródło
Musiałem usunąć tę część „User Instance = True”, aby moja lokalna baza danych działała
Anonimowy
2

W moim przypadku to inna sprawa. Baza danych przeszła w tryb pojedynczego użytkownika, a drugie połączenie z bazą danych pokazywało ten wyjątek. Aby rozwiązać ten problem, wykonaj poniższe czynności.

  1. Upewnij się, że eksplorator obiektów wskazuje systemową bazę danych, taką jak master.
  2. Wykonaj a exec sp_who2i znajdź wszystkie połączenia z bazą danych „my_db”. Zabij wszystkie połączenia, robiąc, KILL { session id }gdzie identyfikator sesji to identyfikator SPID wymieniony przez sp_who2.
USE MASTER;
EXEC sp_who2
  1. Zmień bazę danych
USE MASTER;
ALTER DATABASE [my_db] SET MULTI_USER
GO
Krishanth Rajkumar
źródło
1

Nie widziałem tego wspomnianego w poprzednich numerach, więc pozwólcie, że wyrzucę inną możliwość. Może to być IFItestnieosiągalne lub po prostu nie istnieje. Na przykład, jeśli istnieje kilka konfiguracji, każda z własną bazą danych, może się zdarzyć, że nazwa bazy danych nie została zmieniona na poprawną dla bieżącej konfiguracji.

demongolem
źródło
1

Uwaga: jeśli korzystasz z usługi Windows do hostowania usługi sieciowej.

Musisz upewnić się, że Twoja usługa sieciowa używa właściwego konta logowania do łączenia się z SQL Server.

  • Otwarte usługi (zakładam, że usługa Windows została zainstalowana)
  • Kliknij usługę prawym przyciskiem myszy i przejdź do właściwości.
  • Kliknij kartę „Zaloguj się”
  • Kliknij przycisk opcji „To konto”
  • Kliknij „Przeglądaj”
  • Wpisz nazwę użytkownika komputera w polu tekstowym i kliknij przycisk „Sprawdź nazwę” po prawej stronie.
  • Kliknij tekst w polu tekstowym, naciśnij przycisk „OK”
  • wprowadź hasło logowania i Zastosuj
Koki Monoto
źródło
1

Zainspirowany odpowiedzią cyptusa, którego użyłem

_dbContext.Database.CreateIfNotExists();

na EF6 przed pierwszym kontaktem z bazą danych (przed wypełnieniem bazy danych).

Jesse Hufstetler
źródło
1

Jeśli nie utworzyłeś bazy danych na swoim serwerze, pojawi się ten sam błąd logowania. Upewnij się, że baza danych istnieje przed zalogowaniem.

AmirHossein Rezaei
źródło
1

Napotkałem ten problem podczas próby zapisu do domyślnej bazy danych podanej w szablonie mvc asp.net. Wynikało to z faktu, że baza danych nie została jeszcze utworzona.

Aby utworzyć bazę danych i upewnić się, że jest dostępna, wykonaj następujące kroki:

  1. Otwórz konsolę Menedżera pakietów w programie Visual Studio
  2. Uruchom polecenie „update-database”

Spowoduje to utworzenie bazy danych i uruchomienie w niej wszystkich niezbędnych migracji.

GrantByrne
źródło
0

Najlepszym rozwiązaniem byłoby użycie zintegrowanego uwierzytelniania systemu Windows, ponieważ jest ono bezpieczniejsze niż uwierzytelnianie sql. Utwórz nowego użytkownika systemu Windows na serwerze sql z niezbędnymi uprawnieniami i zmień użytkownika IIS w ustawieniach zabezpieczeń puli aplikacji.

Giorgi
źródło
0

Zauważyłem, że podczas tworzenia nowego loginu musiałem również ustawić opcję UserMapping i to rozwiązało problem. Mam nadzieję, że pomoże to każdemu, kto również utknął tutaj!

Edycja: Ustawienie loginu jako właściciela bazy danych rozwiązało również następny problem

DevDave
źródło
0

Czasami ten problem może się pojawić, jeśli otworzysz tę bazę danych na innym serwerze sql (na przykład, uruchomisz sql managment studio (SMS) i dodasz tę bazę danych) i zapomnisz zatrzymać ten serwer. W rezultacie - próbujesz połączyć aplikację z użytkownikiem już połączonym w tej bazie danych na innym serwerze. Aby to naprawić, spróbuj zatrzymać ten serwer przez Config. Dispatcher SQL Server.

Przepraszam za zły angielski. Z poważaniem, Ignat.

user3041948
źródło
0

W moim przypadku aplikacja asp.net zazwyczaj bez problemu łączy się z bazą danych. Zauważyłem taki komunikat w logach. I włączyć logi serwera SQL i dowiem się następujący komunikat:

2016-10-28 10:27:10.86 Logon       Login failed for user '****'. Reason: Failed to open the explicitly specified database '****'. [CLIENT: <local machine>]
2016-10-28 10:27:13.22 Server      SQL Server is terminating because of a system shutdown. This is an informational message only. No user action is required.

Wygląda więc na to, że serwer się restartował, a serwer SQL, który wyłączał się nieco wcześniej niż aplikacja ASP.NET i baza danych nie były dostępne przez kilka sekund przed restartem serwera.

Tomas Kubes
źródło
0

Nawet jeśli ustawiłeś login jako właściciel bazy danych i ustawiłeś mapowanie użytkownika dla bazy danych, która będzie używać loginu, sprawdź, czy rzeczywisty użytkownik DB (nie tylko login) ma rolę „właściciela”.

Chris Halcrow
źródło
0

W moim przypadku korzystałem z usługi Windows pod tożsamością „System”. Błąd:

System.Data.SqlClient.SqlException (0x80131904): 
Cannot open database "MyDbName" requested by the login. The login failed.
Login failed for user 'MYDOMAINNAME\HOSTNAME$'.

Problem w tym, że błąd jest bardzo mylący. Nawet po dodaniu loginu `` MYDOMAINNAME \ HOSTNAME $ '' do bazy danych i przyznaniu tego logowania sysadminowi oraz dodaniu użytkownika dla tego loginu do mojej docelowej bazy danych i uczynieniu tego użytkownika dbowner, nadal otrzymywałem ten sam błąd. Najwyraźniej musiałem zrobić to samo dla logowania 'NT AUTHORITY \ SYSTEM'. Po wykonaniu tej czynności udało mi się zalogować bez problemu. Nie wiem, dlaczego komunikat o błędzie narzeka „NAZWA_MÓJDOMY \ NAZWA_HOSTA $”. Usunąłem ten login i odpowiadającego mu użytkownika i wszystko nadal działa.

Greg Z.
źródło