Aanmelden mislukt voor gebruiker ‘IIS APPPOOL\ASP.NET v4.0’

Ik heb een webproject (C# Asp.Net, EF 4, MS SQL 2008 en IIS 7) en ik moet het lokaal naar IIS 7 migreren (werkt momenteel prima met CASSINI).

Lokaal in IIS heb ik mijn Default Web Sitemet mijn implementatie. Zowel mijn implementatie als Default Web Sitebevinden zich op pool ASP.NET v4.0 (kijk afbeelding voor instellingen) het pooldoel Framework 4 als mijn webproject.

Bij het bezoeken van de site toont de browser de pagina niet en staat de browser toe om de pagina in plaats daarvan te downloaden.

Ik heb andere projecten die lokaal op IIS draaien en ze werken zonder problemen (maar ze gebruiken geen Entity Framework).

Als ik de Event Logger gebruik, zie ik de onderstaande fouten:

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)

gerelateerde vraag

Update:
U kunt de middelen over deze vraag lezen die Machtigingen handmatig op MS SQL 2008 moeten worden verleend, omdat zij in zijn antwoord uitlegt.
IIS 7.5 en MS SQL 2008 R2 gebruiken, mogen het instellen van handmatig toestemming niet nodig.


1, Autoriteit 100%

Lijkt erop dat het faalt probeert een verbinding met SQL Server te openen.

U moet een login toevoegen aan SQL Server voor IIS APPPOOL\ASP.NET v4.0en subsidie-machtigingen aan de database verlenen.

In SSMS, onder de server, breiden de beveiliging uit en klik met de rechtermuisknop op Aanmelden en selecteer “Nieuwe login …”.

Voer in het dialoogvenster Nieuwe inloggen de app-pool in als inlognaam en klik op “OK”.

U kunt dan met de rechtermuisknop op de inloggen voor de app-pool klikken, selecteert u Eigenschappen en selecteert u “Gebruikersmapping”. Controleer de juiste database en de juiste rollen. Ik denk dat u gewoon db_datareaderen db_datawriterkunt selecteren, maar ik denk dat u nog steeds machtigingen wilt verlenen om opgeslagen procedures uit te voeren als u dat via EF doet. U kunt de details controleren voor de rollen hier .


2, Autoriteit 55%

U kunt de aanvraagpoolIdentiteit van IIS7 – & GT wijzigen; Toepassingspoelen – & GT; Geavanceerde instellingen.

Onder toepassingspoolspect vindt u lokaal systeem. Hierdoor wordt uw aanvraag uitgevoerd onder NT AUTHORITY\SYSTEM, die standaard een bestaande aanmelding voor de database is.

EDIT: Voordat u deze suggestie aanbrengt, moet u de beveiligingsimplicaties opmerken en begrijpen.


3, Autoriteit 5%

Ik heb dit probleem opgelost met behulp van SQL als volgbeeld.

Klik met de rechtermuisknop op DB- & GT; Eigenschappen – & GT; toestemming – & GT; Bekijk serverrechten – & GT; en selecteer vervolgens IIS APPPOOL\ASP.NET v4.0en subsidie ​​toestemming.


4, Autoriteit 5%

Zorg ervoor dat u …

Trusted_Connection=false;

In uw verbindingstekenreeks


5, Autoriteit 4%

Voer dit SQL-script uit

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

6, Autoriteit 2%

Ga naar IIS – & GT; Toepassingspoelen – & GT; Zoek uw aanvraagpool dat wordt gebruikt in Toepassing

Selecteer uw applicatiepool dat wordt gebruikt voor de toepassing met de rechtermuisknop op Selecteer Geavanceerde instellingen

Selecteer Application Pool Identity

select ingebouwd als lokaal systeem
en klik op OK


7

Ik haat de aanvraagpoolInity. Ik stel altijd een Windows-gebruikersaccount in als het account op AppPools.

Zoals driftig zegt, klinkt het als een databasebeveiligingsprobleem. Maak dus een NT-gebruikersaccount aan, wijs deze toe aan de ASP.NET v4.0 AppPool en geef deze vervolgens toestemming voor de websitemap en voor de relevante tabel(len) in SQL.


Antwoord 8

Gebruik geen geïntegreerde beveiliging.
Gebruik User Id=yourUser; pwd=yourPwd;

Dit lost het probleem op.


Antwoord 9

1_in SqlServer Security=>Login=>NT AUTHORITY\SYSTEM=>RightClick=>Property=>UserMaping=>Select YourDatabse=>Public&&Owner Select=>OK
2_In IIs-toepassingsgroepen DefaultAppPool=>Advance Setting=>Identity=>LocalSystem=>Ok


Antwoord 10

Ik had dit probleem en het werd eigenlijk veroorzaakt door iets anders – ik had de gebruiker ‘IIS APPPOOL\ASP.NET v4.0’ in mijn database, maar het werkte nog steeds niet.

Ik had onlangs mijn SQL Server-installatie geüpgraded en daarbij was de verbinding tussen de gebruiker en de login verbroken – dus er was een ‘IIS APPPOOL\ASP.NET v4.0’ onder Database -> Beveiliging -> Gebruikers MAAR geen Gebruiker niet onder Beveiliging -> Aanmeldingen.

Aanmelding ‘IIS APPPOOL\ASP.NET v4.0’ toegevoegd aan Beveiliging -> Logins, SQL Server heeft het automatisch toegewezen aan de Gebruiker in de database (vroeger moest dit handmatig worden gedaan) en het probleem werd verholpen.


Antwoord 11

Het eerste dat u moet wissen als u Windows-authenticatie gebruikt en u geen gebruikersnaamwachtwoord vermeldt in uw verbindingsreeks, dan:

Wat gebeurt er als u uw code via localhost uitvoert: wanneer u uw wcf-testclient uitvoert vanaf localhost, kan deze communiceren met de database omdat de lokale toepassing voor foutopsporing de database aanroept door de service van uw account. Het heeft dus toegang tot de database omdat devenv.exe onder uw gebruikersaccount draait.

Maar wanneer u uw webservice in IIS inzet. Begrijp nu deze service onder IIS niet onder uw account. U moet dus toegangsrechten toewijzen aan IIS-service om toegang te krijgen tot de SQL Server voor Windows-authenticatie. Hier zou uw webservice niet kunnen communiceren met de SQL Server vanwege toegangsrechten en login mislukt voor gebruikers_______ (hier zal uw gebruiker komen)

Dus als u Windows-verificatie gebruikt om uw database aan te sluiten, moet u alleen de IIS-toepassingspoolinstellingen wijzigen. U moet de identiteit van IIS-toepassingspool naar het lokale systeem wijzigen.

Hieronder staan ​​de stappen voor Windows Authentication WCF:

1) Open IIS (Windows + R (RUN) Typ inetmgr en klik vervolgens op OK)

2) Dubbelklik op uw pc-naam onder verbindingen

3) Klik op Toepassingspoelen

4) Selecteer uw app Pool (DefaultAppPool)

5) Dan onder acties rechts op Geavanceerde instellingen:

6) Ga naar het gedeelte van het procesmodel en

7) Klik op identiteit.

8) Selecteer nu LocalSystem.

Open nu uw SQL Server Management Studio:
Open Run- & GT; Typ vervolgens SSMS – & GT; druk vervolgens op OK
In SSMS, log in met uw Windows-verificatierekening.
Open Logins Tabins Open Logins Tabins U kunt uw account bekijken.

Open nu eigenschappen van uw account
Ga naar Usermapping en selecteer vervolgens de database die u wilt verbinden
Controleer vervolgens de rollidmaatschappijen die u voor de geselecteerde database wilt gebruiken. Klik op OK.

(voor netwerkservices I.E. Intranet-gebruikers U moet ook bovenstaande instellingen configureren voor NT-autoriteit \ Systeemgebruiker)

Trusted_connection = TRUE; Onroerend goed in uw verbindingsreeks. Bewaar het en amp; Implementeer de webservice. Start App Pool opnieuw.

U kunt de database nu aansluiten.


12

Ik had dit bericht en ik gebruik Windows-authenticatie op de webserver.

Ik wilde dat de momenteel geverifieerde webgebruiker werd geverifieerd met de database, in plaats van de IIS APPPOOL\ASP.NET v4-gebruiker te gebruiken die is opgegeven in de App Pool.

Ik vond door het volgende in te voeren in de web.config dit voor mij opgelost:

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

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

Ik zie andere antwoorden met betrekking tot het maken van de AppPool-gebruikersnaam in de SQL DB of gewoon om SQL Auth te gebruiken. Beide zouden correct zijn als u geen individuele Windows-gebruikers in SQL wilt vastleggen of beveiligen.

Tom


Antwoord 13

Ik heb hetzelfde probleem, ik heb het opgelost door Integrated Security=Truete wijzigen in false
nu werkt het


Antwoord 14

Als u de identiteit instelt, werkt dit alleen op mijn pagina’s.


Antwoord 15

Cassini voert uw website uit als uw eigen gebruikersidentiteit wanneer u de Visual Studio-toepassing opstart. IIS voert uw website uit als een App Pool Identity. Tenzij de App Pool Identity toegang krijgt tot de Database, krijgt u fouten.

IIS heeft App Pool Identity geïntroduceerd om de beveiliging te verbeteren. U kunt websites uitvoeren onder de standaard App Pool-identiteit, of een nieuwe App Pool maken met zijn eigen naam, of een nieuwe App Pool maken met zijn eigen naam die draait onder een gebruikersaccount (meestal domeinaccount).

In netwerksituaties (die niet in Azure zitten) kun je een nieuwe App Pool laten draaien onder een Active Directory Domain gebruikersaccount; Ik verkies dit boven het machineaccount. Hierdoor krijgt u gedetailleerde beveiliging en gedetailleerde toegang tot netwerkbronnen, inclusief databases. Elke website draait op een andere App Pool (en elk daarvan draait onder zijn eigen Domain User-account).

Blijf Windows Integrated Security gebruiken in alle Connection Strings. Voeg in SQL Server de domeingebruikers toe als aanmeldingen en verleen per website machtigingen voor databases, tabellen, SP enz. bijv. DB1 gebruikt door Website1 heeft een login voor Gebruiker1 omdat Website1 op een App Pool draait als Gebruiker1.

Een uitdaging bij het implementeren van de ingebouwde database van Visual Studio (bijv. LocalDB) en ingebouwde webserver naar een productieomgeving vloeit voort uit het feit dat de gebruikers-SID van de ontwikkelaar en zijn ACL’s niet mogen worden gebruikt in een veilige productie omgeving. Microsoft biedt tools voor implementatie. Maar heb medelijden met de arme ontwikkelaar die gewend is aan alles wat gewoon uit de doos werkt in de nieuwe gemakkelijke VS IDE met localDB en localWebServer, want deze tools zullen moeilijk te gebruiken zijn voor die ontwikkelaar, vooral voor zo’n ontwikkelaar zonder SysAdmin en DBAdmin ondersteuning of hun specialistische kennis. Desalniettemin is het implementeren naar Azure eenvoudiger dan de hierboven genoemde bedrijfsnetwerksituatie.


Antwoord 16

Als u uw verbindingsreeks hebt toegevoegd in uw web.config, zorg er dan voor dat “Integrated Security=false;” dus het zou de id en het wachtwoord gebruiken die zijn opgegeven in de web.config.

<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>

17

Een andere manier om toestemming te verlenen aan de database voor de gebruiker IIS APPPOOL\ASP.NET v4.0is als volgt.

  1. Voeg nieuwe gebruiker toe met gebruikersnaam en inlognaam als IIS APPPOOL\ASP.NET
    v4.0
    met uw standaardschema.
  2. Ga naar Owner Schema en lidmaatschap, controleer DB_DATAREADER, DB_DATAWRITER

18

Ik dacht dat ik dit als antwoord zou plaatsen omdat het relevant is voor de vraag en kan het in sommige gevallen beantwoorden.

Datzelfde bericht verschijnt ook als de database niet bestaat!

Zorg ervoor dat uw verbindingsreeks geen spelfouten heeft, wijst naar de juiste serverinstantie, enz.


19

U kunt dit verkeerd onder ogen zien in een specifieke database die is gemaakt na de SSMS-update. Open SSMS en selecteer uw databases en open uw vereiste database en klik vervolgens op Beveiliging–> Gebruikers–> en klik met de rechtermuisknop op Gebruikers en klik nogmaals op ‘Nieuwe gebruiker’en voeg ‘NT AUTHORITY\Authenticated Users’toe en sla je werk op en ga naar je formulier op Web/Desktop wat je ook doet. Geniet ervan….


Antwoord 20

Er gebeurde iets soortgelijks met mij wat voor mij werkte, was het veranderen van de eigenschap Integrated Security = True to Integrated Security = false in de web.config van de website


Antwoord 21

Ik moest een gebruiker `IIS APPPOOL\DefaultAppPool’ maken, zoals hieronder weergegeven in SQL Server. Beveiliging > Inloggen > Klik met de rechtermuisknop en druk op ‘Nieuwe aanmelding’. U voert alleen de gebruikersnaam in zoals weergegeven in het rood in het scherm.

Ga dan naar die nieuwe gebruikerseigenschappen, controleer de database die deze gebruiker zal openen (hieronder blauw gemarkeerd) en selecteer ook db_owner. Ik moest selecteren omdat hoewel de verbinding werkte, maar daaropvolgende SELECT-query’s geen toegang hadden als dit niet was geselecteerd.

Deze twee zouden het moeten doen. In feite maakt u de nieuwe gebruiker eigenaar van de database, zodat deze volledige toegang heeft.

U hoeft SQL Server niet opnieuw op te starten of iets dergelijks, het zou moeten werken.


Antwoord 22

Heb je gedaan wat @Teddyheeft aanbevolen en krijg je NOG steedsdezelfde foutmelding?

Zorg ervoor dat u de instellingen wijzigt voor de app-pool die overeenkomt met uw virtuele map en niet met de bovenliggende server. Elke virtuele map heeft zijn eigen AppPool en erft niet.


Antwoord 23

Stel in DefaultAppPool NetworkService in de Identity-eigenschap in en voeg in Sql Server User Network Service toe en geef het de juiste machtigingen voor uw database, dat werkt heel goed voor mij, ik heb het lokaal getest, maar ik denk dat dit de beste configuratie is voor verbinding maken vanaf een andere computer in het netwerk. wanneer u LocalSystem instelt in de identiteit in IIS, werkt dat goed en is het niet nodig om een andere gebruiker in Sql Server aan te maken, maar ik denk dat dat niet zal werken in een netwerkomgeving.


Antwoord 24

Ik kwam hetzelfde probleem tegen bij het testen van ASP.NET Web API

Ontwikkelde Web.Host in Visual Studio 2013 Express
Database gemaakt in SQL Server 2012 Express
Test uitgevoerd met ingebouwde IIS Express (werkend)
Aangepast om IIS Local te gebruiken (van de eigenschappenpagina – weboptie)
Test gedaan met Fiddler
Fout ontvangen – kan database niet openen voor provider….
onder vermelding van ‘APPPOOL\DefaultAppPool’

Oplossing die werkte.

In IIS

Klik op de applicatiepool ‘DefaultAppPool’
Set Identificeren = ‘ApplicationPoolIdentity’
Stel .NET framework = v4.0 in (ook al was mijn app 4.5)

In SQL Server Management Studio

Klik met de rechtermuisknop op de map Beveiliging (onder de SQL Server-engine, dus van toepassing op alle tabellen)
Klik met de rechtermuisknop op Gebruiker en voeg ‘IIS APPPOOL\DefaultAppPool’ toe
Vink bij securables in de kolom ‘Subsidie’ de opties aan die u wilt geven.
Met betrekking tot het bovenstaande, als u een DBA bent die u waarschijnlijk kent en wilt controleren
wat die opties zijn. Als je net als ik een ontwikkelaar bent die gewoon wilde testen
uw WEB API-service die toevallig ook toegang heeft tot SQL Server via EF 6
in MVC-stijl, vink dan alles af. 🙂 Ja, dat weet ik, maar het werkte.


25

Als u een nieuwe aanmelding toevoegt, moet u ervoor zorgen dat onder Server-eigenschappen (RightClick – & GT;-eigenschappen) / Beveiliging, de authenticatiemodus is ingesteld op zowel SQLSERVER- als Windows niet alleen Windows.


26

Voeg “iedereen” onder beveiliging toe. Als u de server hebt toegevoegd en de gebruikers die inloggen bij de database, dan is dit iets dat u mist.
Ik hoop dat dit helpt.


27

Voor de record, als u deze foutmelding tegenkomt na het overschakelen van LocalDBnaar SQLEXPRESS, zorg er dan voor dat de database reeds esist in SQLEXPRESS. U kunt dit verifiëren in Management Studio.

Ik had hetzelfde probleem bij het gebruik van Entity Frameworkna het overschakelen naar SQLEXPRESS from LocalDB. Ik moest ondernemen Update-Database-opdracht. Ik kon daarna met succes verbinding maken.


28

Ik deed precies zoals @jeffogata zei, maar ik kreeg de foutmelding:

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

Ik heb opnieuw naar mijn foutbericht gekeken en het zei Login failed for user 'IIS APPPOOL\DefaultAppPool'.

Na het toevoegen van een gebruiker met de naam IIS APPPOOL\DefaultAppPoolAlles werkte.

Other episodes