Accesso non riuscito per l'utente - Errore 18456 - Gravità 14, stato 38


23

Messaggio visualizzato dal Visualizzatore file di registro di SQL Server:

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

Cosa significa in realtà:

Failed to open the explicitly specified database

La mia domanda:

Esiste un elenco da qualche parte di tutte le varianti degli errori 18456 (accesso non riuscito), per ogni combinazione di gravità e stato, con il testo descrittivo utile?

Ho avuto un Google ma non riesco a trovare altro che combinazioni specifiche.

Risposte:


25

Codici di stato e loro significato.

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)'

Informazioni più dettagliate sono disponibili nel blog di Aaron Bertrand .


@PeteOakly sei sulla strada giusta qui per lo stato 38. Vedi il post qui sotto su un database mancante come uno dei motivi per lo stato 38.
John Dyer

4

Ho avuto lo stesso errore con il codice di stato 38 causato da un errore di battitura del nome del database nella stringa di connessione.


2

Ecco cosa ho trovato quando ho risolto questo errore: avevo creato alcune connessioni SQL usando il login di Windows e non il nome utente e la password. Non so davvero cosa o come sia successo, ma è successo. Li ho cancellati e quindi ricostruito i miei modelli di entità. Ho usato un'altra stringa di connessione che sapevo essere buona, e tutto è gioia. La chiave è Persist Security Info = True, che non funzionerà su una rete o su un sito Web esterno


2

Ho avuto anche il 18456 con lo stato 38. Si è scoperto che la stringa di connessione aveva "sicurezza integrata = vero" che non era quello che volevo. La stringa di connessione conteneva l'id utente e la password che dovevano essere utilizzati. Quando ho modificato l'impostazione su false, tutto andava bene.


2

Ho riscontrato questo errore nel tentativo di accedere a un server SQL con più istanze. La stringa di connessione non ha assegnato un nome a un'istanza. Dopo aver chiamato l'istanza (SERVERNAME \ INSTANCENAME), sono riuscito a connettermi al server.


2

@Pete Oakly è sulla buona strada con l'elenco dei codici di stato. In particolare, questo è il codice a cui siamo tutti interessati:

38 'Accesso valido ma database non disponibile (o accesso non autorizzato)'

Il mio problema è iniziato in un registro errori C #:

Eccezione | PublishedException | 000161 | 29/10/2018 | 11: 06: 40.210 | 16284 | InnerException | Impossibile aprire il database "InterestingDataBaseName" richiesto dall'account di accesso. Accesso fallito. Accesso non riuscito per l'utente "CORP \ anyuser".

I miei occhi erano concentrati sulla parte "Accesso fallito" . Il mio utente era sa per questo server DB, come è possibile che l'accesso non riesca?

Mi sono imbattuto in questo post da un trio di programmatori che ha avuto la risposta: https://justaprogrammer.net/2012/12/09/a-misleading-sql-error-message-error-18456-severity-14-state-38 /

Non è il login che non riesce di per sé, è il database a cui sto tentando di accedere. Non esiste!

Bingo! Ho cambiato il nome del database per altri motivi e non ho aggiornato il file di configurazione. Risolto il problema con il nome del DB e le cose funzionavano ancora come un incantesimo.


1

Nel nostro caso in Gestione configurazione SQL Server | Configurazione della rete di SQL Server | TCP / IP | IP | La porta TCP NON è stata impostata.

Senza potremmo stabilire una connessione ODBC e persino usare una connessione remota di SQL Management Studio e accedere con l'utente. Tuttavia, ogni volta che accediamo all'URL della nostra applicazione Tomcat, viene avviata una connessione jdbc, quindi viene rilevato l'errore nel registro di SQL Server: accesso non riuscito per l'utente 'xxxx': motivo Impossibile aprire il database definito esplicito, errore 18456, gravità 14 , Stato 38

Ecco un riassunto della stringa di connessione jdbc

"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" 

Questo per dire che anche nella configurazione di rete di SQL Server | Protocolli per <nome istanza> | I tubi con nome devono essere ABILITATI e il nome del tubo \\.\pipe\MSSQL$<instance name>\sql\query deve essere impostato correttamente.


1

Bene, questo è un errore relativo al permesso del database. Sto aggiungendo la mia soluzione a questa domanda perché, è molto importante capire il ruolo di DBA. Quindi, ci sono i miei suggerimenti:

  • Vai a Server Manager
  • Seleziona Strumenti e poi Gestione computer
  • Controlla gli utenti e i gruppi locali
  • Controlla il nome dell'amministratore con la descrizione "Account integrato per l'amministrazione del computer / dominio"

Ora accedi con quel nome utente e puoi concedere l'accesso all'utente. Fare così:

Vai su Sicurezza , fai clic destro su Login e seleziona Nuovo accesso

Nella finestra di accesso, puoi digitare il nome utente o cercarlo. Seleziona l'utente dall'elenco e fai di nuovo clic su OK e OK .

Nella stessa finestra di accesso, fai clic su Ruoli del server e concedi l'accesso all'utente selezionato come: sysadmin, serveradmin, decreator ecc; fai clic su OK .

Se si desidera concedere l'accesso a un singolo database, andare su Mappatura utente e fornire l'accesso in base alle proprie esigenze.

Verifica lo stato del database: Autorizzazione: Concedi accesso: Abilitato

Clicca OK


2
Questo potrebbe essere un buon risposta se si potrebbe mettere l'attenzione sulla possibilità di una mancanza di SQL Server Accesso ai database utenti relazione o la possibilità che l' accesso a SQL Server 's database predefinito non è più disponibile. Attualmente la tua risposta è solo una raccomandazione generalizzata su come creare un account. Non sono sicuro di come la prima parte della tua risposta possa aiutare a risolvere il problema di OP. Potresti spiegare quella parte?
John aka hot2use,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.