Ich habe einen Webdienst erstellt, der einige Daten in db speichert. Aber ich bekomme diesen Fehler:
Öffnen der Datenbank "test" nicht möglich, die vom Login angefordert wurde. Die Anmeldung ist fehlgeschlagen. Anmeldung für Benutzer 'xyz\ASPNET' fehlgeschlagen.
Meine Verbindungszeichenfolge lautet
Data Source=.\SQLExpress;Initial Catalog=IFItest;Integrated Security=True
Nun, der Fehler ist ziemlich klar, nein? Sie versuchen, sich mit dem Benutzer "xyz/ASPNET" mit Ihrem SQL Server zu verbinden. 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 ein Login für dieses Konto in SQL Server oder geben Sie ein anderes gültiges SQL Server-Konto in Ihrer Verbindungszeichenfolge an.
Können Sie uns Ihre Verbindungszeichenfolge zeigen (indem Sie Ihre ursprüngliche Frage aktualisieren)?
UPDATE: Ok, Sie verwenden die integrierte Windows-Authentifizierung -> Sie müssen einen SQL Server-Login für "xyz\ASPNET" auf Ihrem SQL Server erstellen - oder Ihre Verbindungszeichenfolge folgendermaßen ä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.
Ich würde für die zweite Option gehen: Die Fehlermeldung besagt, dass die Standarddatenbank entweder nicht vorhanden ist oder keine Rechte enthält und nicht als Login eingerichtet ist.
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]
Die beste Lösung für das Anmeldeproblem ist das Erstellen eines Anmeldebenutzers in sqlServer. Zum Erstellen eines SQL Server-Anmeldenamens unter Verwendung der Windows-Authentifizierung (SQL Server Management Studio) gehen Sie wie folgt vor:
Wenn der Benutzername beispielsweise xyz\ASPNET
lautet, geben Sie diesen Namen in das Feld Anmeldename ein.
Sie müssen auch die Benutzerzuordnung ändern, um den Zugriff auf die Datenbank zu ermöglichen, auf die Sie zugreifen möchten.
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 sie nicht an erster Stelle erstellt. In diesem Fall schlägt die Anmeldung fehl, wenn Sie versucht haben, sich unabhängig vom Benutzer anzumelden. Dies geschieht normalerweise aufgrund einer logischen Fehlinterpretation des Datenbankkontextes.
Besuchen Sie die Website in einem Browser, und lesen Sie die Fehlerprotokolle WIRKLICH, um das Problem mit dem Code zu erkennen (normalerweise widersprüchliche Logikprobleme mit dem Modell).
In meinem Fall kompilierte der Code gut, dasselbe Anmeldeproblem, während ich noch Management Studio herunterlud, ich das Fehlerprotokoll durchging, meine DB-Kontextbeschränkungen korrigierte und die Website einwandfrei lief
Ich hatte dieses Problem und was für mich gelöst wurde war:
Der Fehler stellt sich als eine ähnliche Meldung dar:
Datenbank "DATABASE NAME" kann nicht geöffnet werden, die vom Login angefordert wurde. Das Login gescheitert. Anmeldung für Benutzer XYZ fehlgeschlagen.
Die Lösung wird in den folgenden Schritten festgelegt. 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.
Die Quelle der Lösung:https://www.codeproject.com/Tips/775607/How-to-fix-LocalDB-Requested-Login-failed
Für mich wurde die Datenbank nicht erstellt und EF-Code sollte sie zuerst erstellt haben, endete jedoch immer in diesem Fehler. Dieselbe Verbindungszeichenfolge funktionierte in einem Standard-Webprojekt von aspnet core. Die Lösung war hinzuzufügen
_dbContext.Database.EnsureCreated()
vor dem ersten Datenbankkontakt (vor dem Seeding von DB).
Ich habe die Windows-Authentifizierung verwendet, um eine Verbindung zur lokalen Datenbank-MDF-Datei herzustellen. Mein lokaler Server war SQL Server 2014. Mein Problem wurde mithilfe der folgenden Verbindungszeichenfolge behoben:
string sqlString = " Data Source = (LocalDB)\\MSSQLLocalDB;" + "AttachDbFilename = F:\\.........\\myDatabase.mdf; Integrated Security = True; Connect Timeout = 30";
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 Benutzer IIS in den Sicherheitseinstellungen des Anwendungspools.
Ich habe dies in den letzten Ausgaben nicht erwähnt. Lassen Sie mich eine andere Möglichkeit aus dem Weg räumen. Es kann sein, dass IFItest
nicht erreichbar ist oder einfach nicht existiert. Wenn Sie beispielsweise über mehrere Konfigurationen verfügen, die jeweils über eine eigene Datenbank verfügen, wurde der Datenbankname möglicherweise nicht in den für die aktuelle Konfiguration richtigen Namen geändert.
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';
Ersetzen Sie einfach user('ftool')
entsprechend.
Inspiriert von der Antwort von cyptus, die ich verwendet habe
_dbContext.Database.CreateIfNotExists();
auf EF6 vor dem ersten Datenbankkontakt (vor dem DB-Seeding).
Dies geschieht auch, wenn Sie einen falschen DB-Namen eingeben
ex : xxx-db-dev to xxx-dev-db
Irgendwann ist es nur ein dummer Fehler. Ich brauche mehr als 1 Stunden, um das herauszufinden :( weil ich gerade viel schwieriges Ding zuerst probiere
Wenn Sie die Datenbank nicht auf Ihrem Server erstellt haben, wird derselbe Anmeldefehler angezeigt. Stellen Sie sicher, dass die Datenbank vorhanden ist, bevor Sie sich anmelden.
In meinem Fall kann sich die asp.net-Anwendung normalerweise problemlos mit der Datenbank verbinden. Ich habe eine solche Nachricht in Protokollen bemerkt. Ich schalte die SQL Server-Protokolle ein und finde diese Nachricht 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 früher als ASP.NET-Anwendung heruntergefahren wurde und die Datenbank einige Sekunden vor dem Neustart des Servers nicht verfügbar war.
Das funktioniert für mich.
Lesen Sie diesen Blog.
Selbst wenn Sie das Login als DB-Besitzer und die Benutzerzuordnung für die Datenbank festgelegt haben, die das Login verwendet, prüfen Sie, ob der tatsächliche DB-Benutzer (nicht nur das Login) die Rolle des "Inhabers" hat.
Ich habe festgestellt, dass ich beim Erstellen eines neuen Logins auch die UserMapping-Option einstellen musste. Dadurch wurde das Problem für mich gelöst. Ich hoffe, das hilft jedem, der sich auch hier feststeckt!
Bearbeiten: Das Einstellen des Logins als DB-Besitzer löste auch das nächste Problem
In meinem Fall habe ich einen Windows-Dienst unter der Identität "System" 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. Auch nachdem ich der Datenbank den Benutzernamen "MYDOMAINNAME\HOSTNAME $" hinzugefügt und diesem Benutzer den Zugriff auf sysadmin gewährt und einen Benutzer für diesen Anmeldenamen in meiner Zieldatenbank hinzugefügt und diesen Benutzer zu "dbowner" gemacht habe, wurde immer noch der gleiche Fehler angezeigt. Anscheinend musste ich dasselbe für die Anmeldung bei 'NT AUTHORITY\SYSTEM' tun. Danach konnte ich mich problemlos einloggen. Ich weiß nicht, warum sich die Fehlermeldung über "MYDOMAINNAME\HOSTNAME $" beschwert. Ich habe das Login und den entsprechenden Benutzer gelöscht und alles funktioniert noch.
Manchmal tritt dieses Problem auf, wenn Sie diese Datenbank in einem anderen SQL-Server öffnen (z. B. starten Sie SQL Management Studio (SMS) und fügen diese Datenbank hinzu) und vergessen Sie, diesen Server zu stoppen. Als Ergebnis - Sie versuchen, eine Verbindung mit Benutzern herzustellen, die bereits in dieser Datenbank unter einem anderen Server verbunden sind. Um dies zu beheben, stoppen Sie diesen Server mit Config. Dispatcher SQL Server.
Ich entschuldige mich für schlechtes Englisch. Herzliche Grüße, Ignat.
Hinweis: Bei Verwendung eines Windows-Dienstes zum Hosten des Webservice.
Sie müssen sicherstellen, dass Ihr Webservice das richtige Konto Anmelden verwendet, um eine Verbindung zu SQL Server herzustellen.