Der vom Login angeforderte Datenbank-Test kann nicht geöffnet werden. Die Anmeldung ist fehlgeschlagen. Anmeldung für Benutzer 'xyz \ ASPNET' fehlgeschlagen

97

Ich habe einen Webdienst erstellt, der einige Daten in db speichert. Aber ich bekomme diesen Fehler:

Die vom Login angeforderte Datenbank "test" kann nicht geöffnet werden. Die Anmeldung ist fehlgeschlagen. Anmeldung für Benutzer 'xyz \ ASPNET' fehlgeschlagen.

Meine Verbindungszeichenfolge ist

Data Source=.\SQLExpress;Initial Catalog=IFItest;Integrated Security=True
coure2011
quelle
Wir brauchen viel mehr Informationen, bevor wir dies diagnostizieren können.
sblom
Ich hatte dieses Problem und schloss Visual Studio und öffnete es wieder und es fing an zu funktionieren ..
tree_are_great

Antworten:

47

Nun, der Fehler ist ziemlich klar, nein? Sie versuchen, mit dem Benutzer "xyz / ASPNET" eine Verbindung zu Ihrem SQL Server herzustellen. Dies ist das Konto, unter dem Ihre ASP.NET-App ausgeführt wird.

Dieses Konto darf keine Verbindung zu SQL Server herstellen. Erstellen Sie entweder eine Anmeldung bei SQL Server für dieses Konto oder geben Sie in Ihrer Verbindungszeichenfolge ein anderes gültiges SQL Server-Konto an.

Können Sie uns Ihre Verbindungszeichenfolge anzeigen (indem Sie Ihre ursprüngliche Frage aktualisieren)?

UPDATE: Ok, Sie verwenden die integrierte Windows-Authentifizierung -> Sie müssen eine SQL Server-Anmeldung für "xyz \ ASPNET" auf Ihrem SQL Server erstellen - oder Ihre Verbindungszeichenfolge in Folgendes ändern:

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

Wenn Sie einen Benutzer "xyz" mit dem Kennwort "top $ secret" in Ihrer Datenbank haben.

marc_s
quelle
11
Nicht "darf keine Verbindung zu SQL Server herstellen", aber "darf die Datenbank" test "nicht verwenden".
wRAR
@wRAR: true - aber ich denke, die Wahrscheinlichkeit, dass die Benutzeranmeldung auf dem Server vorhanden ist, aber in dieser bestimmten Datenbank nicht aktiviert ist, ist wahrscheinlich
gering
Siehe auch "Database = IFItest" vs "test", obwohl dies ein Druckfehler sein kann.
wRAR
2
Ein Punkt, den Sie nie angesprochen haben, ist, dass der DB-Name auch falsch sein könnte. Ich erhielt eine ebenso aussehende Ausnahmemeldung von meinem Azure SQL Server und stellte fest, dass ich in einer der Verbindungszeichenfolgen im C # -Code in meinem ASP.NET-Projekt einen falschen Namen für meine Datenbank angegeben hatte.
Ron16
Ron, das war mein Problem. Ich hatte sogar die Rechtschreibung überprüft, aber selbst dann verpasst.
Darrell Lloyd Harvey
32
  • Entweder: "xyz \ ASPNET" ist kein Login (in sys.server_principals)
  • Oder: "xyz \ ASPNET" ist eingerichtet, aber im Datenbanktest (sys.database_principals) keinem Benutzer zugeordnet.

Ich würde mich für die zweite Option entscheiden: Die Fehlermeldung impliziert, dass die Standarddatenbank entweder nicht vorhanden ist oder keine Rechte darin hat, anstatt nicht als Login eingerichtet zu sein.

Um zu testen, ob es als Login eingerichtet ist

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

Wenn NULL

CREATE LOGIN [xyz\ASPNET] FROM WINDOWS

Wenn nicht NULL

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

Wenn NULL

USE test
GO
CREATE USER [xyz\ASPNET] FROM LOGIN [xyz\ASPNET]
gbn
quelle
1
Das ist einfach großartig!, Ein einfacher Workflow zum Erkennen und Lösen des Problems.
Mazen el Senih
12

Ich hatte dieses Problem und was es für mich löste, war:

  • Wechseln Sie zu den Anwendungspools im IIS
  • Klicken Sie mit der rechten Maustaste auf meinen Projektanwendungspool
  • Öffnen Sie im Abschnitt Prozessmodell die Option Identität
  • Wählen Sie die Option Benutzerdefiniertes Konto
  • Geben Sie Ihren PC-Benutzernamen und Ihr Passwort ein.
ParPar
quelle
Hat auch für mich gearbeitet!
Mazen el Senih
8

Die beste Lösung für das Anmeldeproblem besteht darin, einen Anmeldebenutzer in sqlServer zu erstellen. Führen Sie die folgenden Schritte aus, um eine SQL Server-Anmeldung mit Windows-Authentifizierung (SQL Server Management Studio) zu erstellen:

  1. Öffnen Sie in SQL Server Management Studio den Objekt-Explorer und erweitern Sie den Ordner der Serverinstanz, in der die neue Anmeldung erstellt werden soll.
  2. Klicken Sie mit der rechten Maustaste auf den Sicherheitsordner, zeigen Sie auf Neu, und klicken Sie dann auf Anmelden.
  3. Geben Sie auf der Seite Allgemein den Namen eines Windows-Benutzers in das Feld Anmeldename ein.
  4. Wählen Sie Windows-Authentifizierung.
  5. OK klicken.

Wenn der Benutzername beispielsweise lautet xyz\ASPNET, geben Sie diesen Namen in das Feld Anmeldename ein.

Außerdem müssen Sie die Benutzerzuordnung ändern, um den Zugriff auf die Datenbank zu ermöglichen, auf die Sie zugreifen möchten.

Rajeev
quelle
8

In den meisten Fällen handelt es sich nicht um ein Anmeldeproblem, sondern um ein Problem beim Erstellen der Datenbank. Wenn also beim Erstellen Ihrer Datenbank ein Fehler auftritt, wird diese überhaupt nicht erstellt. In diesem Fall schlägt die Anmeldung fehl, wenn Sie versuchen, sich unabhängig vom Benutzer anzumelden. Dies geschieht normalerweise aufgrund einer logischen Fehlinterpretation des Datenbankkontexts.

Besuchen Sie die Site in einem Browser und lesen Sie diese Fehlerprotokolle WIRKLICH. Dies kann Ihnen helfen, das Problem mit Ihrem Code zu erkennen (normalerweise widersprüchliche Logikprobleme mit dem Modell).

In meinem Fall wurde der Code einwandfrei kompiliert, dasselbe Anmeldeproblem, während ich noch Management Studio herunterlud. Ich habe das Fehlerprotokoll durchgesehen, meine Datenbankkontextbeschränkungen behoben und die Site wurde einwandfrei ausgeführt. Währenddessen lädt Management Studio noch herunter

Gerechtigkeit O.
quelle
6

Für mich wurde die Datenbank nicht erstellt und EF-Code hätte sie zuerst erstellen sollen, endet aber immer mit diesem Fehler. Dieselbe Verbindungszeichenfolge funktionierte im Standard-Webprojekt von aspnet core. Die Lösung bestand darin, hinzuzufügen

_dbContext.Database.EnsureCreated()

vor dem ersten Datenbankkontakt (vor dem DB-Seeding).

Cyptus
quelle
4

Das Thema

Der Fehler wird als ähnliche Meldung angezeigt:

Die vom Login angeforderte Datenbank "DATABASE NAME" kann nicht geöffnet werden. Die Anmeldung ist fehlgeschlagen. Anmeldung für Benutzer XYZ fehlgeschlagen.

  • Der Fehler kann normalerweise nicht durch ein einfaches Visual Studio oder einen Neustart des gesamten Computers behoben werden.
  • Der Fehler kann auch als scheinbar gesperrte Datenbankdatei gefunden werden.

Die Reparatur

Die Lösung wird in den folgenden Schritten gelegt. Sie verlieren keine Daten in Ihrer Datenbank und sollten Ihre Datenbankdatei nicht löschen!

Voraussetzung: Sie müssen SQL Server Management Studio (Full oder Express) installiert haben.

  1. Öffnen Sie SQL Server Management Studio
  2. Geben Sie im Fenster "Mit Server verbinden" (Datei-> Objekt-Explorer verbinden) Folgendes ein:
    • Servertyp: Datenbankmodul
    • Servername: (localdb) \ v11.0
    • Authentifizierung: [Was auch immer Sie beim Erstellen Ihrer lokalen Datenbank verwendet haben. Wahrscheinlich Windows-Authentifizierung).
  3. Klicken Sie auf "Verbinden"
  4. Erweitern Sie den Ordner "Datenbanken" im Objekt-Explorer (Ansicht-> Objekt-Explorer, F8).
  5. Finden Sie Ihre Datenbank. Es sollte als vollständiger Pfad zu Ihrer Datenbankdatei (.mdf) angegeben werden
    • Am Ende des Datenbanknamens sollte "(Pending Recovery)" angezeigt werden. Wenn Sie versuchen, die Datenbank zu erweitern, kann und wird möglicherweise keine Fehlermeldung angezeigt.
    • Das ist das Problem! Ihre Datenbank ist im Wesentlichen abgestürzt.
  6. Klicken Sie mit der rechten Maustaste auf die Datenbank und wählen Sie "Aufgaben -> Trennen ...".
  7. Wählen Sie im Trennfenster Ihre Datenbank in der Liste aus und überprüfen Sie die Spalte "Verbindungen trennen".
  8. OK klicken.
  9. Sie sollten sehen, dass die Datenbank aus der Liste der Datenbanken verschwindet. Ihr Problem sollte jetzt behoben sein. Führen Sie Ihre Anwendung aus, die Ihren localdb verwendet.
  10. Nach dem Ausführen Ihrer Anwendung wird Ihre Datenbank erneut in der Liste der Datenbanken angezeigt - dies ist korrekt. Es sollte nicht mehr "Ausstehende Wiederherstellung" angezeigt werden, da es ordnungsgemäß funktionieren sollte.

Die Quelle der Lösung: https://www.codeproject.com/Tips/775607/How-to-fix-LocalDB-Requested-Login-failed

Anton Lyhin
quelle
Das Problem ist, dass ich diese Datenbank nicht einmal finden kann.
Shimmy Weitzhandler
3

Dies kann auch passieren, wenn Sie den falschen Namen der Datenbank eingeben

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

Manchmal ist es nur ein dummer Fehler. Ich brauche mehr als 1 Stunde, um das herauszufinden :( weil ich zuerst eine Menge schwieriger Dinge versuche

Grauer Wolf
quelle
2

Ich habe versucht, den Benutzer zu aktualisieren, und es hat funktioniert. Siehe den Befehl unten.

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

Einfach entsprechend ersetzen user('ftool').

Shashank
quelle
2

Das funktioniert bei mir.

  1. Gehen Sie zu SQL Server >> Sicherheit >> Anmeldungen, klicken Sie mit der rechten Maustaste auf NT AUTHORITY \ NETWORK SERVICE und wählen Sie Eigenschaften
  2. Wechseln Sie im neu geöffneten Bildschirm der Anmeldeeigenschaften zur Registerkarte "Benutzerzuordnung".
  3. Wählen Sie dann auf der Registerkarte "Benutzerzuordnung" die gewünschte Datenbank aus, insbesondere die Datenbank, für die diese Fehlermeldung angezeigt wird.
  4. OK klicken.

Lesen Sie diesen Blog.

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
quelle
danke, mit "NT AUTHORITY \ SYSTEM" mein Problem gelöst.
Farzad Karimi
2

Ich habe die Windows-Authentifizierung verwendet, um eine Verbindung zur MDF-Datei der lokalen Datenbank herzustellen, und mein lokaler Server war der SQL Server 2014. Mein Problem wurde mithilfe dieser Verbindungszeichenfolge behoben:

string sqlString = " Data Source = (LocalDB)\\MSSQLLocalDB;" + "AttachDbFilename = F:\\.........\\myDatabase.mdf; Integrated Security = True; Connect Timeout = 30";
Ehsan
quelle
Ich musste diesen Teil "User Instance = True" entfernen, damit meine lokale Datenbank funktioniert
Anonym
2

In meinem Fall ist es ein anderes Problem. Die Datenbank wurde in den Einzelbenutzermodus umgewandelt, und eine zweite Verbindung zur Datenbank zeigte diese Ausnahme. Führen Sie die folgenden Schritte aus, um dieses Problem zu beheben.

  1. Stellen Sie sicher, dass der Objekt-Explorer auf eine Systemdatenbank wie master verweist.
  2. Führen Sie a aus exec sp_who2und suchen Sie alle Verbindungen zur Datenbank 'my_db'. Beenden Sie alle Verbindungen, indem Sie die KILL { session id }Sitzungs-ID als die von sp_who2 aufgeführte SPID angeben.
USE MASTER;
EXEC sp_who2
  1. Ändern Sie die Datenbank
USE MASTER;
ALTER DATABASE [my_db] SET MULTI_USER
GO
Krishanth Rajkumar
quelle
1

Ich habe dies in den vorherigen Ausgaben nicht erwähnt gesehen, also lassen Sie mich eine andere Möglichkeit ausschließen. Es könnte sein, dass IFItestes nicht erreichbar ist oder einfach nicht existiert. Wenn beispielsweise mehrere Konfigurationen mit jeweils einer eigenen Datenbank vorhanden sind, wurde möglicherweise der Datenbankname nicht in den richtigen Namen für die aktuelle Konfiguration geändert.

Demongolem
quelle
1

NB: Wenn Sie einen Windows-Dienst zum Hosten des Webservices verwenden.

Sie müssen sicherstellen, dass Ihr Webservice das richtige Anmeldekonto verwendet, um eine Verbindung zu SQL Server herzustellen.

  • Offene Dienste (Ich gehe davon aus, dass der Windows-Dienst installiert wurde)
  • Klicken Sie mit der rechten Maustaste auf den Dienst und gehen Sie zu den Eigenschaften.
  • Klicken Sie auf die Registerkarte "Anmelden"
  • Klicken Sie auf das Optionsfeld "Dieses Konto"
  • Klicken Sie auf "Durchsuchen"
  • Geben Sie den PC-Benutzernamen in das Textfeld ein und klicken Sie rechts auf die Schaltfläche "Name überprüfen".
  • Klicken Sie im Textfeld auf Text und klicken Sie auf "OK"
  • Geben Sie das Login-Passwort ein und bewerben Sie sich
Koki Monoto
quelle
1

Inspiriert von der Antwort von Cyptus, die ich verwendet habe

_dbContext.Database.CreateIfNotExists();

auf EF6 vor dem ersten Datenbankkontakt (vor dem DB-Seeding).

Jesse Hufstetler
quelle
1

Wenn Sie die Datenbank nicht auf Ihrem Server erstellt haben, wird der gleiche Anmeldefehler angezeigt. Stellen Sie sicher, dass die Datenbank vorhanden ist, bevor Sie sich anmelden.

AmirHossein Rezaei
quelle
1

Ich bin auf dieses Problem gestoßen, als ich versucht habe, in die Standarddatenbank zu schreiben, die in der asp.net mvc-Vorlage enthalten ist. Dies lag daran, dass die Datenbank noch nicht erstellt wurde.

Gehen Sie folgendermaßen vor, um die Datenbank zu erstellen und sicherzustellen, dass sie zugänglich ist:

  1. Öffnen Sie die Paketmanagerkonsole in Visual Studio
  2. Führen Sie den Befehl "update-database" aus

Dadurch wird die Datenbank erstellt und alle erforderlichen Migrationen ausgeführt.

GrantByrne
quelle
0

Die beste Option wäre die Verwendung der integrierten Windows-Authentifizierung, da diese sicherer ist als die SQL-Authentifizierung. Erstellen Sie einen neuen Windows-Benutzer in SQL Server mit den erforderlichen Berechtigungen und ändern Sie den IIS-Benutzer in den Sicherheitseinstellungen des Anwendungspools.

Giorgi
quelle
0

Ich stellte fest, dass ich beim Erstellen eines neuen Logins auch die UserMapping-Option festlegen musste, was das Problem für mich löste. Hoffe das hilft jedem, der sich auch hier festgefahren hat!

Bearbeiten: Das Festlegen des Logins als Datenbankbesitzer löste auch das nächste Problem

DevDave
quelle
0

Manchmal kann dieses Problem auftreten, wenn Sie diese Datenbank auf einem anderen SQL-Server öffnen (z. B. starten Sie SQL Management Studio (SMS) und fügen diese Datenbank hinzu) und vergessen, diesen Server zu stoppen. Infolgedessen versucht Ihre App, eine Verbindung mit einem Benutzer herzustellen, der bereits in dieser Datenbank unter einem anderen Server verbunden ist. Um dies zu beheben, stoppen Sie diesen Server mit Config. Dispatcher SQL Server.

Ich entschuldige mich für schlechtes Englisch. Herzliche Grüße, Ignat.

user3041948
quelle
0

In meinem Fall kann die asp.net-Anwendung normalerweise problemlos eine Verbindung zur Datenbank herstellen. Ich habe eine solche Meldung in Protokollen bemerkt. Ich schalte die SQL Server-Protokolle ein und finde diese Meldung heraus:

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.

Es scheint also, dass der Server neu gestartet wurde und der SQL Server etwas früher als die ASP.NET-Anwendung heruntergefahren wurde und die Datenbank vor dem Neustart des Servers einige Sekunden lang nicht verfügbar war.

Tomas Kubes
quelle
0

Selbst wenn Sie die Anmeldung als DB-Eigentümer festgelegt und die Benutzerzuordnung für die Datenbank festgelegt haben, die die Anmeldung verwenden soll, überprüfen Sie, ob der tatsächliche DB-Benutzer (nicht nur die Anmeldung) die Rolle des Eigentümers hat.

Chris Halcrow
quelle
0

In meinem Fall habe ich einen Windows-Dienst unter "System" -Identität ausgeführt. Der Fehler war:

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

Das Problem ist, dass der Fehler sehr irreführend ist. Selbst nachdem ich der Datenbank die Anmeldung 'MYDOMAINNAME \ HOSTNAME $' hinzugefügt und diesem Anmeldesystemadministrator Zugriff gewährt und einen Benutzer für diese Anmeldung in meiner Zieldatenbank hinzugefügt und diesen Benutzer zum Dbowner gemacht habe, wurde immer noch der gleiche Fehler angezeigt. Anscheinend musste ich dasselbe für die Anmeldung 'NT AUTHORITY \ SYSTEM' tun. Danach konnte ich mich problemlos anmelden. Ich weiß nicht, warum sich die Fehlermeldung über 'MYDOMAINNAME \ HOSTNAME $' beschwert. Ich habe diesen Login und den entsprechenden Benutzer gelöscht und alles funktioniert noch.

Greg Z.
quelle