c# - how - windows 2012 iis asp net




Accesso non riuscito per l'utente 'IIS APPPOOL \ ASP.NET v4.0' (20)

Ho un progetto web (C # Asp.Net, EF 4, MS SQL 2008 e IIS 7) e ho bisogno di migrarlo a IIS 7 localmente (al momento funziona bene con CASSINI).

A livello locale in IIS ho il mio Default Web Site con la mia distribuzione. Sia la mia distribuzione che il Default Web Site sono sul pool ASP.NET v4.0 (guarda l'immagine per le impostazioni) il pool target Framework 4 come mio progetto web. Quando si visita il sito, il browser non mostra la pagina e consente al browser di scaricare la pagina.

Ho altri progetti in esecuzione su IIS localmente e funzionano senza problemi (ma non usano Entity Framework).

Usando l'Event Logger vedo errori come di seguito:

Exception information: 
    Exception type: EntityException 
    Exception message: The underlying provider failed on Open.
   at System.Data.EntityClient.EntityConnection.OpenStoreConnectionIf(Boolean openCondition, DbConnection storeConnectionToOpen, DbConnection originalConnection, String exceptionCode, String attemptedOperation, Boolean& closeStoreConnectionOnFailure)


    Login failed for user 'IIS APPPOOL\ASP.NET v4.0'.
       at System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject)
       at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
       at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
       at System.Data.SqlClient.SqlConnection.Open()
       at System.Data.EntityClient.EntityConnection.OpenStoreConnectionIf(Boolean openCondition, DbConnection storeConnectionToOpen, DbConnection originalConnection, String exceptionCode, String attemptedOperation, Boolean& closeStoreConnectionOnFailure)

Domanda correlata

AGGIORNAMENTO: è possibile leggere le risorse su questa domanda che le autorizzazioni devono essere concesse su MS SQL 2008 manualmente come spiegato nella sua risposta. Utilizzando IIS 7.5 e MS SQL 2008 R2, l'impostazione dell'autorizzazione manuale non dovrebbe essere necessaria.


È possibile affrontare questo errore in un database specifico che viene creato dopo l'aggiornamento SSMS. Aprire SSMS e selezionare i database e aprire il database richiesto, quindi fare clic su Sicurezza -> Utenti -> e fare clic con il pulsante destro del mouse su Utenti e fare nuovamente clic su "Nuovo utente" e aggiungere "AUTHORITY NT \ Utenti autenticati" e salvare il lavoro e andare a il tuo modulo su Web / Desktop qualsiasi cosa tu. Godere....


È possibile modificare ApplicationPoolIdentity da IIS7 -> Pool di applicazioni -> Impostazioni avanzate.

Sotto ApplicationPoolIdentity troverai il sistema locale. Ciò farà funzionare la tua applicazione sotto NT AUTHORITY\SYSTEM , che è un accesso esistente per il database per impostazione predefinita.

Modifica: prima di applicare questo suggerimento, è necessario prendere nota e comprendere le implicazioni sulla sicurezza.


Cassini esegue il tuo sito web come la tua identità utente quando avvii l'applicazione Visual Studio. IIS esegue il tuo sito web come identità del pool di app. A meno che l'identità del pool di app non abbia accesso al database, si ottengono errori.

IIS ha introdotto App Pool Identity per migliorare la sicurezza. È possibile eseguire siti Web con l'identità del pool di app predefinita o creare un nuovo pool di app con il proprio nome oppure creare un nuovo pool di app con il proprio nome che viene eseguito con un account utente (solitamente un account di dominio).

In situazioni di rete (che non sono in Azure) è possibile eseguire un nuovo pool di app con un account utente di dominio Active Directory; Preferisco questo sull'account della macchina. Ciò garantisce sicurezza granulare e accesso granulare alle risorse di rete, inclusi i database. Ogni sito web viene eseguito su un diverso pool di applicazioni (e ognuna di esse viene eseguita con il proprio account utente di dominio).

Continua a utilizzare Windows Integrated Security in tutte le stringhe di connessione. In SQL Server, aggiungere gli utenti Dominio come account di accesso e concedere le autorizzazioni a database, tabelle, SP ecc. In base al sito Web. Ad esempio, DB1 utilizzato da Website1 ha un accesso per Utente1 perché Website1 viene eseguito su un Pool di App come Utente1.

Una sfida con la distribuzione dal DB integrato di Visual Studio (ad esempio LocalDB) e il server Web incorporato in un ambiente di produzione deriva dal fatto che il SID dell'utente dello sviluppatore e gli ACL non devono essere utilizzati in un ambiente di produzione sicuro. Microsoft fornisce strumenti per la distribuzione. Peccato però il povero sviluppatore che è abituato a tutto solo a lavorare fuori dal box nel nuovo facile VS IDE con localDB e localWebServer, perché questi strumenti saranno difficili da usare per lo sviluppatore, specialmente per uno sviluppatore privo di supporto SysAdmin e DBAdmin o la loro conoscenza specialistica. Tuttavia, la distribuzione in Azure è più semplice della situazione della rete aziendale sopra menzionata.


Come indicato, non utilizzare l'autenticazione di Windows, utilizzare l'autenticazione di SQL Server

Inoltre, se hai creato una connessione utilizzando la finestra di dialogo "Connessione server", assicurati di controllare le connessioni in web.config. È probabile che tu abbia creato / modificato la connessione e che sia stato memorizzato come connessione affidabile in web.config. Basta usare questa autenticazione

<add name="MyDBConnectionString" connectionString="Data Source=localhost;Initial Catalog=Finantial;User ID=xxx;Password=xxx" providerName="System.Data.SqlClient"/>

che dovrebbe risolvere l'errore.


Hai fatto ciò che @Teddy consigliato e ANCORA ottieni lo stesso errore?

Assicurati di modificare le impostazioni per il pool di applicazioni che corrisponde alla tua directory virtuale e non al server principale. Ogni directory virtuale ha il proprio AppPool e non eredita.


Ho affrontato il problema simile mentre ospitavo l'applicazione in IIS

Soluzione

Cambio l'Identità del Pool e il suo lavoro me

ApplicationPoolIdentity -> NetworkService

Ho fatto esattamente come ha detto @JeffOgata, ma ho ricevuto l'errore:

Windows NT user or group 'IIS APPPOOL\ASP.NET v4.0' not found. Check the name again. (Microsoft SQL Server, Error: 15401)

Ho controllato di nuovo il mio messaggio di errore e ha indicato che l' Login failed for user 'IIS APPPOOL\DefaultAppPool'.

Dopo aver aggiunto un utente denominato IIS APPPOOL\DefaultAppPool tutto ha funzionato.


Ho pensato di postare questa risposta come pertinente alla domanda e in alcuni casi è in grado di rispondere.

Lo stesso messaggio appare anche se il database non esiste!

Assicurati che la tua stringa di connessione non abbia errori di ortografia, punti verso l'istanza del server corretta, ecc.


Ho risolto questo problema usando sql come immagine seguente.

Fare clic destro su db-> proprietà -> permesso -> Visualizza autorizzazione server -> e quindi selezionare IIS APPPOOL\ASP.NET v4.0 e concedere l'autorizzazione.


Ho usato SQL Server Profiler (disponibile in SSMS => menu Strumenti) e ho visto lì (quando IIS ha tentato di connettersi al database) che il mio utente IIS era per qualche motivo NT AUTHORITY \ IUSR, non importa di tutti i passaggi consigliati nelle risposte in questa domanda . Quindi ho aggiunto quell'utente a SQL Server e ha funzionato ...


L'impostazione dell'identità rende questo lavoro solo nelle mie pagine.


Mi sono imbattuto nello stesso problema testando l'API Web ASP.NET

Web.Host sviluppato nel database Visual Studio 2013 Express creato in SQL Server 2012 Express Esegui test utilizzando IIS Express integrato (funzionante) Modificato per utilizzare IIS Local (dalla pagina delle proprietà - opzione Web) Test eseguito con Fiddler Errore ricevuto - Impossibile aprire il database per provider .... citando 'APPPOOL \ DefaultAppPool'

Soluzione che ha funzionato.

In IIS

Fare clic sul pool di applicazioni 'DefaultAppPool' Set Identify = 'ApplicationPoolIdentity' Imposta .NET framework = v4.0 (anche se la mia app era 4.5)

In SQL Server Management Studio

Fare clic con il tasto destro del mouse sulla cartella Sicurezza (sotto il motore di SQL Server, quindi applicare a tutte le tabelle) Fare clic con il pulsante destro su Utente e aggiungere 'APPPOOL IIS \ DefaultAppPool'. Nelle posizioni di sicurezza sulla colonna 'Concessione' selezionare le opzioni che si desidera fornire. Riguardo a quanto sopra se sei un DBA probabilmente conosci e vuoi controllare quali sono queste opzioni. Se sei come me, uno sviluppatore voleva semplicemente testare il tuo servizio API WEB, che accedeva anche a SQL Server tramite EF 6 in stile MVC, quindi controlla tutto. :) Sì, lo so ma ha funzionato.


Nel webform di Asp.net,

questo errore è stato risolto durante l'installazione di asp.net da:

Gestore server> Gestisci> Aggiungi ruolo e funzionalità> Ruoli server> Server Web (IIS)> Server Web> Sviluppo applicazioni> è installato ASP.NET 3.5 / 4.6.

il mio problema risolto.


Non utilizzare Integrated Security. Usa User Id=yourUser; pwd=yourPwd; User Id=yourUser; pwd=yourPwd;

Questo risolve il problema.


Per la cronaca, se si verifica questo errore dopo il passaggio da LocalDB a SQLEXPRESS , assicurarsi che il database esista già in SQLEXPRESS . Puoi verificarlo in Management Studio.

Ho avuto lo stesso problema durante l'utilizzo di Entity Framework dopo il passaggio a SQLEXPRESS from LocalDB . Ho dovuto eseguire il comando Update-Database . Sono riuscito a connettermi con successo dopo.


Per prima cosa è necessario cancellare se si sta utilizzando l'autenticazione di Windows e non si menziona alcuna password del nome utente nella stringa di connessione, quindi:

Cosa succede quando si esegue il codice tramite localhost: quando si esegue il client di prova wcf da localhost, sarà in grado di comunicare al database in quanto l'applicazione in modalità debug locale sta chiamando il database dal servizio del proprio account. Quindi ha accesso al database perché devenv.exe è in esecuzione con il tuo account utente.

Ma quando distribuisci il tuo servizio web in IIS. Ora capisco che questo servizio gira sotto IIS non sotto il tuo account. Quindi è necessario assegnare i diritti di accesso al servizio IIS per accedere al server sql per l'autenticazione di Windows. Qui il tuo servizio web non sarebbe in grado di comunicare al server SQL a causa del problema dei diritti di accesso e Login non riuscito per l'utente_______ (qui verrà il tuo utente)

Pertanto, se si utilizza l'autenticazione di Windows per connettere il proprio database, è sufficiente modificare le impostazioni del pool di applicazioni IIS. È necessario modificare l'identità del pool di applicazioni IIS sul sistema locale.

Di seguito sono riportati i passaggi per l'autenticazione di Windows WCF: • Apri IIS (Windows + R (esegui) quindi digita inetmgr, quindi fai clic su OK) • fai doppio clic sul nome del PC in Connessioni • Fai clic su Pool di applicazioni • Seleziona il pool di app (DefaultAppPool) • Quindi sotto azioni sul tasto destro del mouse Impostazioni avanzate: • Vai alla sezione Process Model e • fai clic su Identity. • Ora selezionare LocalSystem.

Ora apri il tuo sql server management studio: apri run-> quindi digita ssms poi premi ok in ssms, accedi usando il tuo account di autenticazione di Windows. apri la scheda di sicurezza espandi la scheda degli accessi e sarai in grado di visualizzare il tuo account.

Ora apri le proprietà del tuo account vai su userMapping quindi seleziona il database che vuoi connettere, quindi controlla i servizi di appartenenza al ruolo che vuoi utilizzare per il database selezionato, fai clic su ok. (Per i servizi di rete, ad esempio gli utenti della rete Intranet, è necessario configurare le impostazioni precedenti anche per l'utente NT AUTHORITY \ SYSTEM)

aggiungi Trusted_Connection = True; proprietà nella stringa di connessione. Salvalo e distribuisci il servizio web. Riavvia il pool di applicazioni.

sarai in grado di connettere il database ora.


Se nella stringa di connessione hai specificato:

User ID=xxx;Password=yyy

ma nella stringa di connessione c'è:

Trusted_Connection=true;

SQL Server utilizzerà l'autenticazione di Windows, quindi i valori della connessione verranno ignorati e sostituiti (IIS utilizzerà l'account Windows specificato nel profilo utente Identity). maggiori informazioni qui

Lo stesso vale se nella stringa di connessione c'è:

 Integrated Security = true;

o

 Integrated Security = SSPI;

perché verrà utilizzata l'autenticazione di Windows per connettersi al server del database. maggiori informazioni qui


Sembra che stia fallendo il tentativo di aprire una connessione a SQL Server.

È necessario aggiungere un accesso a SQL Server per IIS APPPOOL\ASP.NET v4.0 e concedere le autorizzazioni al database.

In SSMS, sotto il server, espandere Sicurezza, quindi fare clic con il tasto destro del mouse su Login e selezionare "Nuovo accesso ...".

Nella finestra di dialogo Nuovo accesso, inserire il pool di applicazioni come nome di accesso e fare clic su "OK".

È quindi possibile fare clic con il pulsante destro del login per il pool di app, selezionare Proprietà e selezionare "Mappatura utente". Controllare il database appropriato e i ruoli appropriati. Penso che potresti semplicemente selezionare db_datareader e db_datawriter , ma penso che avresti ancora bisogno di concedere permessi per eseguire stored procedure se lo fai tramite EF. Puoi controllare i dettagli per i ruoli here .


assicurati di avere ...

Trusted_Connection=false;

nella tua connessione String


vai a iis -> pool di applicazioni -> trova il tuo pool di applicazioni utilizzato nell'applicazione

selezionare il pool di applicazioni utilizzato per l'applicazione, fare clic con il pulsante destro del mouse selezionare impostazioni avanzate

Seleziona identità del pool di applicazioni

selezionare integrato come Sistema locale e fare clic su OK