it-swarm.com.de

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

Meldung, die der SQL Server-Protokolldatei-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 irgendwo 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.

24
Pete Oakey

Staatscodes 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 in Aaron Bertrands Blog .

25
Pete Oakey

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

4
Rob Bowman

Folgendes habe ich gefunden, als ich diesen Fehler behoben habe: Ich habe einige SQL-Verbindungen mithilfe der Windows-Anmeldung und nicht mit Benutzername und Kennwort erstellt. Ich bin mir nicht sicher, was oder wie es passiert ist, aber es ist passiert. 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 einer externen Website nicht funktioniert

2
Bill W.

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.

2
Dick Vandenberg

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

38 'Anmeldung gültig, Datenbank jedoch nicht verfügbar (oder Anmeldung nicht zulässig)'

Mein Problem begann in einem C # -Fehlerprotokoll:

Ausnahme | PublishedException | 000161 | 29.10.2008 | 11: 06: 40.210 | 16284 | InnerException | Die vom Login angeforderte Datenbank "InterestingDataBaseName" kann 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 für diesen DB-Server verantwortlich. 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 hatte den Datenbanknamen aus anderen Gründen geändert und die Konfigurationsdatei nicht aktualisiert. Der DB-Name wurde korrigiert und die Dinge funktionieren wieder wie ein Zauber.

2
John Dyer

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 hatte (SERVERNAME\INSTANCENAME), konnte ich eine Verbindung zum Server herstellen.

2
Nasser

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

Ohne könnten wir eine ODBC -Verbindung) herstellen und sogar eine Remote-SQL Management Studio-Verbindung verwenden und uns mit dem Benutzer anmelden. Jedes Mal, wenn wir auf die URL unserer Tomcat-Anwendung zugreifen, wird jedoch eine JDBC-Verbindung gestartet Im SQL Server entdeckt Fehler protokollieren: Anmeldung für Benutzer 'xxxx' fehlgeschlagen: Grund Fehler beim Öffnen der explizit definierten Datenbank, Fehler 18456, Schweregrad 14, Status 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 bedeutet, dass auch in der SQL Server-Netzwerkkonfiguration | Protokolle für <Instanzname> | Named Pipes muss AKTIVIERT sein und der Rohrname \\.\pipe\MSSQL$<instance name>\sql\query muss richtig eingestellt sein.

1
Sti

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:

  • Gehen 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 erneut auf OK und OK .

Klicken Sie im selben Anmeldefenster auf Serverrollen und gewähren Sie dem ausgewählten Benutzer den Zugriff wie: sysadmin, serveradmin, decreator usw.; Klicken Sie auf OK .

Wenn Sie Zugriff auf eine einzelne Datenbank gewähren möchten, gehen Sie zu ser Mapping und stellen Sie den Zugriff gemäß Ihren Anforderungen bereit.

Überprüfen Sie den Status der Datenbank : Berechtigung: Grant Login: Enabled

Klicken Sie auf OK

1
Priyanka