Perché, dopo la pubblicazione, non riesco ad effettuare l’accesso al database?

Utente HTML.it
chiede

Perché, dopo la pubblicazione, non riesco ad effettuare l’accesso al database?

Redazione HTML.it
risponde

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:

  1. Creare un login di SQL Server, assegnarli i privilegi richiesti ed utilizzarlo nella propria applicazione per accedere ai dati (sconsigliato per motivi di sicurezza)
  2. 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)
  3. 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;