MSSQLSERVER_4064
Gilt für: SQL Server
Details
attribute | Wert |
---|---|
Produktname | SQL Server |
Ereignis-ID | 4064 |
Ereignisquelle | MSSQLSERVER |
Komponente | SQLEngine |
Symbolischer Name | DB_UFAIL_FATAL |
Meldungstext | Die Standarddatenbank des Benutzers kann nicht geöffnet werden. Fehler bei der Anmeldung. |
Erklärung
Die SQL Server-Anmeldung konnte keine Verbindung mit SQL Server herstellen, entweder aufgrund von Berechtigungsproblemen mit einem Datenbankbenutzer, der der Anmeldung in der Standarddatenbank zugeordnet ist, oder aufgrund eines Problems mit der Standarddatenbank.
Berechtigungsprobleme können eine oder mehrere der folgenden Sein:
- Die Anmeldung verfügt nicht über einen entsprechenden zugeordneten Benutzer in der Standarddatenbank.
- Sie haben der Anmeldung eine Standarddatenbank zugewiesen, aber keine Benutzerzuordnung in der angegebenen Datenbank erstellt.
- Der zugeordnete Benutzer für die Anmeldung wurde zugriff verweigert. (Dies kann beispielsweise passieren, wenn der Benutzer versehentlich einer db_denydatareader festen Datenbankrolle hinzugefügt wird.)
Die Standarddatenbank ist möglicherweise zum Zeitpunkt der Verbindung aus den folgenden Gründen nicht verfügbar:
- Die Standarddatenbank befindet sich im verdächtigen Modus.
- Die Standarddatenbank ist nicht mehr vorhanden.
- Der Standarddatenbankname ist nicht korrekt.
- Die Standarddatenbank befindet sich im Einzelbenutzermodus, und die einzige verfügbare Verbindung wird bereits von jemandem oder einer anderen Person verwendet.
- Die Standarddatenbank wurde getrennt.
- Die Standarddatenbank wird auf einen RESTRICTED_USER Zustand festgelegt.
- Die Standarddatenbank ist offline.
- Die Standarddatenbank ist auf einen NOTFALLzustand festgelegt.
- Die Standarddatenbank ist Teil einer Datenbankspiegelung.
Darüber hinaus kann das Anmeldekonto Mitglied mehrerer Gruppen sein, und die Standarddatenbank für eine dieser Gruppen ist zum Zeitpunkt der Verbindung nicht verfügbar.
Weitere Informationen zu Datenbankbenutzern in SQL Server finden Sie unter Erstellen eines Datenbankbenutzers.
Aktion des Benutzers
Sie können eine der folgenden Aktionen durchführen:
Problem umgehen
Wenn Sie nicht auf die aktuell konfigurierte Standarddatenbank zugreifen müssen und nur für andere Vorgänge mit SQL Server Management Studio (SSMS) eine Verbindung mit der SQL Server-Instanz herstellen müssen, führen Sie die folgenden Schritte aus:
Öffnen Sie SQL Server Management Studio (SSMS).
Wählen Sie auf Objekt-Explorer "Verbinden">Datenbank-Engine aus.
Füllen Sie das Dialogfeld "Mit Server verbinden" aus.
Klicken Sie auf Optionen.
Ändern Sie unter "Verbindungseigenschaften" den Wert "Mit Datenbank verbinden" mithilfe einer der folgenden Optionen:
Wenn die Anmeldung Mitglied der Sysadmin-Rolle ist, geben Sie
master
die Option "Verbinden" ein, und wählen Sie "Verbinden" aus, um eine Verbindung mit SQL Server herzustellen. Nachdem Sie erfolgreich eine Verbindung mit SQL Server hergestellt haben, können Sie Ihre Standarddatenbank in eine andere Datenbank ändern, die derzeit auf der Seite "Allgemein " der Anmeldeeigenschaften in SSMS verfügbar ist. Weitere Informationen finden Sie unter Erstellen eines Anmeldenamens.Wenn die Anmeldung kein Mitglied der Sysadmin-Rolle ist, geben Sie einen Datenbanknamen auf dem Server ein, auf den Sie wissen, dass Sie Zugriff haben. Alternativ können Sie versuchen, einen Systemdatenbanknamen wie
master
"Verbinden" einzugeben. Dieser Schritt funktioniert möglicherweise nicht, wenn Ihr Systemadministrator explizit Berechtigungen für einen Gastbenutzer in dermaster
Datenbank verweigert hat. In diesem Szenario müssen Sie mit Ihrem Systemadministrator zusammenarbeiten, um das Problem zu beheben.
Beheben des Problems
Ein Systemadministrator kann anhand der folgenden Abfrage überprüfen, was die aktuelle Standarddatenbank des Benutzers ist:
SELECT name, default_database_name
FROM sys.server_principals
WHERE type = 'S' AND name = '<sql-login>';
Verwenden Sie die folgende Tabelle, um die geeignete Aktion zum Beheben des Problems für zugeordnete Ursachen zu ermitteln:
Ursache | Lösung |
---|---|
In der Standarddatenbank der Anmeldung ist keine Benutzerzuordnung vorhanden, oder der Benutzer hat den Zugriff verweigert. | Diese Datenbankbenutzer werden auch als verwaiste Benutzer bezeichnet. Dieses Problem tritt in der Regel auf, wenn Datenbanken zwischen zwei Serverinstanzen verschoben werden und eine der häufigsten Ursachen des Fehlers 4064 ist. Informationen zum Erkennen verwaister Benutzer und zur Behebung des Problems finden Sie unter Problembehandlung für verwaiste Benutzer (SQL Server). |
Für die Anmeldung ist kein Datenbankbenutzer vorhanden. | Erstellen Sie einen Datenbankbenutzer , und weisen Sie relevante Berechtigungen für den Zugriff auf die Datenbank zu. |
Datenbankbenutzerkonto verweigert Berechtigungen für den Zugriff auf die Datenbank | Navigieren Sie zu den Benutzereigenschaften in der Datenbank (Sicherheitsbenutzer des Datenbankknotens >>erweitern), und überprüfen Sie, ob der Benutzer Teil db_denydatareader Rolle auf der Seite "Mitgliedschaft" ist. Sie können auch die effektiven Berechtigungen eines Benutzers mithilfe von sys.fn_my_permissions überprüfen. |
Die Standarddatenbank befindet sich im verdächtigen Modus. | Es gibt verschiedene Gründe dafür, dass eine Datenbank als fehlerverdächtig eingestuft wird. Mögliche Ursachen sind Denial of access to a database resource by the operating system and the unavailability or corruption of one or more database files. Sie können den Status der Datenbank mithilfe dieser Abfrage überprüfen: SELECT DATABASEPROPERTYEX (N'<dbname>', N'STATUS') AS N'Database Status'; . In SSMS wird der Status verdächtiger Datenbanken als angezeigt (Wiederherstellungs ausstehend). Möglicherweise müssen Sie die Datenbank aus der Sicherung wiederherstellen, um diese Situation zu beheben. |
Falscher Datenbankname in Verbindungszeichenfolge | Wenn Sie versuchen, eine Verbindung mit einer Datenbank herzustellen, die nicht vorhanden ist, wird möglicherweise die folgende Fehlermeldung angezeigt:Cannot open database "AdventureWorks" requested by the login. The login failed. Das Datenbankverwaltungssystem (DBMS) zeigt möglicherweise auch die Login failed for user CONTOSO\user1 Fehlermeldung an. Weitere Informationen finden Sie unter MSSQLSERVER_18456.Das SQL Server-Fehlerprotokoll hat die folgende Meldung: "Die Anmeldung für den Benutzer 'CONTOSO\User1' ist fehlgeschlagen. Grund: Fehler beim Öffnen der explizit angegebenen Datenbank 'AdventureWorks'." Um diesen Fehler zu beheben, stellen Sie sicher, dass der Datenbankname sowohl in der Fehlermeldung als auch im Fehlerprotokolleintrag identisch ist. Ändern Sie die Verbindungszeichenfolge, wenn sie falsch ist, oder erteilen Sie dem Benutzer die erforderlichen Berechtigungen. |
Die Standarddatenbank ist nicht mehr vorhanden. | Wenn Sie die Datenbank absichtlich vom Server entfernt haben, ändern Sie die Standarddatenbank für die Anmeldung in eine andere vorhandene Datenbank auf dem Server mithilfe von SSMS oder einer ALTER LOGIN (Transact-SQL) -Anweisung. Optional können Sie überprüfen, ob andere Anmeldungen auf dem Server vorhanden sind, deren Standarddatenbank mithilfe dieser Abfrage auf diese nicht vorhandene Datenbank festgelegt ist: SELECT name AS Login_Name FROM sys.server_principals where default_database_name = '<removed-dbname>'; |
Die Standarddatenbank befindet sich im Einzelbenutzermodus, und die einzige Verbindung wird vom Administrator oder einer anderen Person verwendet. | Wenn die Datenbank für Wartungszwecke auf den Einzelbenutzermodus festgelegt ist, sollten Sie sie nach Abschluss der Wartungsaktivität mithilfe dieser Abfrage auf den Mehrbenutzermodus zurücksetzen: ALTER DATABASE <dbname> SET MULTI_USER; Weitere Informationen finden Sie unter So legen Sie den Einzelbenutzermodus für eine Datenbank fest. Hinweis: Um zu überprüfen, ob sich eine Datenbank im Einzelbenutzermodus befindet, können Sie diese Abfrage verwenden: SELECT name, user_access_desc FROM sys.databases WHERE name = '<dbname>'; .Wenn Sie weiterhin den Zugriff auf die Datenbank einschränken müssen, aber die Konnektivität für die betroffenen Anmeldungen aktivieren möchten, ändern Sie die Standarddatenbank in eine andere Datenbank auf dem Server. |
Die Standarddatenbank wurde getrennt. | Wenn Sie eine Datenbank trennen, wird sie aus der SQL Server-Instanz entfernt und kann nicht mehr darauf zugegriffen werden. Um sie für Anmeldungen verfügbar zu machen, fügen Sie die Datenbank mithilfe von SSMS oder einer sp_attach_db gespeicherten Prozedur an. Weitere Informationen finden Sie unter Anfügen und Trennen von Datenbanken (SQL Server). |
Die Standarddatenbank wurde auf einen RESTRICTED_USER Zustand festgelegt. | Wenn eine Datenbank auf einen RESTRICTED_USER Zustand festgelegt ist, können nur Mitglieder der db_owner festen Datenbankrolle und dbcreator- und sysadmin-Fixed-Serverrollen eine Verbindung mit der Datenbank herstellen. Wenn Sie den Zugriff auf die entsprechende Datenbank nicht mehr einschränken müssen, legen Sie die Datenbank mithilfe dieser Abfrage auf den Mehrbenutzermodus fest: ALTER DATABASE <dbname> SET MULTI_USER; Hinweis: Um zu überprüfen, ob sich eine Datenbank in einem Zustand mit eingeschränktem Benutzer befindet, können Sie diese Abfrage verwenden: SELECT name, user_access_desc FROM sys.databases WHERE name = '<dbname>'; .Wenn Sie weiterhin den Zugriff auf die Datenbank einschränken müssen, aber die Konnektivität für die betroffenen Anmeldungen aktivieren möchten, ändern Sie die Standarddatenbank in eine andere Datenbank auf dem Server. |
Die Standarddatenbank ist offline. | Eine Datenbank, die sich im Offlinezustand befindet, kann nicht geändert werden. Sie können Ihre Datenbank mithilfe dieser Abfrage online schalten: ALTER database <dnname> SET ONLINE; .Sie können überprüfen, ob eine Datenbank offline ist, entweder mit SSMS oder mit dieser Abfrage: SELECT DATABASEPROPERTYEX (N'<dbname>', N'STATUS') AS N'Database Status'; .Weitere Informationen finden Sie unter Datenbankzustände und ALTER DATABASE SET-Optionen (Transact-SQL) – SQL Server. Wenn Sie die Datenbank weiterhin in einem Offlinezustand beibehalten müssen, aber die Konnektivität für die betroffenen Anmeldungen aktivieren möchten, ändern Sie die Standarddatenbank in eine andere Datenbank auf dem Server. |
Die Standarddatenbank ist auf einen NOTFALLzustand festgelegt. | Möglicherweise wurde eine Datenbank in einen Notfallzustand für die Problembehandlung durch einen Systemadministrator versetzt. Nur Benutzer der Sysadmin-Rolle können auf Datenbanken zugreifen, die auf einen NOTFALLstatus festgelegt sind. Sie können Ihre Datenbank mithilfe dieser Abfrage online schalten: ALTER database <dnname> SET ONLINE; .Sie können überprüfen, ob sich eine Datenbank in einem Notfallzustand befindet, entweder mithilfe von SSMS oder dieser Abfrage: SELECT DATABASEPROPERTYEX (N'<dbname>', N'STATUS') AS N'Database Status'; .Weitere Informationen finden Sie unter Datenbankzustände und ALTER DATABASE SET-Optionen (Transact-SQL).For more information, see Database States and ALTER DATABASE SET Options (Transact-SQL). Wenn Sie die Datenbank weiterhin in einem Notfallzustand beibehalten müssen, die Konnektivität für die betroffenen Anmeldungen jedoch aktivieren möchten, ändern Sie die Standarddatenbank in eine andere Datenbank auf dem Server. |
Die Standarddatenbank ist Teil der Datenbankspiegelung. | Sie können keine Verbindung mit einer Spiegeldatenbank auf dem Spiegelserver herstellen, und dieses Verhalten ist beabsichtigt. Verwenden Sie diese Abfrage SELECT DB_NAME(database_id) as database_name, mirroring_role_desc FROM sys.database_mirroring WHERE DB_NAME(database_id) = '<dbname>'; , um zu überprüfen, ob sich die Datenbank derzeit in der Spiegelrolle befindet. Weitere Informationen zur Datenbankspiegelung finden Sie unter Datenbankspiegelung (SQL Server). |
Das Anmeldekonto kann Mitglied mehrerer Gruppen sein, und die Standarddatenbank für eine der Gruppen ist zum Zeitpunkt der Verbindung nicht verfügbar. | Informationen zum Aufzählen der Gruppen mit einem bestimmten Benutzer mithilfe von PowerShell finden Sie unter "Get-ADPrincipalGroupMembership (ActiveDirectory)". |
Ändern der Standarddatenbank für einen bestimmten Benutzer
Um Änderungen an der Standarddatenbank eines Benutzers vorzunehmen, müssen Sie ÜBER DIE BERECHTIGUNG ALTER ANY LOGIN verfügen. Wenn die geänderte Anmeldung mitglied der festen Serverrolle "sysadmin" oder "Grantee of CONTROL SERVER" ist, benötigt sie auch DIE CONTROL SERVER-Berechtigung, wenn Sie die folgenden Änderungen vornehmen. Mitglieder der Sysadmin-Rolle haben diese Berechtigungen standardmäßig aktiviert. Weitere Informationen finden Sie unter ALTER LOGIN (Transact-SQL).For more information, see ALTER LOGIN (Transact-SQL).
Ändern der Standarddatenbank mithilfe von SSMS
Stellen Sie eine Verbindung mit Ihrer SQL Server-Instanz mithilfe von SQL Server Management Studio (SSMS) her.
Wählen Sie "Sicherheitsanmeldungen>" aus, um den Benutzer zu suchen und die Standarddatenbank des Benutzers in eine andere Datenbank zu ändern, die derzeit auf der Seite "Allgemein" der Anmeldeeigenschaften in SSMS verfügbar ist. Weitere Informationen finden Sie unter Erstellen eines Anmeldenamens.
Nach dem Herstellen einer Verbindung mit der SQL Server-Instanz können Sie eine
ALTER LOGIN
Anweisung wie die folgenden Beispiele ausführen:ALTER LOGIN <LoginName> WITH DEFAULT_DATABASE = <AvailableDatabaseName>;
<AvailableDatabaseName>
ist ein Platzhalter für den Namen der vorhandenen Datenbank, auf die über die SQL Server-Anmeldung in der Instanz zugegriffen werden kann.<LoginName>
ist ein Platzhalter für die SQL Server-Anmeldung mit erforderlichenALTER LOGIN
Berechtigungen.Zum Beispiel:
ALTER LOGIN [SQLLogin] WITH DEFAULT_DATABASE = master; ALTER LOGIN [Constoso\Windowslogin] WITH DEFAULT_DATABASE = [AdventureWorks];
Fehler 18456 wird zusammen mit Fehler 4064 angezeigt.
Wenn Sie Anwendungen wie SSMS verwenden, die fehler 4064 für den Benutzer angezeigt werden, wird die folgende Meldung im SQL Server-Fehlerprotokoll protokolliert. Dieses Verhalten ist beabsichtigt. Das Beheben der Standarddatenbank für die fehlgeschlagene Anmeldung unter Verwendung der in diesem Artikel dokumentierten Verfahren behebt automatisch den Fehler 18456.
2023-02-06 18:17:02.56 Logon Error: 18456, Severity: 14, State: 40.
2023-02-06 18:17:02.56 Logon Login failed for user '<user name>. Reason: Failed to open the database '<db_name>' specified in the login properties. [CLIENT: <hostname >]