Per impostazione predefinita, un sito ASP.NET pubblicato su IIS 5.0/5.1 viene eseguito con l’account ASPNET, oppure NetworkService se si sta utilizzando la versione 6.0 o superiore del web server; entrambi questi account non dispongono dei diritti per accedere a SQL Server, quindi non è possibile effettuare il login e connettersi alla fonte dati. Per risolvere il problema, sono disponibili tre soluzioni:
- Creare un login di SQL Server, assegnarli i privilegi richiesti ed utilizzarlo nella propria applicazione per accedere ai dati (sconsigliato per motivi di sicurezza)
- Assegnare i privilegi di accesso a SQL Server direttamente all’account ASPNET oppure NetworkService (metodo sconsigliato perché, così facendo, tutte le applicazione Web sul server otterranno in automatico il diritto di collegarsi a SQL Server, cosa che potrebbe essere non voluta)
- Creare un nuovo account di Windows, a cui assegnare i diritti per accedere al database, quindi modificare il file web.config in modo da impersonare (o rappresentare) l’utente in questione, ed utilizzare una connessione con sicurezza integrata a SQL Server
L’ultimo metodo, che di fatto consente di specificare qual è l’utente di Windows con cui si vuole accedere al sito, è quello raccomandato: l’applicazione web utilizzerà i diritti che sono stati assegnati a tale utente, quindi se esso ha il privilegio di accesso a SQL Server, sarà possibile collegarsi correttamente al database.
Per impersonare un utente di Windows, si deve inserire il seguente tag nel file web.config:
<identity impersonate="true" userName="domainuser" password="password" />
Fatto questo, se l’utente domainuser
ha il diritto di accedere a SQL Server, per realizzare la connessione è sufficiente usare una stringa in cui è specificato il parametro Integrated Security
:
Data Source=myServerAddress;Initial Catalog=myDataBase;Integrated Security=SSPI;