SQL Server 2005 - Login failed per l’utente “null”
Molto spesso vediamo casi dove un’applicazione client prova a connettersi ad un SQL Server e fallisce con l’errore “Login failed for user ‘ ’”. Di solito questo significa che fallisce l’autenticazione NTLM, ma le cause di questo fallimento possono essere molto varie. In questo post vorrei approfondire una causa, che non è molto frequente ed evidente.
L’ambiente
- Windows Server 2003, SP1 or later
- SQL Server 2005
- SQL Server 2008
Scenario tipico
- Il problema si verifica in un’applicazione client che si connette a un database di SQL locale. L’applicazione è installata sullo stesso computer, su cui è installata l’istanza di SQL Server.
- Se nella stringa della connessione viene usato l’autenticazione Windows e l’indirizzo IP anziché il nome del server, la connessione fallisce con l’errore “Login failed for user ‘ ’”.
- Invece se viene usato il nome del server e la connessione viene aperta sotto lo stesso utente come nel caso precedente(quando fallisce), la connessione va a buon fine.
- Anche se la connessione viene aperta da un client remoto e sempre sotto lo stesso utente, il problema non si verifica.
Causa
- Questo comportamento si può verificarsi su Windows XP SP2 o Windows Server 2003 SP1 (o successivo), quando esiste un alias DNS creato nel file HOSTS (in cartella %SystemRoot%\System32\Drivers\Etc)
- Windows XP SP2 e Windows Server 2003 SP1 hanno uno strumento che si chiama loopback check security. Questo strumento aiuta a prevenire gli attacchi di tipo reflection. Cosi quando FQDN oppure host header (configurato da utente) usati nell’applicazione non corrispondono al nome del computer locale, l’autenticazione fallisce.
Soluzione
- Per risolvere il problema procedete come di seguito
-
Aprire SQL Server Configuration manager e espandere SQL Native Client configuration
Fare click su Alias e selezionare “New alias…”
Impostare i seguenti valori:
Alias Name=<Nome dell’alias come è salvato nel file HOSTS>
Server=<Nome dell’istanza di SQL>
Protocol=<protocollo che usate per la connessione>
- Come un’altro workaround potete creare Local Security Authority host name aggiungendo il nome dell’alias DSN al valore di chiave di registry BackConnectionHostNames. Maggiori dettagli potete trovarli nell’articolo http://support.microsoft.com/kb/926642 nella sezione “Metodo 1 (scelta consigliata)”
Ulteriori informazioni
- How to troubleshoot connectivity issues in SQL Server 2000
- How to Troubleshoot Basic TCP/IP Problems
- Login failed for user <user>
- You may not be able to connect to a SQL Server that is running on a Windows Server 2003 computer by using Windows authentication
- You may not be able to connect to an instance of SQL Server by using an anonymous login
Olga Guzheva
Senior Support Engineer
Microsoft Enterprise SQL Support