2009-08-13 18 views
13

La mia applicazione Web ASP.NET v3.5 genera la seguente eccezione quando tenta di aprire una connessione a un server SQL. 2008 database:Errore "Accesso non riuscito per l'utente" NT AUTHORITY IUSR "" in ASP.NET e SQL Server 2008

System.Data.SqlClient.SqlException: Impossibile aprire il database "MyDbName" richiesto dall'account di accesso. Il login non è riuscito. Accesso non riuscito per l'utente 'NT AUTHORITY \ IUSR'.

Il fatto è che ho aggiunto NT AUTHORITY\IUSR all'elenco dei login del server e all'elenco di utenti del database. Per il server, ho concesso all'utente il ruolo Public e per il database ho concesso le autorizzazioni db_datareader.

Ho anche concesso lo stesso per NT AUTHORITY\NETWORK SERVICE, che è l'identità con cui è in esecuzione il pool di applicazioni.

L'applicazione Web è ospitata da IIS7, se ciò fa la differenza. Il problema si ripete quando DB e IIS si trovano sulla stessa macchina fisica.

risposta

6

Il trucco qui è che NT AUTHORITY\NETWORK SERVICE viene effettivamente visualizzato nel database come DOMAINNAME\MACHINENAME$ (notare il segno $!). Cioè, quando si attraversa il confine della macchina dal proprio server Web a SQL Server, SQL Server vede l'account della macchina se si utilizzano gli account NETWORK SERVICE o LOCAL SYSTEM. Se si utilizza qualsiasi altro account non di dominio, SQL Server non riceverà le credenziali.

Sono un po 'perplesso dal tuo messaggio di errore. A dire il vero, non penso che quando il DB è su un'altra scatola, vedrai qualcosa di diverso da Login Failed for NT AUTHORITY\ANONYMOUS LOGON.

IUSR viene utilizzato per siti Web anonimi e non può passare il collegamento a SQL Server. Potresti trovare un modo per farlo funzionare se stai facendo tutto sullo stesso computer, ma non lo saprei mai perché non lo farei mai in questo modo ... ;-)

+1

stavo solo mettendo alla prova per vedere se sarà tutto il lavoro sulla stessa macchina - nella produzione di topologia è meglio descritta come tentacolare. Ad ogni modo, lo hai inchiodato - ho dovuto aggiungere permessi per machineName $. Grazie! –

+1

Volevo semplicemente aggiungerlo allo stesso modo, ho risolto questo problema creando autorizzazioni per il nome utente IUSER trovato in Siti Web IIS 6.0-> Proprietà-> Sicurezza directory-> Modifica (Autenticazione ...) che era IUSR_MACHINENAME – shawad

+0

Come hai aggiunto le autorizzazioni per MachineName $ in VS –

1

Vorrei suggerire di creare un account separato (preferibilmente di dominio) e specificarlo nella stringa di connessione (solitamente in web.config) Quindi è possibile limitare le autorizzazioni sul server Web che cosa questo account può e non può fare. Quindi è possibile concedere a questo account le autorizzazioni necessarie nel server SQL.

-1

La soluzione più semplice è quella di controllare il vostro file web.config e assicurarsi uno di questi fa parte della stringa di connessione db:

connessione trusted = false

O

Integrated Security = True

1

Avevo avuto lo stesso problema e ho risolto questo problema cambiando il pool di applicazioni.

-2

Questo problema viene visualizzato quando si ripristina un nuovo database sull'ultimo database.

Per risolvere questo problema, è necessario accedere a sqlserver, quindi alla sicurezza e quindi impostare di nuovo l'apppool.

1

Nel caso in cui aiuti qualcuno, in web.config ho aggiunto < identità impersonate = "falso" /> affinché questo errore scompaia (sotto il sistema <).web>)

0

Invece di usare Integrated Security=True; in stringa di connessione, basta usare il nome utente e la password di autenticazione user=sa; pwd=mypassword;

+0

No! Non è possibile consigliare l'uso di nome utente e password in caso di utilizzo diverso, ad esempio l'autorizzazione con l'account macchina. –

Problemi correlati