Anmeldung für Benutzer fehlgeschlagen - Fehler 18456 - Schweregrad 14, Status 38

23

Meldung, die SQL Server Log File Viewer anzeigt:

Login failed for user [User]
Error: 18456, Severity: 14, State 38

Was es eigentlich bedeutet:

Failed to open the explicitly specified database

Meine Frage:

Gibt es eine Liste aller Variationen der 18456-Fehler (Anmeldung fehlgeschlagen) für jede Kombination aus Schweregrad und Status mit dem hilfreichen Beschreibungstext?

Ich hatte ein Google, kann aber nur bestimmte Kombinationen finden.

Pete Oakey
quelle

Antworten:

25

Ländercodes und ihre Bedeutung.

1      'Account is locked out'
2      'User id is not valid'
3-4    'Undocumented'
5      'User id is not valid'
6      'Undocumented'
7      'The login being used is disabled'
8      'Incorrect password'
9      'Invalid password'
10     'Related to a SQL login being bound to Windows domain password policy enforcement.
        See KB925744.'
11-12  'Login valid but server access failed'
16     'Login valid, but not permissioned to use the target database'
18     'Password expired'
27     'Initial database could not be found'
38     'Login valid but database unavailable (or login not permissioned)'

Weitere Informationen finden Sie im Blog von Aaron Bertrand .

Pete Oakey
quelle
@PeteOakly Sie sind hier auf dem richtigen Weg für Zustand 38. Siehe den folgenden Beitrag über eine fehlende Datenbank als einer der Gründe für Zustand 38.
John Dyer
4

Ich hatte den gleichen Fehler mit dem Statuscode 38, der durch einen Tippfehler des Datenbanknamens in der Verbindungszeichenfolge verursacht wurde.

Rob Bowman
quelle
2

Folgendes habe ich gefunden, als ich diesen Fehler behoben habe: Ich habe einige SQL-Verbindungen mit der Windows-Anmeldung und nicht mit Benutzername und Kennwort erstellt. Ich bin mir nicht sicher, was oder wie es passiert ist, aber es hat funktioniert. Ich habe sie gelöscht und dann meine Entitätsmodelle neu erstellt. Ich habe eine andere Verbindungszeichenfolge verwendet, von der ich wusste, dass sie gut ist, und alles ist Freude. Der Schlüssel ist Persist Security Info = True, was in einem Netzwerk oder auf einer externen Website nicht funktioniert

Bill W.
quelle
2

Ich hatte auch 18456 mit Zustand 38. Es stellte sich heraus, dass die Verbindungszeichenfolge "integrierte Sicherheit = wahr" hatte, was nicht das war, was ich wollte. Die Verbindungszeichenfolge enthielt die Benutzer-ID und das Kennwort, die verwendet werden sollten. Als ich die Einstellung auf false änderte, war alles in Ordnung.

Dick Vandenberg
quelle
2

Beim Versuch, mich bei einem SQL Server mit mehreren Instanzen anzumelden, ist dieser Fehler aufgetreten. Die Verbindungszeichenfolge hat keine Instanz benannt. Nachdem ich die Instanz benannt habe (SERVERNAME \ INSTANCENAME), konnte ich eine Verbindung zum Server herstellen.

Nasser
quelle
2

@Pete Oakly ist auf dem richtigen Weg mit der Liste der Ländercodes. Insbesondere ist dies der Code, an dem wir alle interessiert sind:

38 'Login gültig, aber Datenbank nicht verfügbar (oder Login nicht erlaubt)'

Mein Problem begann in einem C # -Fehlerprotokoll:

Ausnahme | PublishedException | 000161 | 10/29/2018 | 11: 06: 40.210 | 16284 | InnerException | Datenbank "InterestingDataBaseName" kann beim Anmelden nicht geöffnet werden. Die Anmeldung ist fehlgeschlagen. Anmeldung für Benutzer 'CORP \ anyuser' fehlgeschlagen.

Meine Augen waren auf den Teil "Anmeldung fehlgeschlagen" gerichtet . Mein Benutzer war sa für diesen DB-Server. Wie konnte die Anmeldung möglicherweise fehlschlagen?

Ich bin auf diesen Beitrag von drei Programmierern gestoßen, die die Antwort hatten: https://justaprogrammer.net/2012/12/09/a-misleading-sql-error-message-error-18456-severity-14-state-38 /

Es ist nicht die Anmeldung, die per se fehlschlägt, sondern die Datenbank, auf die ich zugreifen möchte. Es existiert nicht!

Bingo! Ich habe den Datenbanknamen aus anderen Gründen geändert und die Konfigurationsdatei nicht aktualisiert. Der Name der Datenbank wurde korrigiert und die Dinge funktionieren wieder wie ein Zauber.

John Dyer
quelle
1

In unserem Fall im SQL Server Configuration Manager | SQL Server-Netzwerkkonfiguration | TCP / IP | IP | Der TCP-Port wurde NICHT festgelegt.

Ohne könnten wir eine ODBC-Verbindung herstellen und sogar eine Remote-SQL Management Studio-Verbindung verwenden und uns mit dem Benutzer anmelden. Bei jedem Zugriff auf die URL unserer Tomcat-Anwendung wurde jedoch eine JDBC-Verbindung hergestellt, und im SQL Server-Protokoll wurde der Fehler festgestellt: Anmeldung für Benutzer 'xxxx' fehlgeschlagen: Grund Fehler beim Öffnen der explizit definierten Datenbank, Fehler 18456, Schweregrad 14 , State 38

Hier eine Zusammenfassung der jdbc-Verbindungszeichenfolge

"jdbc:sqlserver://10.10.10.10:1433;databaseName=zzzzzzz" username="yyyyyy" password="xxxxxx" driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" defaultAutoCommit="true"/>
<Resource name="jdbc/application" 

Dies gilt auch für die SQL Server-Netzwerkkonfiguration Protokolle für <Instanzname> | Named Pipes müssen AKTIVIERT sein und der Pipe Name \\.\pipe\MSSQL$<instance name>\sql\query muss korrekt eingestellt sein.

Sti
quelle
1

Nun, dies ist ein Fehler im Zusammenhang mit der Datenbankberechtigung. Ich füge meine Lösung in diese Frage ein, weil es sehr wichtig ist, die Rolle des DBA zu verstehen. Also, da sind meine Vorschläge:

  • Wechseln Sie zum Server-Manager
  • Wählen Sie Extras und dann Computerverwaltung
  • Überprüfen Sie die lokalen Benutzer und Gruppen
  • Überprüfen Sie den Administratornamen mit der Beschreibung "Integriertes Konto für die Verwaltung des Computers / der Domäne".

Melden Sie sich jetzt mit diesem Benutzernamen an und Sie können dem Benutzer Zugriff gewähren. Um dies zu tun:

Gehen Sie zu Sicherheit , klicken Sie mit der rechten Maustaste auf Anmeldungen und wählen Sie Neue Anmeldung

Im Anmeldefenster können Sie den Benutzernamen eingeben oder suchen. Wählen Sie den Benutzer aus der Liste aus und klicken Sie auf OK und erneut auf OK .

Auf dem gleichen Login - Fenster, klicken Sie auf die Serverrollen und den Zugriff auf den ausgewählten Benutzer gewähren wie: Sysadmin, server, decreator etc; Klicken Sie auf OK .

Wenn Sie Zugriff auf eine einzelne Datenbank gewähren möchten, rufen Sie die Benutzerzuordnung auf und stellen Sie den Zugriff gemäß Ihren Anforderungen bereit.

Überprüfen Sie den Status der Datenbank: Berechtigung: Anmeldung erteilen: Aktiviert

Klicken Sie auf OK

Priyanka
quelle
2
Dies könnte eine ziemlich gute Antwort sein , wenn Sie den Fokus auf der Möglichkeit eines fehlenden setzen könnten SQL Server Login auf Datenbankbenutzer - Beziehung oder die Möglichkeit , dass die SQL Server - Anmeldung ‚s Standard - Datenbank ist nicht mehr verfügbar. Derzeit ist Ihre Antwort nur eine allgemeine Empfehlung zum Erstellen eines Kontos. Ich bin nicht sicher, wie der erste Teil Ihrer Antwort zur Lösung des Problems von OP beitragen könnte. Könnten Sie diesen Teil erklären?
John aka hot2use