ciao, benvenuto nel forum!
StefanoM ha scritto:
IIS è diverso perché mi richiede l'autenticazione
E' vero che una differenza c'è, ma anche con Cassini (cioè l'Asp.net development server) è richiesta l'autenticazione. Infatti, SQL server è una risorsa a sé stante e necessita di autenticazione per l'accesso ai dati, cosa che non si può bypassare in alcun modo se non fornendo le credenziali di accesso.
Infatti, guarda la tua connection string, contiene questo frammento:
In pratica stai chiedendo a SQL Server di autenticarti con lo stesso utente Windows che sta eseguendo la pagina asp.net.
Se su IIS non funziona è perché esso va in esecuzione con un utente diverso (NT AUTHORITY\SERVIZIO DI RETE, come hai detto anche tu) mentre l'Asp.Net development server va in esecuzione con il tuo utente (NOMEMACCHINA\TUOUSERNAME) che è probabilmente il proprietario del database.
Volendo verificare il nome dell'utente in uso, aggiungi questa linea di codice alla tua pagina:
Response.Write(System.Security.Principal.WindowsIdentity.GetCurrent().Name);
Puoi risolvere il problema in due modi:
- Aggiungendo NT AUTHORITY\SERVIZIO DI RETE agli utenti abilitati all'accesso. Da Sql Server Management Studio espandi il tuo database, poi Sicurezza -> Utenti -> Tasto destro -> Aggiungi utente. Qui puoi anche non concedergli alcun privilegio di proprietà. Fatto questo, fai tasto destro sul database -> Proprietà -> Autorizzazioni e da lì concedi almeno i privilegi di Connessione e Selezione all'utente che hai appena aggiunto.
- Oppure, se lo reputi opportuno, cambia direttamente il proprietario del database. Tasto destro sul db -> Proprietà -> File -> cambia il proprietario in NT AUTHORITY\SERVIZIO DI RETE
Aggiungo alcune considerazioni:
- Vedo dalla connection string che stai usando SQL Express. Esso introduce il concetto di "User instance" che semplifica l'accesso al database. In pratica, qualsiasi sia l'utente, gli viene concessa un'istanza tutta sua e isolata dal resto alla quale viene automaticamente aggiunto il database con tutti i privilegi necessari. Provalo, basta creare un db .mdf nella cartella App_Data del sito e modificare la connection string come vedi qui:
http://msdn.microsoft.com/en-us/library/ms254504.aspx - Non utilizzare il client OleDb, per sql server si usa il client System.Data.SqlClient che è necessario, tra l'altro, per sfruttare le "user istances". Qui trovi l'elenco delle classi, in pratica cambia solo il prefisso (da "OleDb" a "Sql"):http://msdn.microsoft.com/it-it/library/system.data.sqlclient%28v=VS.100%29.aspx
ciao
Modificato da BrightSoul il 17 dicembre 2011 11.43 -