it-swarm.com.de

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

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

Lokal in IIS habe ich meinen Default Web Site mit meiner Bereitstellung. Sowohl mein Deploy als auch Default Web Site befinden sich im Pool ASP.NET v4.0 (siehe Image für Einstellungen) des Pool-Ziel-Frameworks 4 als mein Webprojekt .Pool SettingsBeim Besuch der Website zeigt der Browser die Seite nicht an, und der Browser kann stattdessen die Seite herunterladen.

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

Mit dem Event Logger sehe ich Fehler wie folgt:

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: Sie können in den Ressourcen zu dieser Frage nachlesen, dass Berechtigungen für MS SQL 2008 manuell erteilt werden müssen, wie in seiner Antwort erläutert Verwenden Sie IIS 7.5 und MS SQL 2008 R2, um die Berechtigung manuell festzulegen sollte nicht notwendig sein.

388
GibboK

Sieht so aus, als wäre der Versuch fehlgeschlagen, eine Verbindung zu SQL Server zu öffnen.

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

Erweitern Sie im SSMS unter dem Server die Sicherheit, klicken Sie mit der rechten Maustaste auf Anmeldungen und wählen Sie "Neue Anmeldung ...".

Geben Sie im Dialogfeld "Neues Login" den App-Pool als Login-Namen ein und klicken Sie auf "OK".

enter image description here

Sie können dann mit der rechten Maustaste auf das Login für den App-Pool klicken, Eigenschaften auswählen und "Benutzerzuordnung" auswählen. Überprüfen Sie die entsprechende Datenbank und die entsprechenden Rollen. Ich denke, Sie könnten einfach db_datareader und db_datawriter auswählen, aber ich denke, Sie müssten trotzdem Berechtigungen zum Ausführen gespeicherter Prozeduren erteilen, wenn Sie dies über EF tun. Sie können die Details für die Rollen hier überprüfen.

530
Jeff Ogata

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

Unter ApplicationPoolIdentity finden Sie das lokale System. Dadurch wird Ihre Anwendung unter NT AUTHORITY\SYSTEM ausgeführt. Hierbei handelt es sich standardmäßig um eine vorhandene Anmeldung für die Datenbank.

Bearbeiten: Bevor Sie diesen Vorschlag anwenden, sollten Sie die Sicherheitsauswirkungen beachten und verstehen.

329
Thea

stellen Sie sicher, dass Sie ...

Trusted_Connection=false;

in deiner verbindung string

24
JGilmartin

Ich habe dieses Problem mit SQL als folgendes Bild gelöst.

Klicken Sie mit der rechten Maustaste auf Datenbank -> Eigenschaften -> Berechtigung -> Berechtigung für Server anzeigen -> und wählen Sie dann IIS APPPOOL\ASP.NET v4.0 aus und erteilen Sie die Berechtigung.

db

16
DevT

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
13
Rolwin C

Wenn Sie in der Verbindungszeichenfolge Folgendes angegeben haben:

User ID=xxx;Password=yyy

aber in der Verbindungszeichenfolge gibt es:

Trusted_Connection=true;

SQL Server verwendet die Windows-Authentifizierung, sodass Ihre Verbindungswerte ignoriert und überschrieben werden (IIS verwendet das in Identity-Benutzerprofil angegebene Windows-Konto) . weitere Informationen hier

Dasselbe gilt, wenn in der Verbindungszeichenfolge Folgendes enthalten ist:

 Integrated Security = true;

oder

 Integrated Security = SSPI;

weil die Windows-Authentifizierung für die Verbindung zum Datenbankserver verwendet wird . weitere Informationen hier

9
spiderman77

Ich hasse die ApplicationPoolIdentity. Ich habe immer ein Windows-Benutzerkonto als Konto in AppPools festgelegt.

Wie gesagt, es klingt wie ein Problem mit der Datenbanksicherheit. Erstellen Sie also ein NT-Benutzerkonto, weisen Sie es dem AppPool von ASP.NET v4.0 zu, und erteilen Sie ihm die Berechtigung für den Websiteordner und die entsprechenden Tabellen in SQL.

7
Christian

gehe zu iis -> Anwendungspools -> finde den in application verwendeten Anwendungspool 

 enter image description here

Wählen Sie Ihren Anwendungspool für die Anwendung aus. Klicken Sie mit der rechten Maustaste. Wählen Sie Erweiterte Einstellungen aus.

 enter image description here

Wählen Sie die Anwendungspoolidentität aus  enter image description here

select als lokales System auswählen und klicken Sie auf OK

6
Lijo

Verwenden Sie keine Integrated Security Verwenden Sie User Id=yourUser; pwd=yourPwd;.

Das löst das Problem.

6
user4203557

Zuerst müssen Sie löschen, ob Sie die Windows-Authentifizierung verwenden und in Ihrer Verbindungszeichenfolge kein Benutzername-Kennwort angeben.

Was passiert, wenn Sie Ihren Code über localhost ausführen: Wenn Sie Ihren wcf-Testclient über localhost ausführen, kann er mit der Datenbank kommunizieren, da die Anwendung im lokalen Debugmodus die Datenbank vom Dienst Ihres Kontos aufruft. Es hat also Zugriff auf die Datenbank, da devenv.exe unter Ihrem Benutzerkonto ausgeführt wird.

Aber wenn Sie Ihren Webdienst in IIS bereitstellen. Verstehen Sie nun, dass dieser Dienst unter IIS = nicht unter Ihrem Konto ausgeführt wird. Daher müssen Sie dem IIS -Dienst Zugriffsrechte zuweisen, um auf den SQL-Server für die Windows-Authentifizierung zuzugreifen. Hier könnte Ihr Web-Service aufgrund von Zugriffsberechtigungsproblemen und der Anmeldung für den Benutzer _______ nicht mit dem SQL-Server kommunizieren (hier kommt Ihr Benutzer)

Wenn Sie also die Windows-Authentifizierung zum Herstellen einer Verbindung mit Ihrer Datenbank verwenden, müssen Sie nur die IIS Anwendungspooleinstellungen ändern. Sie müssen IIS die Identität des Anwendungspools in das lokale System ändern.

Im Folgenden finden Sie die Schritte für die Windows-Authentifizierung für WCF: • Öffnen IIS (Windows + R (Ausführen), geben Sie dann inetmgr ein und klicken Sie auf OK.) • Doppelklicken Sie unter Verbindungen auf Ihren PC-Namen. • Klicken Sie auf Anwendungspools. • Wählen Sie Ihren Anwendungspool aus (DefaultAppPool) • Klicken Sie dann unter Aktionen rechts auf Erweiterte Einstellungen: • Gehen Sie zum Abschnitt Prozessmodell und • klicken Sie auf Identität. • Wählen Sie jetzt LocalSystem.

Öffnen Sie nun Ihr SQL Server Management Studio: Öffnen Sie run-> und geben Sie ssms ein. Drücken Sie dann ok in ssms und melden Sie sich mit Ihrem Windows-Authentifizierungskonto an. Öffnen Sie die Registerkarte "Sicherheit" und erweitern Sie die Registerkarte "Anmeldungen". Anschließend können Sie Ihr Konto anzeigen.

Öffnen Sie nun die Eigenschaften Ihres Kontos Gehen Sie zu userMapping. Wählen Sie dann die Datenbank aus, zu der Sie eine Verbindung herstellen möchten Überprüfen Sie dann die Rollenmitgliedschaftsdienste, die Sie für die ausgewählte Datenbank verwenden möchten Klicken Sie auf OK . (Für Netzwerkdienste dh Intranet-Benutzer müssen die obigen Einstellungen auch für Benutzer von NT AUTHORITY\SYSTEM konfigurieren.

add Trusted_Connection = True; Eigenschaft in Ihrer Verbindungszeichenfolge. Speichern Sie es und stellen Sie den Webdienst bereit. App-Pool neu starten.

sie können jetzt die Datenbank verbinden.

5
amar gadekar

Ich hatte diese Nachricht und verwende die Windows-Authentifizierung auf dem Webserver.

Ich wollte, dass der derzeit authentifizierte Webbenutzer gegenüber der Datenbank authentifiziert wird, anstatt den im App Pool angegebenen IIS APPPOOL\ASP.NET v4-Benutzer zu verwenden. 

Ich habe gefunden, indem ich Folgendes in der web.config eingetragen habe, das dies für mich behoben hat:

<system.web>
  <identity impersonate="true" />
</system.web>

https://msdn.Microsoft.com/de-de/library/bsz5788z.aspx

Ich sehe andere Antworten zum Erstellen des AppPool-Benutzernamens in der SQL-Datenbank oder nur zur Verwendung von SQL-Authentifizierung. Beides wäre korrekt, wenn Sie nicht einzelne Windows-Benutzer in SQL erfassen oder sichern möchten.

Tom

4
tommylux

Ich hatte dieses Problem und es wurde tatsächlich durch etwas anderes verursacht - Ich hatte den Benutzer 'IIS APPPOOL\ASP.NET v4.0' in meiner Datenbank, aber es funktionierte immer noch nicht. 

Ich hatte kürzlich meine SQL Server-Installation aktualisiert und der Benutzer wurde dabei vom Login getrennt. Daher gab es unter Datenbank -> Sicherheit -> Benutzer einen 'IIS APPPOOL\ASP.NET v4.0', ABER kein Benutzer, der nicht unter Sicherheit steht -> Anmeldungen.

Der Login "IIS APPPOOL\ASP.NET v4.0" wurde unter "Security -> Logins" hinzugefügt. SQL Server ordnete dies automatisch dem Benutzer in der Datenbank zu (dies musste früher manuell erfolgen) und das Problem wurde behoben.

4
The Coder

Keine Windows-Authentifizierung verwenden, SQL Server-Authentifizierung verwenden

Wenn Sie die Verbindung über das Dialogfeld "Serververbindung" erstellt haben, überprüfen Sie die Verbindungen in der Datei "web.config". Es ist wahrscheinlich, dass Sie eine Verbindung erstellt/geändert haben und diese als vertrauenswürdige Verbindung in web.config gespeichert wurde. Verwenden Sie einfach diese Authentifizierung

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

was sollte den Fehler beheben.

3
Hammad Khan

Wenn Sie die Identität festlegen, funktioniert dies nur auf meinen Seiten.

2
charles

Wenn Ihre Verbindungszeichenfolge in Ihrer web.config hinzugefügt wurde, stellen Sie sicher, dass "Integrated Security = false;" Es würde also die ID und das Kennwort verwenden, die in der Datei web.config angegeben sind.

<connectionStrings>
    <add providerName="System.Data.SqlClient" name="MyDbContext" connectionString="Data Source=localhost,1433;Initial Catalog=MyDatabase;user id=MyUserName;Password=MyPassword;Trusted_Connection=true;Integrated Security=false;" />
</connectionStrings>
2
Daming Fu

Cassini führt Ihre Website als eigene Benutzeridentität aus, wenn Sie die Visual Studio-Anwendung starten. IIS betreibt Ihre Website als App Pool Identity. Wenn der App Pool Identity kein Zugriff auf die Datenbank gewährt wird, werden Fehler angezeigt. 

IIS führte App Pool Identity ein, um die Sicherheit zu verbessern. Sie können Websites unter der Standard-App-Pool-Identität ausführen oder einen neuen App-Pool mit einem eigenen Namen erstellen oder einen neuen App-Pool mit einem eigenen Namen erstellen, der unter einem Benutzerkonto (normalerweise Domänenkonto) ausgeführt wird. 

In Netzwerksituationen (die sich nicht in Azure befinden) können Sie einen neuen App Pool unter einem Active Directory-Domänenbenutzerkonto ausführen lassen. Ich ziehe dies dem Maschinenkonto vor. Dadurch erhalten Sie granulare Sicherheit und einen granularen Zugriff auf Netzwerkressourcen, einschließlich Datenbanken. Jede Website läuft in einem anderen App Pool (und jede davon läuft unter einem eigenen Domänenbenutzerkonto). 

Verwenden Sie weiterhin die integrierte Sicherheit von Windows in allen Verbindungszeichenfolgen. Fügen Sie in SQL Server die Domänenbenutzer als Anmeldungen hinzu und erteilen Sie Datenbanken, Tabellen, SP usw. auf Website-Basis Berechtigungen. Z.B. DB1, der von Website1 verwendet wird, hat ein Login für Benutzer1, da Website1 in einem App Pool als Benutzer1 ausgeführt wird. 

Eine Herausforderung bei der Bereitstellung aus der in Visual Studio integrierten DB (z. B. LocalDB) und dem integrierten Webserver für eine Produktionsumgebung ergibt sich aus der Tatsache, dass die Benutzer-SID des Entwicklers und dessen ACLs nicht in einer sicheren Produktionsumgebung verwendet werden sollen. Microsoft stellt Tools für die Bereitstellung bereit. Aber schade um den armen Entwickler, der an alles gewöhnt ist, was im neuen easy VS IDE mit localDB und localWebServer einfach funktioniert, da diese Tools für diesen Entwickler schwer zu verwenden sein werden, insbesondere für einen solchen Entwickler, dem es an SysAdmin fehlt und DBAdmin-Support oder deren Fachwissen. Die Bereitstellung in Azure ist jedoch einfacher als die oben erwähnte Situation im Unternehmensnetzwerk. 

2
subsci

Eine andere Möglichkeit, der Datenbank die Berechtigung für den Benutzer IIS APPPOOL\ASP.NET v4.0 zu erteilen, ist wie folgt. 
 enter image description here


  1. Fügen Sie mit Ihrem Standardschema einen neuen Benutzer mit Benutzername und Anmeldename als IIS APPPOOL\ASP.NET v4.0 hinzu.
  2. Wechseln Sie zu Besitzerschema und Mitgliedschaft. Überprüfen Sie db_datareader, db_datawriter
1
shana

Ich habe genau das getan, was @JeffOgata gesagt hat, aber ich habe den Fehler erhalten:

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

Ich habe mir meine Fehlermeldung noch einmal angesehen und es stand Login failed for user 'IIS APPPOOL\DefaultAppPool'.

Nach dem Hinzufügen eines Benutzers mit dem Namen IIS APPPOOL\DefaultAppPool hat alles funktioniert.

0
Ogglas

Ich verwendete SQL Server Profiler (verfügbar in SSMS => Tools-Menü) und sah dort (als IIS versuchte, eine Verbindung zur Datenbank herzustellen), dass mein IIS - Benutzer aus irgendeinem Grund NT AUTHORITY\IUSR war alle Schritte, die in den Antworten zu dieser Frage empfohlen werden. Also habe ich diesen Benutzer zu SQL Server hinzugefügt, und es hat funktioniert ...

0
alexkovelsky

Ich habe das gleiche Problem, das ich gelöst habe, indem ich Integrated Security=True in false Ändere. Jetzt funktioniert es

0
subramanya4

In einer bestimmten Datenbank, die nach dem SSMS-Update erstellt wird, können Sie diesem Fehler begegnen. Öffnen Sie SSMS, wählen Sie Ihre Datenbanken aus und öffnen Sie Ihre erforderliche Datenbank. Klicken Sie anschließend auf Security -> Users ->, klicken Sie mit der rechten Maustaste auf Users, und klicken Sie erneut auf 'New User' und fügen Sie'NT AUTHORITY\Authenticated Users hinzu 'und speichern Sie Ihre Arbeit und gehen Sie zu Ihrem Formular auf Web/Desktop, was auch immer Sie tun. Genießen....

0

Ich hatte das gleiche Problem beim Testen der ASP.NET-Web-API 

Entwickelte Web.Host in Visual Studio 2013 Express In SQL Server 2012 Express Erstellte Datenbank. Durchgeführter Test mit eingebautem IIS Express (funktioniert) Geändert zur Verwendung von IIS Local (von Eigenschaftsseite - Weboption) Test mit Fiddler ausgeführt Fehler. Fehler beim Öffnen der Datenbank für Provider .... unter Berufung auf "APPPOOL\DefaultAppPool" 

Lösung, die funktioniert hat.

In IIS

Klicken Sie auf Anwendungspool 'DefaultAppPool' Set Identify = 'ApplicationPoolIdentity' Set .NET Framework = v4.0 (auch wenn meine App 4.5 war)

In SQL Server Management Studio

Klicken Sie mit der rechten Maustaste auf den Ordner Sicherheit (unter dem SQL Server-Modul gilt also für alle Tabellen) .__ Klicken Sie mit der rechten Maustaste auf Benutzer, und fügen Sie "IIS APPPOOL\DefaultAppPool" .__ ein. Markieren Sie in der Spalte "Gewähren" die Optionen, die Sie angeben möchten . Wenn Sie ein Datenbankadministrator sind, wissen Sie wahrscheinlich und möchten steuern, ob Welche Optionen dies sind. Wenn Sie wie ich ein Entwickler wären, wollten Sie nur Ihren WEB-API-Service testen, der zufällig auch über EF 6in im MVC-Stil auf SQL Server zugreift. :) Ja ich weiß aber es hat funktioniert.

0
Brian Quinn

Ich dachte, ich würde dies als Antwort posten, da es für die Frage relevant ist und es in einigen Fällen beantworten kann.

Dieselbe Meldung erscheint auch wenn die Datenbank nicht existiert!

Stellen Sie sicher, dass Ihre Verbindungszeichenfolge keine Rechtschreibfehler enthält, auf die richtige Serverinstanz verweist usw.

0
colmde

Haben Sie getan, was @Teddy empfohlen wurde und Sie NOCH die gleiche Fehlermeldung erhalten?

Stellen Sie sicher, dass Sie die Einstellungen für den App-Pool ändern, der Ihrem virtuellen Verzeichnis und nicht dem übergeordneten Server entspricht. Jedes virtuelle Verzeichnis hat einen eigenen AppPool und erbt nicht.

0
Simon_Weaver

Wenn Sie ein neues Login hinzufügen, stellen Sie sicher, dass der Authentifizierungsmodus unter Servereigenschaften (Rechtsklick -> Eigenschaften)/security auf sqlserver und windows und nicht nur windows eingestellt ist.

0
badr slaoui

Wichtig: Aktivieren Sie "sysadmin" in den Serverrollen

0
edu

Fügen Sie "Jeder" unter Sicherheit hinzu. Wenn Sie den Server und die Benutzer, die sich bei der Datenbank anmelden, hinzugefügt haben, fehlt Ihnen dies. Hoffe das hilft.

0
avinava basu

mir ist etwas Ähnliches passiert. Bei mir hat sich die Eigenschaft Integrated Security = True in Integrated Security = false in der web.config der Website geändert

0
Erik Rodriguez

Setzen Sie in DefaultAppPool NetworkService in der Identity-Eigenschaft und fügen Sie in Sql Server User Network Service hinzu und erteilen Sie die entsprechenden Berechtigungen für Ihre Datenbank anderer Computer im Netzwerk. Wenn Sie LocalSystem in der Identität in IIS festlegen, funktioniert dies gut und es ist nicht erforderlich, einen anderen Benutzer in SQL Server zu erstellen. Ich denke jedoch, dass dies in einer Netzwerkumgebung nicht funktioniert.

0
Luis

In Asp.net-Webformular

dieser Fehler wurde bei der Installation von asp.net behoben:

Server-Manager> Verwalten> Rolle und Feature hinzufügen> Serverrollen> Webserver (IIS)> Webserver> Anwendungsentwicklung> ASP.NET 3.5/4.6 ist installiert.

mein Problem behoben.

0
Zolfaghari

Wenn Sie nach dem Wechsel von LocalDB zu SQLEXPRESS auf diesen Fehler stoßen, stellen Sie sicher, dass die Datenbank bereits in SQLEXPRESS vorhanden ist. Sie können dies in Management Studio überprüfen.

Ich hatte das gleiche Problem bei der Verwendung von Entity Framework, nachdem ich zu SQLEXPRESS from LocalDB gewechselt hatte. Ich musste den Befehl Update-Database ausführen. Ich konnte danach erfolgreich eine Verbindung herstellen.

0
Irshu