Falha no logon do usuário ‘IIS APPPOOL \ ASP.NET v4.0’

Eu tenho um projeto da web (C # Asp.Net, EF 4, MS SQL 2008 e IIS 7) e eu preciso migrá-lo para o IIS 7 localmente (no momento funciona bem com CASSINI).

Localmente no IIS eu tenho meu Default Web Site com a minha implantação. Tanto a minha implantação como Default Web Site estão no pool ASP.NET v4.0 (procure a imagem para as configurações), o pool de destino do Framework 4 como meu projeto da web. Configurações da piscina Ao visitar o site, o navegador não mostra a página e permite que o navegador baixe a página.

Eu tenho outros projetos em execução no IIS localmente e eles funcionam sem problemas (mas eles não usam o Entity Framework).

Usando o Event Logger, vejo os erros abaixo:

 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) 

Questão relacionada

ATUALIZAÇÃO: Você pode ler nos resources sobre essa questão que as permissions devem ser concedidas manualmente no MS SQL 2008 como arift explica em sua resposta. Usando o IIS 7.5 e o MS SQL 2008 R2, a configuração de permissão manual não deve ser necessária.

   

Parece que está falhando ao tentar abrir uma conexão com o SQL Server.

Você precisa adicionar um logon ao SQL Server para IIS APPPOOL\ASP.NET v4.0 e conceder permissions ao database.

No SSMS, sob o servidor, expanda Segurança, clique com o botão direito do mouse em Logins e selecione “Novo login …”.

Na checkbox de diálogo Novo Login, insira o pool de aplicativos como o nome de login e clique em “OK”.

insira a descrição da imagem aqui

Você pode clicar com o botão direito do mouse no login do pool de aplicativos, selecionar Propriedades e selecionar “Mapeamento do usuário”. Verifique o database apropriado e as funções apropriadas. Eu acho que você poderia apenas selecionar db_datareader e db_datawriter , mas eu acho que você ainda precisa conceder permissions para executar stored procedures se você fizer isso através da EF. Você pode verificar os detalhes das funções aqui .

Você pode alterar o ApplicationPoolIdentity do IIS7 -> Pools de Aplicativos -> Configurações Avançadas. Configurações avançadas

Em ApplicationPoolIdentity, você encontrará o sistema local. Isso fará com que seu aplicativo seja executado sob NT AUTHORITY\SYSTEM , que é um login existente para o database por padrão.

Edit: Antes de aplicar esta sugestão, você deve observar e entender as implicações de segurança.

garantir que você tenha …

 Trusted_Connection=false; 

em sua conexão String

Eu resolvi esse problema usando o sql como imagem a seguir.

Clique com o botão direito do mouse em db-> properties -> permission -> View Server permission -> e selecione IIS APPPOOL\ASP.NET v4.0 e conceda permissão.

db

Se na cadeia de conexão que você especificou:

 User ID=xxx;Password=yyy 

mas na string de conexão existe:

 Trusted_Connection=true; 

O SQL Server usará a Autenticação do Windows, portanto, seus valores de conexão serão ignorados e substituídos (o IIS usará a conta do Windows especificada no perfil de usuário da Identidade). mais informações aqui

O mesmo se aplica se na string de conexão existir:

  Integrated Security = true; 

ou

  Integrated Security = SSPI; 

porque a Autenticação do Windows será usada para conectar-se ao servidor de database. mais informações aqui

Eu odeio o ApplicationPoolIdentity. Eu sempre defino uma conta de usuário do Windows como a conta no AppPools.

Como a adrift diz, soa como um problema de segurança do database. Portanto, crie uma conta de usuário do NT, atribua-a ao AppPool do ASP.NET v4.0 e conceda-a na pasta do site e na (s) tabela (s) relevante (s) no SQL.

Execute este script sql

 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 

Não use segurança integrada. Use User Id=yourUser; pwd=yourPwd; User Id=yourUser; pwd=yourPwd;

Isso resolve o problema.

A primeira coisa que você precisa limpar se estiver usando a autenticação do Windows e não estiver mencionando nenhuma senha de nome de usuário em sua string de conexão, então:

O que acontece quando você executa seu código através de localhost: quando você executa seu cliente de teste wcf a partir de localhost, ele poderá se comunicar com o database, pois o aplicativo de modo de debugging local está chamando o database pelo serviço de sua conta. Portanto, ele tem access ao database porque o devenv.exe está sendo executado em sua conta de usuário.

Mas quando você implanta seu serviço da Web no IIS. Agora entenda que esse serviço é executado no IIS e não na sua conta. Portanto, você precisa atribuir direitos de access ao serviço IIS para acessar o sql server para autenticação do Windows. Aqui o seu serviço da web não seria capaz de se comunicar com o servidor SQL por causa do problema de direitos de access e Falha de login do usuário_______ (aqui seu usuário virá)

Portanto, se você estiver usando a autenticação do Windows para conectar seu database, basta alterar as configurações do pool de aplicativos do IIS. Você precisa alterar a identidade do pool de aplicativos do IIS para o sistema local.

Abaixo estão os passos para janelas de autenticação WCF: • Abra o IIS (windows + R (run) digite inetmgr, clique ok) • clique duas vezes no PC em Conexões • Clique em Pools de Aplicativos • Selecione seu pool de aplicativos (DefaultAppPool) • Então sob ações no botão direito do mouse Configurações avançadas: • Vá para a seção Modelo de processo e • clique em Identidade. • Agora selecione LocalSystem.

Agora abra o seu estúdio de gerenciamento de servidor sql: abra run-> digite ssms e pressione ok em ssms, faça login usando sua conta de autenticação do windows. aba de segurança aberta, expanda a guia de logins e, em seguida, você poderá visualizar sua conta.

Agora abra as propriedades de sua conta vá para userMapping, em seguida, selecione o database que você deseja conectar, em seguida, verifique os serviços de associação de function que você deseja usar para o database selecionado, clique em OK. (Para serviços de rede, ou seja, usuários da intranet, você também precisa configurar as configurações acima para o usuário NT AUTHORITY \ SYSTEM)

adicione Trusted_Connection = True; propriedade na sua cadeia de conexão. Salve e implemente o serviço da web. Reinicie o pool de aplicativos.

você poderá conectar o database agora.

vá para iis -> pools de aplicativos -> encontre seu pool de aplicativos usado no aplicativo

insira a descrição da imagem aqui

selecione seu pool de aplicativos usado para o aplicativo clique com o botão direito selecionar configurações avançadas

insira a descrição da imagem aqui

Selecione a identidade do pool de aplicativos insira a descrição da imagem aqui

selecione embutido como sistema local e clique em ok

Eu tive esse problema e foi realmente causado por algo diferente – eu tinha o usuário ‘IIS APPPOOL \ ASP.NET v4.0’ no meu database, mas ainda não estava funcionando.

Eu tinha recentemente atualizado o meu SQL Server Install e no processo o usuário tinha se desconectado do Login – então havia um ‘IIS APPPOOL \ ASP.NET v4.0’ em Banco de Dados -> Segurança -> Usuários, MAS nenhum Usuário que não estivesse sob Segurança -> Logins.

Adicionado o Login ‘IIS APPPOOL \ ASP.NET v4.0’ para Segurança -> Logins, o SQL Server mapeou automaticamente para o usuário no database (isso costumava ter que ser feito manualmente) e problema corrigido.

Eu tive esta mensagem e eu uso a autenticação do Windows no servidor web.

Eu queria que o usuário da Web atualmente autenticado fosse autenticado no database, em vez de usar o Usuário do IIS APPPOOL \ ASP.NET v4 especificado no Pool de Aplicativos.

Eu encontrei digitando o seguinte no web.config corrigido isso para mim:

    

https://msdn.microsoft.com/pt-br/library/bsz5788z.aspx

Eu vejo outras respostas sobre como criar o nome de usuário do AppPool no database SQL ou apenas para usar o Auth SQL. Ambos estariam corretos se você não quisesse capturar ou proteger usuários individuais do Windows dentro do SQL.

Tom

Definir a identidade só faz isso funcionar nas minhas páginas.

A Cassini executa seu site como sua própria identidade de usuário quando você inicia o aplicativo Visual Studio. O IIS executa seu site como uma identidade do pool de aplicativos. A menos que a Identidade do Pool de Aplicativos receba access ao Banco de Dados, você receberá erros.

O IIS introduziu o App Pool Identity para melhorar a segurança. Você pode executar sites sob a Identidade do Pool de Aplicativos padrão ou criar um novo Pool de Aplicativos com seu próprio nome ou Criar um novo Pool de Aplicativos com seu próprio nome que é executado em uma Conta de Usuário (geralmente Conta de Domínio).

Em situações de rede (que não estão no Azure), você pode fazer um novo pool de aplicativos ser executado em uma conta de usuário do domínio do Active Directory; Eu prefiro isso na conta da máquina. Isso garante segurança granular e access granular aos resources de rede, incluindo bancos de dados. Cada site é executado em um pool de aplicativos diferente (e cada um deles é executado em sua própria conta de usuário de domínio).

Continue a usar o Windows Integrated Security em todas as seqüências de conexão. No SQL Server, adicione os usuários do domínio como logins e conceda permissions a bancos de dados, tabelas, SP etc. por site. Por exemplo, o DB1 usado pelo Website1 tem um login para o Usuário1 porque o Site1 é executado em um Pool de Aplicativos como Usuário1.

Um desafio com a implantação do database interno do Visual Studio (por exemplo, LocalDB) e do Servidor Web incorporado em um ambiente de produção deriva do fato de o SID de usuário do desenvolvedor e suas ACLs não serem usados ​​em um ambiente de produção seguro. A Microsoft fornece ferramentas para implantação. Mas pena que o desenvolvedor pobre que está acostumado a tudo apenas trabalhe fora da checkbox no novo VS IDE fácil com localDB e localWebServer, porque essas ferramentas serão difíceis de usar para esse desenvolvedor, especialmente para um desenvolvedor que não possui suporte a SysAdmin e DBAdmin ou seu conhecimento especializado. No entanto, a implantação no Azure é mais fácil do que a situação da rede corporativa mencionada acima.

Se você tiver sua string de conexão adicionada em seu web.config, certifique-se de que “Integrated Security = false;” então usaria o id e senha especificados no web.config.

    

Como apontado, não use a autenticação do Windows, use a autenticação do SQL Server

Além disso, se você criou a conexão usando a checkbox de diálogo “Conexão do servidor”, verifique as conexões no web.config. É provável que você tenha criado / modificado a conexão e tenha sido armazenado como conexão confiável no web.config. Basta usar esta autenticação

  

que deve corrigir o erro.

Outra maneira de conceder permissão ao database para o usuário IIS APPPOOL\ASP.NET v4.0 é a seguinte.
insira a descrição da imagem aqui

  1. Adicionar novo usuário com nome de usuário e nome de login como IIS APPPOOL\ASP.NET v4.0 com seu esquema padrão.
  2. Vá para Esquema e Associação do Proprietário, verifique db_datareader, db_datawriter

Você já fez o que o @Teddy recomendou e você ainda recebe o mesmo erro?

Verifique se você está alterando as configurações do pool de aplicativos que corresponde ao seu diretório virtual e não ao servidor pai. Cada diretório virtual tem seu próprio AppPool e não herda.

Em DefaultAppPool defina NetworkService na propriedade Identity e em Sql Server adicione User Network Service e conceda-lhe as permissions apropriadas para seu database, isso funciona muito bem para mim, testei localmente mas acho que essa é a melhor configuração para conectar de qualquer outro computador na rede. Quando você define LocalSystem na Identity no IIS, isso funciona bem e não é necessário criar nenhum outro usuário no Sql Server, mas acho que isso não funcionará em um ambiente de rede.

Eu corri para o mesmo problema testando ASP.NET Web API

Desenvolvido Web.Host no Visual Studio 2013 Express Banco de dados criado no SQL Server 2012 Express Teste executado usando o IIS Express (trabalhando) Modificado para usar o IIS Local (da página de propriedades – opção da web) Teste Ran com erro Fiddler recebido – não é possível abrir o database para provedor …. citando ‘APPPOOL \ DefaultAppPool’

Solução que funcionou.

No IIS

Clique no pool de aplicativos ‘DefaultAppPool’ Set Identify = ‘ApplicationPoolIdentity’ Definir .NET framework = v4.0 (mesmo que meu aplicativo seja 4.5)

No SQL Server Management Studio

Clique com o botão direito do mouse na pasta Security (sob o mecanismo do SQL Server para que se aplique a todas as tabelas) Clique com o botão direito no User e adicione ‘IIS APPPOOL \ DefaultAppPool’ Em securables na coluna ‘Grant’, marque as opções desejadas. Em relação ao acima, se você é um DBA, provavelmente sabe e quer controlar quais são essas opções. Se você é como eu, um desenvolvedor só queria testar o serviço da API da WEB, que também acessa o SQL Server através da EF 6 no estilo MVC, depois é só verificar tudo. 🙂 Sim, eu sei, mas funcionou.

Caso você adicione um novo login, certifique-se de que sob as propriedades do servidor (rightclick -> properties) / security, o modo de autenticação está configurado para sqlserver e windows e não apenas windows.

Adicione “Everyone” em segurança. Se você adicionou o Servidor e os usuários fazendo login no database, isso é algo que está faltando. Espero que isto ajude.

Para o registro, se você encontrar esse erro depois de alternar de LocalDB para SQLEXPRESS , verifique se o database já existe em SQLEXPRESS . Você pode verificar isso no Management Studio.

Eu tive o mesmo problema ao usar o Entity Framework depois de alternar para o SQLEXPRESS from LocalDB . Eu tive que executar o comando Update-Database . Eu consegui me conectar com sucesso depois disso.

Eu enfrentei o problema semelhante ao hospedar o appication no IIS

Solução

Eu mudo a identidade do pool e seu trabalho me

 ApplicationPoolIdentity -> NetworkService 

Eu fiz exatamente como o @JeffOgata disse, mas recebi o erro:

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

Eu olhei para a minha mensagem de erro novamente e ele disse Login failed for user 'IIS APPPOOL\DefaultAppPool'.

Depois de adicionar um usuário chamado IIS APPPOOL\DefaultAppPool tudo funcionou.

Pensei em postar isso como uma resposta, pois é relevante para a pergunta e posso respondê-la em alguns casos.

Essa mesma mensagem aparece também se o database não existir!

Certifique-se de que sua string de conexão não possua erros ortocharts, aponte para a instância correta do servidor etc.

Eu usei o SQL Server Profiler (disponível em SSMS => menu Ferramentas) e vi lá (quando o IIS tentou se conectar ao database) que meu usuário do IIS era por algum motivo NT AUTHORITY \ IUSR, independentemente de todas as etapas recomendadas nas respostas desta pergunta . Então eu adicionei esse usuário ao SQL Server, e funcionou …

No formulário da Web do Asp.net,

esse erro foi corrigido ao instalar o asp.net a partir de:

Gerenciador de Servidores> Gerenciar> Adicionar Função e Recurso> Funções de Servidor> Servidor da Web (IIS)> Servidor da Web> Desenvolvimento de Aplicativos> ASP.NET 3.5 / 4.6 está instalado.

meu problema foi consertado.