c# - enable - windows 2012 iis asp net




Falha no logon do usuário 'IIS APPPOOL \ ASP.NET v4.0' (20)

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 o meu implantar. 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. 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 recursos desta questão que permissões devem ser concedidas no MS SQL 2008 manualmente como arift explicam 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.


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 tenha acesso 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 oferece segurança granular e acesso granular aos recursos da 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 segurança integrada do Windows em todas as seqüências de conexão. No SQL Server, adicione os usuários do domínio como logins e conceda permissões 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 banco de dados interno do Visual Studio (por exemplo, LocalDB) e do servidor da Web incorporado em um ambiente de produção deriva do fato de que o SID do usuário do desenvolvedor e suas ACLs não devem ser 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 caixa 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 tenha suporte ou suporte a SysAdmin e DBAdmin. seu conhecimento especializado. No entanto, a implantação no Azure é mais fácil do que a situação da rede corporativa mencionada acima.


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 sequência de conexão, em seguida:

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 banco de dados, pois o aplicativo de modo de depuração local está chamando o banco de dados pelo serviço de sua conta. Portanto, ele tem acesso ao banco de dados 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, não na sua conta. Portanto, você precisa atribuir direitos de acesso ao serviço IIS para acessar o sql server para autenticação do Windows. Aqui o seu serviço web não seria capaz de se comunicar com o servidor SQL por causa do problema de direitos de acesso e Falha de Login para o usuário_______ (aqui seu usuário virá)

Portanto, se você estiver usando a autenticação do Windows para conectar seu banco de dados, 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 e selecione o banco de dados que você deseja conectar, em seguida, verifique os serviços de associação de função que você deseja usar para o banco de dados 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)

add 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 banco de dados agora.


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, não apenas windows.


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

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

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

que deve corrigir o erro.


Em DefaultAppPool defina NetworkService na propriedade Identity e em Sql Server adicione User Network Service e conceda-lhe as permissões apropriadas para seu banco de dados, isso funciona muito bem para mim, eu testei localmente mas acho que esta é 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 web) Teste Ran com erro Fiddler recebido - não é possível abrir o banco de dados 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 tenha sido 4.5)

No SQL Server Management Studio

Clique com o botão direito do mouse na pasta Security (sob o mecanismo do SQL Server, portanto, aplica-se a todas as tabelas) Clique com o botão direito do mouse em User e adicione 'IIS APPPOOL \ DefaultAppPool' em Securables na coluna 'Grant'. Em relação ao acima, se você é um DBA, provavelmente conhece 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 basta marcar tudo. :) Sim, eu sei, mas funcionou.


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.


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 banco de dados. Portanto, crie uma conta de usuário do NT, atribua-a ao AppPool do ASP.NET v4.0 e, em seguida, conceda-a na pasta do site e na (s) tabela (s) relevante (s) no SQL.


Eu tenho o mesmo problema que resolvi alterando a Integrated Security=True para false agora seu trabalho


Eu tive esse problema e foi realmente causado por algo diferente - eu tinha o usuário 'IIS APPPOOL \ ASP.NET v4.0' no meu banco de dados, 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 não estava 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 banco de dados (isso costumava ter que ser feito manualmente) e problema corrigido.


Eu usei o SQL Server Profiler (disponível no SSMS => menu Ferramentas) e vi lá (quando o IIS tentou se conectar ao banco de dados) 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 ...


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

No formulário da Web do Asp.net,

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


Outra maneira de conceder permissão ao banco de dados para o usuário IIS APPPOOL\ASP.NET v4.0 é a seguinte.


  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

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 permissões ao banco de dados.

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

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

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 banco de dados 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 permissões para executar procedimentos armazenados se você fizer isso através da EF. Você pode verificar os detalhes das funções here .


Pensei que eu iria postar isso como uma resposta, pois é relevante para a pergunta e pode responder em alguns casos.

Essa mesma mensagem aparece também se o banco de dados não existir!

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


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.

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

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.


Você pode enfrentar isso errado no banco de dados específico que é criado após a atualização do SSMS. Abra o SSMS, selecione seus bancos de dados e abra o banco de dados necessário e clique em Segurança -> Usuários -> clique com o botão direito em Usuários e clique novamente em 'Novo Usuário' e adicione 'NT AUTHORITY \ Usuários Autenticados' e salve seu trabalho. seu formulário na Web / Desktop o que você faz. Apreciar....


garantir que você tenha ...

Trusted_Connection=false;

na sua conexão String