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

430

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

Vor Ort in IIS habe ich meine Default Web Sitemit meiner Bereitstellung. Sowohl meine Bereitstellung als auch Default Web Sitedie Verwendung von Pool ASP.NET v4.0 (siehe Bild für Einstellungen) des Pool-Ziel-Frameworks 4 als mein Webprojekt. Pooleinstellungen Beim Besuch der Website zeigt der Browser die Seite nicht an und lässt den Browser 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).

Bei Verwendung des Ereignisprotokolls 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: Sie können in den Ressourcen zu dieser Frage lesen, dass Berechtigungen für MS SQL 2008 manuell erteilt werden müssen, wie in seiner Antwort erläutert. Unter IIS 7.5 und MS SQL 2008 R2 sollte das manuelle Festlegen von Berechtigungen nicht erforderlich sein.

GibboK
quelle
2
Haben Sie die Berechtigung zum Identifizieren des App-Pools für den Website-Ordner zugelassen?
Christian
Ich bin mir nicht sicher, können Sie mir bitte sagen, wie es geht?
GibboK
Tatsächlich könnte dies, wie adrift sagt, ein SQL-Sicherheitsproblem sein. Am besten richten Sie ein NT-Benutzerkonto für den AppPool ein und erteilen diese Berechtigung dann dem Website-Ordner und den entsprechenden Tabellen in SQL
Christian
1
@ GibboK: Ich möchte Sie ermutigen, die akzeptierte Antwort hier zu überprüfen und eine passendere Antwort zu wählen. Die akzeptierte Antwort führt viele Menschen in ein schwarzes Sicherheitsloch. Ja es funktioniert. Nein, das ist wirklich keine gute Idee. Siehe meine Kommentare unten.
Spender

Antworten:

594

Es scheint, als würde der Versuch, eine Verbindung zu SQL Server herzustellen, fehlschlagen.

Sie müssen SQL Server eine Anmeldung hinzufügen IIS APPPOOL\ASP.NET v4.0und der Datenbank Berechtigungen erteilen.

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

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

Geben Sie hier die Bildbeschreibung ein

Sie können dann mit der rechten Maustaste auf die Anmeldung 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 auswählen db_datareaderund db_datawriter, aber ich denke, Sie müssten immer noch Berechtigungen erteilen, um gespeicherte Prozeduren auszuführen, wenn Sie dies über EF tun. Sie können die Details für die Rollen überprüfen hier .

Jeff Ogata
quelle
8
danke, ich habe getan, was du traurig bist, jetzt erhalte ich folgende Fehlermeldung: Die vom Login angeforderte Datenbank "SiteNameExtension" kann nicht geöffnet werden. Die Anmeldung ist fehlgeschlagen. Anmeldung für Benutzer 'IIS APPPOOL \ DefaultAppPool' fehlgeschlagen.
GibboK
76
SEHR WICHTIG: KLICKEN SIE NICHT AUF SUCHE, UM DAS LOGIN ZU BESTÄTIGEN! Es wird es nicht erkennen, aber es wird funktionieren. Geben Sie es einfach als IIS APPPOOL \ SimonsAppPoolName ein. Siehe diese stackoverflow.com/questions/1933134
Simon_Weaver
6
Stattdessen ist es besser, 'Identität' von IIS in 'LocalSystem' zu ändern, wie in der nächsten Antwort beschrieben.
Altaf Patel
Kann dies funktionieren, wenn sich Ihre SQL Server-Instanz auf einem anderen Hostcomputer als Ihrem IIS-Hostcomputer befindet? Weil ich das gleiche Problem beheben muss, aber SQL und IIS nicht auf demselben Computer sind. Die Verwendung der Windows-Authentifizierung für diesen neuen Benutzer funktioniert also nicht
Segers-Ian,
5
Für mich war der hinzuzufügende Benutzer 'IIS APPPOOL \ DefaultAppPool'. Dann hat es funktioniert.
Marcel
341

Sie können die ApplicationPoolIdentity über IIS7 -> Anwendungspools -> Erweiterte Einstellungen ändern. Erweiterte Einstellungen

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

Bearbeiten: Bevor Sie diesen Vorschlag anwenden, sollten Sie die Auswirkungen auf die Sicherheit beachten und verstehen.

Thea
quelle
51
@ GibboK, Wenn Sie sich Sorgen um die Sicherheit machen, tun Sie dies nicht. Siehe technet.microsoft.com/en-us/library/dd378907(v=WS.10).aspx
Jeff Ogata
4
Zusätzlich zum Ausführen des App-Pools als LocalSystem-Identität musste ich den Benutzer "NT AUTHORITY \ SYSTEM" auch Datenbankrollen
Phil
31
Das stinkt. Das Erteilen der SYSTEM-Berechtigung für eine Web-App ist ein Rezept für eine Katastrophe und bietet Missetätern alle möglichen Möglichkeiten, nicht nur Ihrer Web-App, sondern dem gesamten Hosting-Server Schaden zuzufügen. Nur weil die Datenbank Anmeldungen von SYSTEM akzeptiert, bedeutet dies nicht, dass Sie Ihre Webanwendung als SYSTEM ausführen sollten. Auf dem Windows-Desktop können Sie nicht einmal als SYSTEM ausgeführt werden (ohne durch die Rahmen zu springen). Das Ausführen einer Webanwendung mit dieser Berechtigung ist eine wirklich, wirklich dumme Idee. Sie sollten die DB veranlassen, die aktuelle Apppool-Identität zu akzeptieren. Ich würde -100, wenn ich könnte. -1.
Spender
8
SYSTEM hat höhere Privilegien als Administrator. Sie sollten niemals Ihren Webserver mit etwas laufen, dieses Niveau nähern.
Slugster
1
Ich mache das Gastkonto einfach zu einem Mitglied der Administratorgruppe. Einfach, sauber, keine Probleme mit Sicherheitsbullshit.
29

Stellen Sie sicher, dass Sie ...

Trusted_Connection=false;

in Ihrer Verbindung String

JGilmartin
quelle
7
Wenn Trusted_Connection = true in der Verbindungszeichenfolge ist, werden die SQL-Authentifizierungswerte mit dem IIS-Identitätsbenutzerprofil überschrieben.
Jeff der Bär
2
In meinem Fall wurde Folgendes entfernt: Integrierte Sicherheit = True aus der Verbindungszeichenfolge wurde behoben.
Carlos R Balebona
Hat für mich gearbeitet. Rettete den Tag @JefftheBear
D_Edet
26

Ich habe dieses Problem mit SQL wie folgt gelöst.

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

db

DevT
quelle
Ist der obige Prozess (und das obige Image), den Sie beschreiben, Berechtigungen auf Serverebene für diese Anwendungspoolidentität zu gewähren? Klingt nicht nach einer guten Idee.
Chris Walsh
2
Dieser Benutzer hat die Medaille verdient! Nichts hat geholfen als das!
Khateeb321
2
@ Khateeb321 absolut, vielen Dank DevT für Ihre Antwort.
Azxdreuwa
21

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
Rolwin Crasta
quelle
Danke, einfachster Weg;) +1
Zolfaghari
11

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 im Identitätsbenutzerprofil angegebene Windows-Konto). Mehr Infos hier

Gleiches gilt, wenn in der Verbindungszeichenfolge Folgendes enthalten ist:

 Integrated Security = true;

oder

 Integrated Security = SSPI;

da die Windows-Authentifizierung verwendet wird, um eine Verbindung zum Datenbankserver herzustellen. Mehr Infos hier

Spider Man
quelle
10

Gehen Sie zu iis -> Anwendungspools -> Suchen Sie Ihren in der Anwendung verwendeten Anwendungspool

Geben Sie hier die Bildbeschreibung ein

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

Geben Sie hier die Bildbeschreibung ein

Wählen Sie die Identität des Anwendungspools aus Geben Sie hier die Bildbeschreibung ein

Wählen Sie Integriertes lokales System und klicken Sie auf OK

Lijo
quelle
7

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

Wie adrift sagt, klingt es nach einem Datenbanksicherheitsproblem. Erstellen Sie also ein NT-Benutzerkonto, weisen Sie es dem ASP.NET v4.0 AppPool zu und erteilen Sie ihm dann die Berechtigung für den Website-Ordner und die entsprechenden Tabellen in SQL.

Christian
quelle
Entschuldigung, keine Ahnung, wie es geht. Könnten Sie mich auf ein Tutorial hinweisen?
Vielen
2
Tun Sie dies nicht, es gibt einen Grund, warum IIS die Identität des App-Pools geändert hat: learn.iis.net/page.aspx/624/application-pool-identities
Julien Lebot
@ LeSnip3R defekter Link
Adaptabi
6

Verwenden Sie keine integrierte Sicherheit. VerwendenUser Id=yourUser; pwd=yourPwd;

Dies löst das Problem.

Bonh
quelle
4

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 dabei wurde der Benutzer von der Anmeldung getrennt. Daher gab es unter Datenbank -> Sicherheit -> Benutzer ein 'IIS APPPOOL \ ASP.NET v4.0', ABER kein Benutzer nicht unter Sicherheit -> Anmeldungen.

SQL Server hat die Anmeldung 'IIS APPPOOL \ ASP.NET v4.0' zu Sicherheit -> Anmeldungen hinzugefügt. Sie wurde automatisch dem Benutzer in der Datenbank zugeordnet (dies musste früher manuell erfolgen) und das Problem wurde behoben.

Der Codierer
quelle
1
nur um hinzuzufügen ... auf der linken Seite unter Berechtigungen ... kreuzen Sie db_writer und db_reader an; und wählen Sie die Datenbank aus, die diese Berechtigungen verwendet.
Benjamin
4

Als erstes müssen Sie löschen, ob Sie die Windows-Authentifizierung verwenden und in Ihrer Verbindungszeichenfolge kein Benutzername-Passwort angeben:

Was passiert, wenn Sie Ihren Code über localhost ausführen: Wenn Sie Ihren wcf-Testclient von localhost aus 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 jetzt, dass dieser Dienst unter IIS und nicht unter Ihrem Konto ausgeführt wird. Sie müssen dem IIS-Dienst also Zugriffsrechte zuweisen, um auf den SQL Server für die Windows-Authentifizierung zugreifen zu können. Hier kann Ihr Webdienst aufgrund eines Problems mit den Zugriffsrechten und der fehlgeschlagenen Anmeldung für den Benutzer _______ nicht mit dem SQL Server kommunizieren (hier wird Ihr Benutzer kommen).

Wenn Sie also die Windows-Authentifizierung verwenden, um Ihre Datenbank zu verbinden, müssen Sie nur die Einstellungen des IIS-Anwendungspools ändern. Sie müssen die Identität des IIS-Anwendungspools in das lokale System ändern.

Im Folgenden finden Sie die Schritte für die Windows-Authentifizierung WCF:

1) Öffnen Sie IIS (Windows + R (Ausführen), geben Sie inetmgr ein und klicken Sie auf OK.)

2) Doppelklicken Sie unter Verbindungen auf Ihren PC-Namen

3) Klicken Sie auf Anwendungspools

4) Wählen Sie Ihren App-Pool aus (DefaultAppPool)

5) Klicken Sie dann unter Aktionen auf der rechten Seite auf Erweiterte Einstellungen:

6) Gehen Sie zum Abschnitt Prozessmodell und

7) Klicken Sie auf Identität.

8) Wählen Sie nun LocalSystem.

Öffnen Sie nun Ihr SQL Server Management Studio: Öffnen Sie run-> und geben Sie ssms ein -> drücken Sie dann OK. Melden Sie sich in ssms mit Ihrem Windows-Authentifizierungskonto an. Öffnen Sie die Registerkarte "Sicherheit". 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 die Datenbank aus, die Sie verbinden möchten, und überprüfen Sie die Rollenmitgliedschaftsdienste, die Sie für die ausgewählte Datenbank verwenden möchten. OK klicken.

(Für Netzwerkdienste, dh Intranetbenutzer, müssen Sie 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. Starten Sie den App-Pool neu.

Sie können jetzt die Datenbank verbinden.

Amar Gadekar
quelle
Perfekt! LocalSystem hat dieses Problem für mich behoben :)
totalitär
3

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

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

Ich fand durch Eingabe der folgenden in der web.config dies für mich behoben:

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

https://msdn.microsoft.com/en-us/library/bsz5788z.aspx

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

Tom

tommylux
quelle
Dies hat es für uns gelöst und wir sind uns nicht sicher warum. IIS / AppPool entführt nur den Verbindungsstring, der explizit "Integrierte Sicherheit = wahr" sagt? Warum??
Guy
3

1_in SqlServer Security => Login => NT AUTHORITY \ SYSTEM => RightClick => Property => UserMaping => Wählen Sie YourDatabse => Public && Owner Select => OK 2_In IIs Application Pools DefaultAppPool => Advance Setting => Identity => LocalSystem => Ok

mehranSattary
quelle
2

Durch das Festlegen der Identität funktioniert dies nur auf meinen Seiten.

Charles
quelle
2

Cassini führt Ihre Website als Ihre eigene Benutzeridentität aus, wenn Sie die Visual Studio-Anwendung starten. IIS führt Ihre Website als App-Pool-Identität aus. Wenn der App-Pool-Identität 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 Standardidentität des App-Pools ausführen oder einen neuen App-Pool mit eigenem Namen erstellen oder einen neuen App-Pool mit eigenem Namen erstellen, der unter einem Benutzerkonto (normalerweise Domänenkonto) ausgeführt wird.

In Netzwerksituationen (die nicht in Azure enthalten sind) können Sie einen neuen App-Pool unter einem Active Directory-Domänenbenutzerkonto ausführen. Ich bevorzuge dies gegenüber dem Maschinenkonto. Auf diese Weise erhalten Sie granulare Sicherheit und granularen Zugriff auf Netzwerkressourcen, einschließlich Datenbanken. Jede Website wird in einem anderen App-Pool ausgeführt (und jede dieser Websites wird unter einem eigenen Domänenbenutzerkonto ausgeführt).

Verwenden Sie Windows Integrated Security weiterhin in allen Verbindungszeichenfolgen. Fügen Sie in SQL Server die Domänenbenutzer als Anmeldungen hinzu und erteilen Sie Datenbanken, Tabellen, SP usw. pro Website Berechtigungen. Beispielsweise hat DB1, das von Website1 verwendet wird, ein Login für Benutzer1, da Website1 in einem App-Pool als Benutzer1 ausgeführt wird.

Eine Herausforderung bei der Bereitstellung von der in Visual Studio integrierten Datenbank (z. B. LocalDB) und dem integrierten Webserver in einer Produktionsumgebung besteht darin, dass die Benutzer-SID des Entwicklers und seine ACLs nicht in einer sicheren Produktionsumgebung verwendet werden dürfen. Microsoft bietet Tools für die Bereitstellung. Aber schade um den armen Entwickler, der daran gewöhnt ist, dass in der neuen einfachen VS-IDE mit localDB und localWebServer alles sofort funktioniert, da diese Tools für diesen Entwickler schwer zu verwenden sind, insbesondere für solche Entwickler, denen SysAdmin- und DBAdmin-Unterstützung fehlt oder ihr Fachwissen. Die Bereitstellung in Azure ist jedoch einfacher als die oben erwähnte Unternehmensnetzwerksituation.

subsci
quelle
2

Wenn Sie Ihre Verbindungszeichenfolge in Ihrer web.config hinzugefügt haben, stellen Sie sicher, dass "Integrated Security = false;" Daher werden die in der web.config angegebene ID und das Kennwort verwendet.

<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>
Verdammter Fu
quelle
2

Wie erwähnt, verwenden Sie nicht die Windows - Authentifizierung, Verwenden Sie SQL Server - Authentifizierung

Überprüfen Sie auch die Verbindungen in web.config, wenn Sie eine Verbindung im Dialogfeld "Serververbindung" erstellt haben. 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"/>

welches den Fehler beheben sollte.

Hammad Khan
quelle
2

Eine andere Möglichkeit, dem Benutzer die Berechtigung für die Datenbank zu erteilen, IIS APPPOOL\ASP.NET v4.0ist die folgende.
Geben Sie hier die Bildbeschreibung ein


  1. Fügen Sie einen neuen Benutzer mit Benutzername und Anmeldenamen wie IIS APPPOOL\ASP.NET v4.0in Ihrem Standardschema hinzu.
  2. Gehen Sie zu Eigentümerschema und Mitgliedschaft, überprüfen Sie db_datareader, db_datawriter
Shana
quelle
1

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 wird auch angezeigt, wenn die Datenbank nicht vorhanden ist!

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

colmde
quelle
1

Ich habe das gleiche Problem, das ich gelöst habe, indem ich Integrated Security=Trueauf false geändert habe, jetzt funktioniert es

subramanya46
quelle
1

Ähnliches passierte mir. Was für mich funktionierte, war die Änderung der Eigenschaft Integrierte Sicherheit = Wahr in Integrierte Sicherheit = Falsch in der web.config der Website

Erik Rodriguez
quelle
das funktioniert! Ich habe gerade die integrierte Sicherheit entfernt
Charles Xavier
0

Haben Sie das getan , was @Teddyempfohlen und Sie STILL den gleichen Fehler?

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.

Simon_Weaver
quelle
0

Legen Sie in DefaultAppPool NetworkService in der Eigenschaft Identity fest und fügen Sie in SQL Server User Network Service hinzu, und geben Sie ihm die entsprechenden Berechtigungen für Ihre Datenbank. Das funktioniert sehr gut für mich. Ich habe es lokal getestet, aber ich denke, dies ist die beste Konfiguration für die Verbindung von allen 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, aber ich denke, dass dies in einer Netzwerkumgebung nicht funktioniert.

Luis
quelle
0

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

Entwickeltes Web.Host in Visual Studio 2013 Express-Datenbank erstellt in SQL Server 2012 Express Ausgeführter Test mit integriertem IIS Express (funktioniert) Geändert zur Verwendung von IIS Local (von der Eigenschaftenseite - Weboption) Test mit Fiddler ausgeführt Fehler empfangen - Datenbank konnte nicht geöffnet werden für Anbieter .... 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 (obwohl meine App 4.5 war)

In SQL Server Management Studio

Klicken Sie mit der rechten Maustaste auf den Sicherheitsordner (unter der SQL Server-Engine gilt dies für alle Tabellen). Klicken Sie mit der rechten Maustaste auf Benutzer und fügen Sie "IIS APPPOOL \ DefaultAppPool" hinzu. Wenn Sie ein DBA sind, wissen Sie wahrscheinlich, was diese Optionen sind, und möchten steuern, welche Optionen dies sind. Wenn Sie wie ich ein Entwickler sind, der nur Ihren WEB-API-Dienst testen wollte, der zufällig auch über EF 6 im MVC-Stil auf SQL Server zugreift, aktivieren Sie einfach alles. :) Ja ich weiß aber es hat funktioniert.

Brian Quinn
quelle
0

Wenn Sie eine neue Anmeldung hinzufügen, stellen Sie sicher, dass unter Servereigenschaften (Rechtsklick -> Eigenschaften) / Sicherheit der Authentifizierungsmodus sowohl auf SQL Server als auch auf Windows und nicht nur auf Windows eingestellt ist.

badr slaoui
quelle
0

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

Avinava Basu
quelle
Wir legen die Berechtigungen entsprechend unseren Anforderungen fest. Der Authentifizierungsteil wird verarbeitet und wir überprüfen die Autorisierung per Code, um den Zugriff zu ermöglichen. Fühlen Sie sich frei, mich zu korrigieren, wenn Sie das Gefühl haben, dass es Unklarheiten gibt. Vielen Dank.
Avinava Basu
0

Wenn für den Datensatz dieser Fehler nach dem Wechsel von LocalDBzu SQLEXPRESSauftritt, stellen Sie sicher, dass die Datenbank bereits vorhanden istSQLEXPRESS . Sie können dies in Management Studio überprüfen.

Ich hatte das gleiche Problem bei der Verwendung Entity Frameworknach dem Wechsel zu SQLEXPRESS from LocalDB. Ich musste das Update-DatabaseKommando ausführen . Danach konnte ich mich erfolgreich verbinden.

Irshu
quelle
0

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 schaute noch einmal auf meine Fehlermeldung und sie sagte Login failed for user 'IIS APPPOOL\DefaultAppPool'.

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

Ogglas
quelle
0

Ich habe SQL Server Profiler (verfügbar im Menü SSMS => Extras) verwendet und dort festgestellt (als IIS versuchte, eine Verbindung zur Datenbank herzustellen), dass mein IIS-Benutzer aus irgendeinem Grund NT AUTHORITY \ IUSR war, unabhängig von allen in den Antworten in dieser Frage empfohlenen Schritten . Also habe ich diesen Benutzer zu SQL Server hinzugefügt und es hat funktioniert ...

alexkovelsky
quelle
0

Im Asp.net-Webformular

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

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

Mein Problem wurde behoben.

Zolfaghari
quelle