A autenticação foi mal-sucedida nos IIS do utilizador APPPOOL\ASP.NET v4. 0"

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

localmente, nos IIS, tenho o meu Default Web Site com o meu destacamento. Ambos os meus planos e Default Web Site estão na piscina ASP.NET v4. 0 (veja a imagem para a configuração) a plataforma de destino da piscina 4 como o meu projecto web. Pool Settings Ao visitar o site, o navegador não mostra a página e permite que o navegador baixe a página.

Tenho Outras os projectos que funcionam no IIS localmente e funcionam sem problemas (mas não utilizam o quadro de entidades).

Usando o registador de eventos, 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)

pergunta Conexa

Actualizar: Você pode ler nos recursos sobre esta questão que as permissões devem ser concedidas manualmente no MS SQL 2008, como arift explica em sua resposta. Utilizando o IIS 7.5 e o MS SQL 2008 R2, não deverá ser necessária a configuração manual da autorização.

Author: Community, 2011-10-08

30 answers

Parece que não está a tentar abrir uma ligação ao servidor SQL.

É necessário adicionar uma autenticação ao servidor SQL para IIS APPPOOL\ASP.NET v4.0 e conceder permissões à base de dados.

No SSMS, por baixo do servidor, expande a segurança, depois carregue com o botão direito nos Logins e seleccione "Nova autenticação...".

Na janela de autenticação Nova, indique a lista de aplicações como o nome da autenticação e carregue em "OK".

enter image description here

Você poderá então carregar com o botão direito no utilizador para a lista de aplicações, seleccionar Propriedades e seleccionar "mapeamento do utilizador". Verifique a base de dados adequada 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 do EF. Você pode verificar os detalhes para os papéis Aqui.

 619
Author: Jeff Ogata, 2011-10-08 17:11:44

Pode alterar a identidade do pedido a partir de Conjuntos de aplicações IIS7 -> Configurações Avançadas. AdvancedSettings

Em caso de candidatura, poderá encontrar o sistema local. Isto fará a sua aplicação correr em NT AUTHORITY\SYSTEM, que é um login existente para a base de dados por omissão.

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

 345
Author: Thea, 2014-02-13 13:37:40

Assegura-te que sim...

Trusted_Connection=false;

No seu texto de ligação

 31
Author: JGilmartin, 2012-04-16 19:17:10

Resolvi este problema usando o sql como imagem seguinte.

Carregue com o botão direito no db-> propriedades -> permissão -> ver a permissão do servidor -> e depois seleccione IIS APPPOOL\ASP.NET v4.0 e conceda a permissão.

db

 30
Author: DevT, 2013-12-24 18:10:17

Execute este programa 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
 25
Author: Rolwin Crasta, 2017-10-19 09:06:35

Se no texto de ligação especificou:

User ID=xxx;Password=yyy

Mas no texto de ligação existe:

Trusted_Connection=true;

O servidor de SQL irá usar a autenticação do Windows, por isso os seus valores de ligação serão ignorados e substituídos (o IIS irá usar a conta do Windows indicada no perfil de Utilizador da identidade). Mais informações aqui

O mesmo se aplica se no texto de ligação Existe:

 Integrated Security = true;

Ou

 Integrated Security = SSPI;

Porque As Janelas A autenticação será usada para se conectar ao servidor de banco de dados. Mais informações aqui

 11
Author: spiderman, 2017-05-23 12:18:22

Vá ao iis -> pools de aplicação - > Encontre o seu pool de aplicação utilizado na aplicação

enter image description here

Seleccione a sua lista de aplicações usada para a aplicação carregue com o botão direito seleccione a configuração avançada

enter image description here

Seleccione a identidade do conjunto de aplicações enter image description here

Seleccionar o sistema incorporado como Local e carregue em ok

 10
Author: Lijo, 2017-10-21 11:49:17
Odeio a capacidade de candidatura. Eu sempre configuro uma conta de usuário do Windows como a conta no AppPools. Como diz a adrift, parece um problema de segurança da base de dados. Então crie uma conta de usuário NT, atribua-a ao ASP.NET v4. 0 AppPool e, em seguida, conceder-lhe permissão na pasta do site e para a(s) Tabela (s) relevante (s) em SQL.
 7
Author: Christian, 2011-10-08 16:55:27

Não use Segurança Integrada. Utilização User Id=yourUser; pwd=yourPwd;

Isto resolve o problema.
 6
Author: bonh, 2015-05-26 15:00:26

1_ in SQLServer Security=>Login=>NT AUTHORITY\SYSTEM=>RightClick= > Property=>UserMaping=>Select YourDatabse=>Public&Owner Select=>OK 2_In IIs Application Pools DefaultAppPool=>Advance Setting= > Identity= > LocalSystem= > Ok

 5
Author: mehranSattary, 2019-10-21 16:35:52
Eu tinha um problema e foi causado por algo diferente. APPPOOL\ASP.NET utilizador v4. 0 na minha base de dados, mas ainda não estava a funcionar.

Eu tinha atualizado recentemente a instalação do meu servidor SQL e, no processo, o utilizador tinha-se desligado do Login - por isso havia um ' IIS 'APPPOOL\ASP.NET v4. 0' sob base de Dados -> Segurança - > utilizadores mas nenhum utilizador não sob Segurança - > registos.

Adicionou o Login 'IIS APPPOOL\ASP.NET v4. 0' para segurança - > Logins, SQL O servidor mapeou-o automaticamente para o utilizador na base de dados (isto costumava ter de ser feito manualmente) e o problema foi corrigido.

 4
Author: The Coder, 2012-03-29 19:57:08

A primeira coisa que precisa de limpar se estiver a usar a autenticação do windows e não estiver a mencionar Nenhuma senha de utilizador no seu texto de ligação, então:

O que acontece quando executar o seu código através do localhost: quando executar o seu cliente de teste wcf a partir do localhost, ele será capaz de se comunicar à base de dados, uma vez que a aplicação local do modo de depuração está a chamar a base de dados pelo serviço da sua conta. Então ele tem acesso à base de dados porque devenv.o exe está a correr sob o seu utilizador conta.

Mas quando implantar o seu serviço web no IIS. Agora entenda que este serviço funciona sob IIS não sob a sua conta. Então você precisa atribuir direitos de acesso ao serviço IIS para acessar o servidor sql para Autenticação do windows. Aqui o seu serviço web não seria capaz de se comunicar com o servidor SQL por causa da questão dos direitos de acesso e a autenticação falhou para o Utilizador____ _ _ _ _ (aqui o seu utilizador virá)

Por isso, se está a usar a autenticação do windows para ligar a sua base de dados, só tem de muda a configuração do conjunto de aplicações IIS. Você precisa mudar a identidade da aplicação IIS pool para o sistema local.

Abaixo estão os passos para a autenticação do windows WCF:

1) abrir o IIS (windows+R (run) e depois digitar o inetmgr, e depois carregar em ok)

2) faça duplo-click com o nome do seu PC NAS LIGAÇÕES

3) Clique Em Pools De Aplicações

4) Seleccione o seu conjunto de aplicações (DefaultAppPool)

5) em seguida, sob as acções do botão direito, carregue em Configuração Avançada:

6) Ir para Secção do modelo do processo e

7) Clique na identidade.

8) seleccione agora o sistema local.

Agora abra o seu estúdio de gestão de servidores sql.: abrir a execução - > depois escreva ssms - >depois carregue em ok No ssms, autentique-se usando a sua conta de autenticação do windows. Abrir a página de segurança expandir a página de registos, então você será capaz de ver a sua conta.

Agora abra as propriedades da sua conta vá para o userMapping e seleccione a base de dados que deseja ligar em seguida, verifique os Serviços de adesão papel que você quer para usar na base de dados seleccionada. clicar.

(para os Serviços de rede, ou seja, utilizadores intranet, é necessário configurar as opções acima para a Autoridade NT\utilizador do sistema também)

Adicionar a propriedade Trusted_ Connection=True; no seu texto de ligação. Salve-o e implemente o serviço web. Reiniciar o conjunto de aplicações.

Você será capaz de conectar a base de dados agora.

 4
Author: Amar Gadekar, 2019-10-10 15:14:29

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

Eu queria que o utilizador web autenticado fosse autenticado na base de dados, em vez de usar o IIS APPPOOL\ASP.NET utilizador v4 indicado no conjunto de aplicações.

Eu encontrei ao inserir o seguinte na web.a configuração arranjou-me isto:

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

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

Vejo outras respostas sobre a criação do nome de utilizador do AppPool. no SQL DB ou apenas para usar o SQL Auth. Ambos estariam corretos se você não quisesse capturar ou proteger usuários individuais do Windows dentro do SQL.

Tom

 3
Author: tommylux, 2017-04-19 15:02:49
Definir a identidade só faz com que isto funcione nas minhas páginas.
 2
Author: charles, 2012-05-30 15:31:35
A Cassini gere o seu site como identidade de utilizador quando inicia a aplicação Visual Studio. A IIS gere o seu site como uma identidade de App Pool. A menos que a identidade do Pool App Tenha acesso à base de dados, você recebe erros. A IIS introduziu a identidade da App Pool para melhorar a segurança. Você pode executar sites sob a identidade padrão de Pool de aplicativos, 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 corre sob uma conta de usuário (geralmente domínio Conta).

Em situações de rede (que não estão em Azure), poderá fazer uma nova lista de aplicações correr numa conta de utilizador do domínio de pastas activas; Prefiro isto à conta da máquina. Ao fazê-lo, oferece segurança granular e acesso granular a recursos de rede, incluindo bases de dados. Cada site é executado em um conjunto de aplicativos diferente (e cada um deles é executado sob sua própria conta de usuário de domínio).

Continue a usar a segurança integrada do Windows em todas as cordas de ligação. No servidor SQL, adicione o Usuários de domínio como logins e permissões de concessão para Bancos de dados, tabelas, SP, etc. por site. Por exemplo, o DB1 usado pelo Website1 tem um login para o User1 porque o Website1 é executado em um Pool de aplicativos como User1.

Um desafio com a implantação do Visual Studio embutido em DB (por exemplo, LocalDB) e do Web Server embutido para um ambiente de produção decorre do facto de o utilizador do programador, SID, e os seus ACLs, não poderem ser utilizados num ambiente de produção seguro. A Microsoft fornece ferramentas para a implantação. Mas é pena que o pobre desenvolvedor que está acostumado a tudo que está apenas trabalhando fora da caixa no novo easy VS IDE com localDB e localWebServer, porque estas ferramentas serão difíceis de usar para esse desenvolvedor, especialmente para um desenvolvedor sem suporte SysAdmin e DBAdmin ou seu conhecimento especializado. No entanto, a implantação de Azure é mais fácil do que a situação da rede empresarial acima mencionada.
 2
Author: subsci, 2013-09-16 19:36:41

Se tiver o seu texto de ligação adicionado na sua web.config, certifique-se de que "Segurança Integrada=false;" para que possa usar o id e senha especificados na web.configuracao.

<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
Author: Daming Fu, 2015-07-28 05:59:32

Como indicado, não utilize a autenticação do Windows, Use a autenticação do servidor SQL

Também se criou uma ligação com a janela "Ligação do servidor", certifique-se de verificar as ligações na web.configuracao. É provável que você criou/modificou a conexão e ela foi armazenada como conexão confiável na web.configuracao. Basta usar esta autenticação

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

O que deve corrigir o erro.

 2
Author: Hammad Khan, 2016-08-01 05:21:05

Outra forma de conceder autorização à base de dados para o utilizador {[[0]} é a seguinte.
enter image description here


  1. adicionar um novo utilizador com nome de Utilizador e nome de Utilizador como IIS APPPOOL\ASP.NET v4.0 com o seu esquema por omissão.
  2. Go to Owner schema and Membership, Check db_datarader, db_datawriter
 2
Author: shana, 2017-05-13 06:08:14

Tenho o mesmo problema que resolvi ao mudar {[[0]} para falso agora está a funcionar.

 2
Author: subramanya46, 2018-11-27 12:40:57

Pensei em postar isto como uma resposta, pois é relevante para a pergunta e pode responder-lhe em alguns casos.

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

Certifique-se que o seu texto de ligação não tem erros ortográficos, está a apontar para a instância do servidor correcta, etc.

 1
Author: colmde, 2017-12-18 15:47:04

Poderá encarar isto de forma errada numa base de dados específica que é criada após a actualização do SSMS. Abra o SSMS e seleccione as suas bases de dados e abra a sua base de dados necessária e depois carregue em Segurança-- > utilizadores -- > e carregue com o botão direito nos utilizadores e carregue novamente em 'Novo Utilizador' e adicione 'Autoridade NT \ utilizadores autenticados' e salvar você trabalhar e ir para o seu formulário na Web/Desktop o que quer que você faça. Desfrutar....

 1
Author: Atta Ur Rehman Zai, 2018-09-16 10:15:39
Algo semelhante aconteceu comigo. o que funcionou comigo foi mudar a segurança integrada da propriedade. verdadeiro à segurança integrada. falso na web.configuração do site
 1
Author: Erik Rodriguez, 2019-05-17 04:33:40

Já fizeste o que @Teddy recomendaste e ainda ainda assim tens o mesmo erro?

Certifique-se que está a alterar a configuração da lista de aplicações que corresponde à sua pasta virtual e não ao servidor-mãe. Cada diretório virtual tem seu próprio AppPool e não herda.

 0
Author: Simon_Weaver, 2013-06-25 05:58:26

Em DefaultAppPool conjunto NetworkService de propriedade de Identidade e no Sql Server adicionar Usuário do Serviço de Rede e dar o adequado permissões para o banco de dados, que funciona muito bem para mim, eu testei localmente, mas eu acho que essa é a melhor configuração para a ligação a partir de qualquer outro computador na rede. quando você definir o Sistema Local na identidade no IIS que está funcionando bem e não é necessário criar qualquer outro usuário no servidor Sql, mas eu acho que isso não vai funcionar em uma rede ambiente.

 0
Author: Luis, 2014-02-16 05:46:26
Encontrei o mesmo problema de testes. ASP.NET API Web

Web Desenvolvida.Apresentador do Visual Studio 2013 Express Base de dados criada no servidor SQL 2012 Express Teste executado usando o 'built in IIS Express' (working) Modificado para usar o IIS Local (da página de propriedades - opção web) Correu o ensaio com o Fiddler Erro recebido-não foi possível aceder à base de dados do Fornecedor.... citando "APPPOOL\DefaultAppPool"

Solução que funcionou.

In IIS

Carregue no conjunto de aplicações "DefaultAppPool" Set Identify = "ApplicationPoolIdentity" Set. NET framework = v4. 0 (embora o meu aplicativo fosse 4.5)

In SQL Server Management Studio

Carregue com o botão direito na pasta de segurança (sob o motor do servidor SQL, por isso aplica-se a todas as tabelas) Carregue com o botão direito no utilizador e adicione 'IIS APPPOOL\DefaultAppPool' No securables na coluna 'Grant' verifique as opções que deseja dar. Em relação ao acima se você é um DBA você provavelmente sabe e quer controlar quais são essas opções? Se você é como eu um desenvolvedor só queria testar o seu serviço de API WEB que também acede ao servidor SQL através da EF 6 no estilo MVC, em seguida, apenas verificar tudo. :) Sim, eu sei, mas funcionou.

 0
Author: Brian Quinn, 2014-07-08 00:55:43

No caso de adicionar uma nova autenticação, certifique-se de que, nas propriedades do servidor ( propriedades rightclick ->)/segurança, o modo de autenticação está definido tanto para o servidor SQL como para o windows não só para as janelas.

 0
Author: badr slaoui, 2015-09-21 13:26:22
Adicione "todos" sob segurança. Se você adicionou o servidor e os usuários se conectando à base de dados, então isso é algo que você está faltando. Espero que isto ajude.
 0
Author: avinava basu, 2015-11-26 15:57:37

Para que conste, se encontrar este erro após mudar de {[[0]} para SQLEXPRESS, Certifique-se que a base de dados já se encontra em SQLEXPRESS. Pode verificar isso no Estúdio de gestão.

Tive o mesmo problema ao usar Entity Framework Depois de mudar para SQLEXPRESS from LocalDB. Tive de executar o comando. Consegui ligar-me com sucesso depois disso.

 0
Author: Irshu, 2016-02-16 16:49:34
Fiz exactamente o que @JeffOgata disse, Mas percebi o erro:
Windows NT user or group 'IIS APPPOOL\ASP.NET v4.0' not found. Check the name again. (Microsoft SQL Server, Error: 15401)
Voltei a ver a minha mensagem de erro e ela dizia:Login failed for user 'IIS APPPOOL\DefaultAppPool'.

Depois de adicionar um utilizador chamado IIS APPPOOL\DefaultAppPool tudo funcionou.

 0
Author: Ogglas, 2017-11-01 13:23:27

Usei o perfil do servidor SQL (disponível no menu Ferramentas SSMS=>) e vi lá (quando o IIS tentou ligar-se à base de dados) que o meu utilizador do IIS era, por alguma razão, a Autoridade NT\IUSR, independentemente de todos os passos recomendados nas respostas nesta pergunta. Então eu adicionei esse usuário ao servidor SQL, e ele funcionou...

 0
Author: alexkovelsky, 2018-03-16 12:37:33