499 Stimmen

Anmeldung für Benutzer 'IIS APPPOOL' fehlgeschlagen \ASP.NET v4.0'

Ich habe ein Web-Projekt (C# Asp.Net, EF 4, MS SQL 2008 und IIS 7) und ich muss es auf IIS 7 lokal migrieren (im Moment funktioniert gut mit CASSINI).

Lokal im IIS habe ich meine Default Web Site mit meinem Einsatz. Sowohl mein Einsatz als auch Default Web Site sind auf Pool ASP.NET v4.0 (siehe Bild für Einstellungen) der Pool Ziel Framework 4 als mein Web-Projekt. Pool Settings Beim Besuch der Website zeigt der Browser die Seite nicht an und erlaubt dem Browser stattdessen, die Seite herunterzuladen.

Ich habe andere Projekte, die lokal auf IIS laufen, und sie funktionieren ohne Probleme (aber sie verwenden kein Entity Framework).

In der Ereignisprotokollierung werden folgende Fehler angezeigt:

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)

Verwandte Frage

UPDATE: In den Ressourcen zu dieser Frage können Sie lesen, dass die Berechtigungen für MS SQL 2008 manuell vergeben werden müssen, wie arift in seiner Antwort erklärt. Bei der Verwendung von IIS 7.5 und MS SQL 2008 R2 sollte die manuelle Vergabe von Berechtigungen nicht notwendig sein.

690voto

Jeff Ogata Punkte 54689

Es sieht so aus, als würde der Versuch, eine Verbindung zu SQL Server zu öffnen, fehlschlagen.

Sie müssen ein Login zu SQL Server hinzufügen für IIS APPPOOL\ASP.NET v4.0 und erteilen der Datenbank die entsprechenden Rechte.

Erweitern Sie in SSMS unter dem Server den Bereich Sicherheit, klicken Sie dann mit der rechten Maustaste auf Logins und wählen Sie "New Login...".

Geben Sie im Dialogfeld "Neue Anmeldung" den Anwendungspool als Anmeldenamen ein und klicken Sie auf "OK".

enter image description here

Klicken Sie dann mit der rechten Maustaste auf die Anmeldung für den App-Pool, wählen Sie Eigenschaften und dann "Benutzerzuordnung" aus. Überprüfen Sie die entsprechende Datenbank und die entsprechenden Rollen. Ich denke, Sie könnten einfach wählen db_datareader y db_datawriter aber ich denke, dass Sie immer noch Berechtigungen für die Ausführung von gespeicherten Prozeduren erteilen müssen, wenn Sie das über EF tun. Sie können die Details für die Rollen überprüfen aquí .

369voto

Thea Punkte 7764

Sie können die ApplicationPoolIdentity unter IIS7 -> Anwendungspools -> Erweiterte Einstellungen ändern. AdvancedSettings

Unter ApplicationPoolIdentity finden Sie local system. Dadurch wird Ihre Anwendung unter NT AUTHORITY\SYSTEM der standardmäßig ein bestehendes Login für die Datenbank ist.

Edit: Bevor Sie diesen Vorschlag umsetzen, sollten Sie die Auswirkungen auf die Sicherheit beachten und verstehen.

41voto

DevT Punkte 4545

Ich löste dieses Problem mit Sql als folgendes Bild.

Klicken Sie mit der rechten Maustaste auf db-> Eigenschaften -> Berechtigung -> Serverberechtigung anzeigen -> und wählen Sie dann IIS APPPOOL\ASP.NET v4.0 und die Erlaubnis erteilen.

db

33voto

JGilmartin Punkte 7586

Stellen Sie sicher, dass Sie...

Trusted_Connection=false;

in Ihrem Verbindungsstring

30voto

Rolwin Crasta Punkte 4051

Führen Sie dieses Sql-Skript aus

IF NOT EXISTS (SELECT name FROM sys.server_principals WHERE name = 'IIS APPPOOL\DefaultAppPool')
BEGIN
    CREATE LOGIN [IIS APPPOOL\DefaultAppPool] 
      FROM WINDOWS WITH DEFAULT_DATABASE=[master], 
      DEFAULT_LANGUAGE=[us_english]
END
GO
CREATE USER [WebDatabaseUser] 
  FOR LOGIN [IIS APPPOOL\DefaultAppPool]
GO
EXEC sp_addrolemember 'db_owner', 'WebDatabaseUser'
GO

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X