Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
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