Una lista più o meno esaustiva degli errori che può restituire Microsoft SQL Server e la loro spiegazione.
| Stato | Esempio / Descrizione (nota: il messaggio dettagliato di solito ha il suffisso [CLIENT: <IP>]) | |
|---|---|---|
| 1 | Errore: 18470, gravità: 14, stato: 1.Accesso non riuscito per l’utente ‘<x>’. Motivo: l’account è disabilitato. | |
| Lo stato 1 ora si verifica quando un accesso è disabilitato, ma in realtà l’errore nel registro è 18470, non 18456, poiché l’accesso è disabilitato, non arriva a quel punto. Prima di SQL Server 2005, lo stato 1 veniva sempre visualizzato nel registro per tutti gli errori di accesso, rendendo la risoluzione dei problemi più complessa. | ||
| 2 | Errore: 18456, gravità: 14, stato: 2.Accesso non riuscito per l’utente ‘<x>’. Motivo: Impossibile trovare un accesso corrispondente al nome fornito. | |
| L’account di accesso (che utilizzi l’autenticazione SQL o Windows) non esiste. Per l’autenticazione di Windows, è probabile che all’account di accesso non sia stato concesso in modo esplicito l’accesso a SQL Server, il che potrebbe significare che non è un membro di un gruppo di dominio appropriato. Potrebbe anche significare che hai creato un account di accesso a livello di server, hai mappato un utente del database con un nome diverso a tale account di accesso e stai tentando di connetterti utilizzando il nome utente, non il nome di accesso. Questo è lo stesso dello stato 5, ma lo stato 2 indica che il tentativo di accesso proviene da un computer remoto. | ||
| 5 | Errore: 18456, gravità: 14, stato: 5.Accesso non riuscito per l’utente ‘<x>’. Motivo: Impossibile trovare un accesso corrispondente al nome fornito. | |
| Analogamente allo stato 2, l’account di accesso non esiste in SQL Server, ma il tentativo di accesso proviene dal computer locale. Sia per lo stato 2 che per lo stato 5, prima di SQL Server 2008, il motivo non era incluso nel log degli errori, ma solo il messaggio di accesso non riuscito. E a partire da Denali, sia per lo stato 2 che per lo stato 5, questo errore può verificarsi se si specificano il nome utente e la password corretti per un utente del database indipendente, ma il database errato (o nessuno). Si noti che se si sta tentando di connettersi a un database indipendente utilizzando la finestra di dialogo di connessione in SSMS e si tenta di <Sfoglia server… > per il database invece di digitare il nome in modo esplicito, riceverai prima un messaggio “L’esplorazione dei database disponibili sul server richiede la connessione al server. L’operazione potrebbe richiedere alcuni istanti. Vuole continuare?” Se le credenziali di autenticazione SQL non corrispondono anche a un account di accesso a livello di server, verrà visualizzato un messaggio di errore, perché l’utente indipendente non ha accesso a master.sys.databases. Il messaggio di errore nell’interfaccia utente è “Impossibile connettersi al server <server>. (Microsoft.SqlServer.ConnectionInfo)Accesso non riuscito per l’utente ‘<x>’. (Microsoft SQL Server, errore: 18456).” Il punto qui: specificare sempre il nome del database in modo esplicito nella scheda delle opzioni della finestra di dialogo di connessione; Non utilizzare la funzione di navigazione. | ||
| 6 | Errore: 18456, gravità: 14, stato: 6.Accesso non riuscito per l’utente ‘<x\y>”. Motivo: tentativo di utilizzare un nome account NT con l’autenticazione di SQL Server. | |
| Ciò significa che si è tentato di specificare l’autenticazione SQL, ma è stato immesso un account di accesso in stile Windows sotto forma di Dominio\Nome utente. Assicurati di scegliere l’autenticazione di Windows (e non dovresti dover inserire il tuo dominio/nome utente quando utilizzi Win Auth a meno che tu non stia utilizzando runas /netonly per avviare Management Studio). Almeno in SQL Server 2012, si otterrà lo stato 6 solo se il formato dominio\nome utente corrisponde a un dominio e a un nome utente effettivi riconosciuti da SQL Server. Se il dominio non è valido o se il nome utente non è un account Windows effettivo in tale dominio, verrà ripristinato lo stato 5 (per i tentativi locali) o lo stato 2 (per i tentativi remoti), poiché l’accesso non esiste. | ||
| 7 | Errore: 18456, gravità: 14, stato: 7.Accesso non riuscito per l’utente ‘<x>’. Motivo: si è verificato un errore durante la valutazione della password. | |
| Il login è disabilitato *e* la password non è corretta. Ciò dimostra che la convalida della password viene eseguita per prima, poiché se la password è corretta e l’accesso è disabilitato, viene visualizzato l’errore 18470 (vedere lo stato 1 sopra). È possibile che l’applicazione invii credenziali memorizzate nella cache e che nel frattempo la password sia stata modificata o reimpostata: è possibile provare a disconnettersi e accedere nuovamente per aggiornare queste credenziali. | ||
| 8 | Errore: 18456, gravità: 14, stato: 8.Accesso non riuscito per l’utente ‘<x>’. Motivo: la password non corrisponde a quella per l’accesso fornito. | |
Probabilmente il più semplice di tutti: la password non è corretta (cASe sEnsiTiVitY attira molte persone qui). Si noti che verrà visualizzato il messaggio di accesso “l’account di accesso fornito” anche se si è tentato di connettersi come utente del database indipendente ma si è dimenticato di specificare un database, è stato specificato il database errato o la password è stata digitata in modo errato: a meno che non trovi una corrispondenza, SQL Server non ha idea che tu stia tentando di utilizzare un utente del database indipendente.Un caso interessante qui sono i contenitori Docker: ti consentirà di avviare un contenitore e specificare un con determinati caratteri speciali, come . Tuttavia, non sarà mai possibile connettersi al contenitore con tale password. Se si utilizzano caratteri non alfanumerici, attenersi a caratteri leggermente più benigni come e .docker runSA_PASSWORD$#* | ||
| 9 | Errore: 18456, gravità: 14, stato: 9.Accesso non riuscito per l’utente ‘<x\y>”. | |
| Come lo stato 2, non l’ho visto in natura. Presumibilmente significa che la password ha violato un controllo della politica della password, ma ho provato a creare un accesso conforme a una politica della password debole, ho rafforzato la politica e ho potuto comunque accedere correttamente. E ovviamente non è possibile creare un accesso con, o impostare in un secondo momento, una password che non soddisfa la politica. Fatemi sapere se l’avete visto. | ||
| 10 | Errore: 18456, gravità: 14, stato: 10. Accesso non riuscito per l’utente ‘<x>’. | |
| Questa è una variazione piuttosto complicata dello stato 9; come indicato nella KB #925744, ciò significa che non è stato possibile eseguire il controllo della password perché l’account di accesso è disabilitato o bloccato nel controller di dominio (si noti che se SQL Server non viene avviato, potrebbe essere perché l’account bloccato o disabilitato è l’account del servizio SQL Server). Nel messaggio “dettagliato” nel log degli errori non viene fornito alcun motivo o informazioni aggiuntive. | ||
| 11 12 | Errore: 18456, gravità: 14, stato: 11. Accesso non riuscito per l’utente ‘<x>’. Motivo: la convalida dell’accesso al server basata sull’accesso non è riuscita con un errore dell’infrastruttura. Verificare la presenza di errori precedenti. Errore: 18456, gravità: 14, stato: 12. Accesso non riuscito per l’utente ‘<x>’. Motivo: la convalida dell’accesso al server basata su token non è riuscita con un errore dell’infrastruttura. Verificare la presenza di errori precedenti. | |
| Gli stati 11 e 12 indicano che SQL Server è stato in grado di autenticare l’utente, ma non è stato in grado di convalidare con le autorizzazioni di Windows sottostanti. È possibile che l’accesso a Windows non abbia un profilo o che non sia stato possibile controllare le autorizzazioni a causa dell’UAC. Provare a eseguire SSMS come amministratore e/o disabilitare il controllo dell’account utente. Un altro motivo potrebbe essere che non è stato possibile raggiungere il controller di dominio. Potrebbe essere necessario ricorrere alla ricreazione del login (vedi questo post di Simon Sabin). Infine, PSS ha recentemente rilasciato ulteriori informazioni sugli stati 11 e 12; Vedere questo post per potenziali scenari e soluzioni e vedere anche gli stati 146-149 di seguito per le modifiche in SQL Server 2016. | ||
| 13 | Errore: 18456, gravità: 14, stato: 13. Accesso non riuscito per l’utente ‘<x>’. Motivo: il servizio SQL Server è sospeso. Al momento non possono essere accettate nuove connessioni. | |
| Questo stato si verifica quando il servizio SQL Server è stato sospeso, operazione che è possibile eseguire facilmente e anche accidentalmente dal menu di scelta rapida in Esplora oggetti. | ||
| 16 | Errore: 18456, gravità: 14, stato: 16. Accesso non riuscito per l’utente ‘<x>’. Potresti anche vedere: È stata stabilita una connessione con il server, ma poi si è verificato un errore durante l’handshake pre-accesso. | |
| Lo stato 16, che si verifica solo prima di SQL Server 2008, indica che il database predefinito era inaccessibile. Ciò potrebbe essere dovuto al fatto che il database è stato rimosso, rinominato o non in linea (potrebbe essere impostato su Chiusura automatica). Questo stato non indica un motivo nel log degli errori. Nel 2008 e oltre, questo è riportato come stato 40 (vedi sotto), con una ragione. In SQL Server 2005, questo stato può essere segnalato anche se il database predefinito dell’utente è online, ma il database richiesto in modo esplicito non è disponibile per i motivi indicati in precedenza (vedere anche lo stato 27). Se ricevi il messaggio di handshake pre-accesso, è possibile che tu abbia disabilitato SSL sul server. | ||
| 18 | Errore: 18456, gravità: 14, stato: 18. Accesso non riuscito per l’utente ‘<x>’. | |
| Presumibilmente questo indica che l’utente deve cambiare la propria password. In SQL Server 2005, 2008 R2 e SQL Server 2012, ho scoperto che questo è stato generato come errore 18488, non 18456; questo perché per gli accessi SQL la finestra di dialogo di modifica della password ritarda solo l’accesso e non è in realtà un errore di accesso. Sospetto che, come lo stato 16, questo stato non verrà più visualizzato nelle versioni future di SQL Server. | ||
| 23 | Errore: 18456, gravità: 14, stato: 23. Accesso non riuscito per l’utente ‘<x>’. Motivo: l’accesso alla convalida del server non è riuscito durante la riconvalida dell’accesso alla connessione. | |
| Potrebbero esserci alcune ragioni per lo stato 23. Il più comune è che si tenta di connettersi mentre il servizio è in fase di arresto. Tuttavia, se questo errore si verifica e non è circondato nel registro da messaggi relativi all’arresto di SQL Server e non vi è alcun motivo di accompagnamento insieme al messaggio, esaminerei KB #937745, il che implica che questo potrebbe essere il risultato di un server sovraccarico che non può gestire alcun accesso aggiuntivo a causa di problemi di pool di connessioni. Infine, se esiste un motivo complementare, potrebbe essere il messaggio indicato a destra, che indica che SQL Server era in esecuzione come account di dominio valido e, al riavvio, non è in grado di convalidare l’account perché il controller di dominio è offline o l’account è bloccato o non più valido. Provare a modificare l’account del servizio in LocalSystem fino a quando non è possibile risolvere i problemi relativi al dominio. | ||
| 27 | Errore: 18456, gravità: 14, stato: 27. Accesso non riuscito per l’utente ‘<x>’. | |
| Lo stato 27, come lo stato 16, si verifica solo prima di SQL Server 2008. Significa che il database specificato nella stringa di connessione è stato rimosso, rinominato o è offline (probabilmente a causa della chiusura automatica), anche se in ogni caso che ho provato, è stato segnalato come stato 16. Questo stato non indica un motivo nel log degli errori. Dal 2008 in poi questo è riportato come stato 38 (vedi sotto), con una ragione. | ||
| 28 | Errore: 18456, gravità: 14, stato: 28. Accesso non riuscito per l’utente ‘<x>’. | |
| Non ho riscontrato questo problema, ma sospetto che si tratti di un pool di connessioni sovraccarico e di reimpostazioni della connessione. Penso che vedrai solo lo stato 28 prima di SQL Server 2008. | ||
| 38 | Errore: 18456, gravità: 14, stato: 38. Accesso non riuscito per l’utente ‘<x>’. Motivo: impossibile aprire il database specificato nelle proprietà di accesso. o Motivo: Impossibile aprire il database “<database>” richiesto dall’account di accesso. L’accesso non è riuscito. | |
| Il database specificato nella stringa di connessione o selezionato nella scheda Opzioni > Proprietà connessione della finestra di dialogo di connessione SSMS non è più valido o online (potrebbe essere impostato su Chiusura automatica o l’utente potrebbe semplicemente non disporre dell’autorizzazione). Mi sono imbattuto in questo una volta quando ho digitato <predefinito> qui invece di scegliere quell’opzione dall’elenco. Questo è segnalato come stato 27 o stato 16 prima di SQL Server 2008. Si noti che questo potrebbe anche essere un sintomo di un accesso orfano. Dopo aver stabilito il mirroring, i gruppi di disponibilità, il log shipping e così via, è possibile che sia stato creato un nuovo account di accesso o che sia stato associato un utente a un account di accesso nel database primario. Le informazioni utente a livello di database vengono riprodotte sui server secondari, ma non le informazioni di accesso. Tutto funzionerà correttamente, fino a quando non si verifica un failover. In questa situazione, sarà necessario sincronizzare le informazioni di accesso e utente (per un esempio, vedere questo script del compianto Robert Davis). | ||
| 40 | Errore: 18456, gravità: 14, stato: 40. Accesso non riuscito per l’utente ‘<x>’. Motivo: impossibile aprire il database specificato in modo esplicito. | |
| In genere questo significa che il database predefinito dell’account di accesso è offline (forse a causa della chiusura automatica) o non esiste più. Risolvere il problema correggendo il database mancante o modificando il database predefinito dell’account di accesso utilizzando ALTER LOGIN (per le versioni precedenti, utilizzare sp_defaultdb, ora deprecato). Questo è segnalato come stato 16 prima di SQL Server 2008. | ||
| 46 | Errore: 18456, gravità: 14, stato: 46. Accesso non riuscito per l’utente ‘<x>’. Motivo: impossibile aprire il database configurato nell’oggetto di accesso durante la riconvalida dell’account di accesso sulla connessione. | |
| Lo stato 46 può verificarsi quando l’account di accesso (o il mapping dell’account di accesso all’account di servizio) non dispone di un database valido selezionato come database predefinito. (Sto indovinando qui, ma penso che ciò possa verificarsi quando l’accesso in questione sta tentando di eseguire il log shipping. Ancora una volta, solo un’ipotesi basata sulle poche conversazioni che ho scoperto online.) Può verificarsi anche se la funzione di classificazione (Resource Governor) o un trigger di accesso fa riferimento a un database offline, che non esiste più o che è impostato su Chiusura automatica. | ||
| 50 | Errore: 18456, gravità: 14, stato: 50. Accesso non riuscito per l’utente ‘<x>’. Motivo: le regole di confronto correnti non corrispondono a quelle del database durante la reimpostazione della connessione. | |
| Come suggerisce il messaggio, ciò può verificarsi se le regole di confronto predefinite per l’account di accesso non sono compatibili con le regole di confronto del database predefinito (o con il database specificato in modo esplicito nella stringa di connessione). Può anche accadere se utilizzano uno strumento client come Management Studio che, una volta disconnesso, può provare a connettersi al master al momento della riconnessione anziché al database predefinito. | ||
| 51 | Errore: 18456, gravità: 14, stato: 51. Accesso non riuscito per l’utente ‘<x>’. Motivo: Impossibile inviare una notifica di modifica dell’ambiente a un nodo partner di distribuzione dei log durante la riconvalida dell’accesso. | |
| Come gli stati 11 e 12, questo potrebbe avere a che fare con il controllo dell’account utente, o che il controller di dominio non è stato raggiungibile, o che l’account di dominio non è stato in grado di autenticarsi con il partner di distribuzione dei log o che il partner di distribuzione dei log era inattivo. Provare a modificare l’account del servizio per SQL Server in un dominio noto o in un account locale, anziché negli account del servizio locale predefiniti, e verificare che l’istanza del partner sia accessibile, nonché il database richiesto nella stringa di connessione e il database predefinito dell’account di accesso. Si noti che questo potrebbe essere attivato dall’attributo della stringa di connessione del partner di failover e che il database potrebbe non esistere più o potrebbe essere offline, utente singolo e così via. | ||
| 56 | Errore: 18456, gravità: 14, stato: 56. Accesso non riuscito per l’utente ‘<x>’. Motivo: tentativo di convalida del token di processo non riuscito. | |
| Lo stato 56 non è molto comune: ancora una volta, come gli stati 11 e 12, questo potrebbe avere a che fare con UAC o che il controller di dominio non può essere raggiunto. Provare a modificare l’account del servizio per SQL Server in un dominio noto o in un account locale, anziché negli account del servizio locali predefiniti. | ||
| 58 | Errore: 18456, gravità: 14, stato: 58. Accesso non riuscito per l’utente ‘<x>’. Motivo: un tentativo di accesso tramite l’autenticazione SQL non è riuscito. Il server è configurato solo per l’autenticazione di Windows. | |
| Lo stato 58 si verifica quando SQL Server è impostato per l’utilizzo solo dell’autenticazione di Windows e un client tenta di accedere utilizzando l’autenticazione SQL. Può verificarsi anche quando i SID non corrispondono (nel qual caso il testo dell’errore potrebbe essere leggermente diverso). | ||
| 62 | Errore: 18456, gravità: 14, stato: 62. Accesso non riuscito per l’utente ‘<x>’. | |
| Lo stato 62 si verifica quando un account di autenticazione di Windows tenta di accedere a un database indipendente e il database indipendente esiste, ma i SID non corrispondono. | ||
| 65 | Errore: 18456, gravità: 14, stato: 65. Accesso non riuscito per l’utente ‘<x>’. Motivo: la password non corrisponde a quella fornita dall’utente. [Database: ‘<x>’] | |
| L’utente indipendente esiste, il database è corretto, ma la password non è valida. Questo problema può verificarsi anche se si utilizza un account di accesso SQL per connettersi a un database indipendente con un utente indipendente con lo stesso nome ma una password diversa (uno dei diversi motivi per cui non è consigliabile). | ||
| 102 103 … 110 111 | Errore: 18456, gravità: 14, stato: 102. Errore: 18456, gravità: 14, stato: 103. Errore: 18456, gravità: 14, stato: 104. Errore: 18456, gravità: 14, stato: 105. Errore: 18456, gravità: 14, stato: 106. Errore: 18456, gravità: 14, stato: 107. Errore: 18456, gravità: 14, stato: 108. Errore: 18456, gravità: 14, stato: 109. Errore: 18456, gravità: 14, stato: 110. Errore: 18456, gravità: 14, stato: 111. | |
| Documentato da Microsoft come errori di accesso ad Azure Active Directory. | ||
| 122 123 124 | Errore: 18456, gravità: 14, stato: 122. Errore: 18456, gravità: 14, stato: 123. Errore: 18456, gravità: 14, stato: 124. | |
| Secondo Microsoft, questi indicano un nome utente e/o una password vuoti o mancanti. | ||
| 126 | Errore: 18456, gravità: 14, stato: 126. | |
| I documenti dicono “Il database richiesto dall’utente non esiste”. Ma non è chiaro perché si dovrebbe ottenere 126 invece di, diciamo, 38 o 40. | ||
| Codice: 132 133 | Errore: 18456, gravità: 14, stato: 132. Errore: 18456, gravità: 14, stato: 133. | |
| Documentato da paschott e da Microsoft come errori di accesso ad Azure Active Directory. | ||
| 146 147 148 149 | Errore: 18456, gravità: 14, stato: 146. Accesso non riuscito per l’utente ‘<Windows auth login>’. Motivo: la convalida dell’accesso al server basata su token non è riuscita con un errore dell’infrastruttura. L’accesso non dispone dell’autorizzazione Connect SQL. Errore: 18456, gravità: 14, stato: 147. Accesso non riuscito per l’utente ‘<SQL auth login>’. Motivo: la convalida dell’accesso al server basata sull’accesso non è riuscita con un errore dell’infrastruttura. L’accesso non dispone dell’autorizzazione Connect SQL. Errore: 18456, gravità: 14, stato: 148. Accesso non riuscito per l’utente ‘<Windows auth login>’. Motivo: la convalida dell’accesso al server basata su token non è riuscita con un errore dell’infrastruttura. L’accesso non dispone dell’autorizzazione dell’endpoint di connessione. Errore: 18456, gravità: 14, stato: 149. Accesso non riuscito per l’utente ‘<SQL auth login>’. Motivo: la convalida dell’accesso al server basata sull’accesso non è riuscita con un errore dell’infrastruttura. L’accesso non dispone dell’autorizzazione dell’endpoint di connessione. | |
| Questi stati sostituiscono gli stati 11 e 12 precedenti, ma solo in SQL Server 2016 o versioni successive. L’obiettivo era quello di rendere più facile per l’amministratore di sistema diagnosticare il problema di fondo tra l’autenticazione SQL e gli accessi di autenticazione di Windows e tra le autorizzazioni di connessione e l’endpoint (il tutto senza fornire ulteriori informazioni all’utente che tenta di accedere). Per maggiori dettagli, vedere l’ultima parte di questo post. | ||




