Adicionar identidades do AppPool do IIS 7 como logons do SQL Server

233

Estou executando um site do IIS 7 com um AppPool do modo de pipeline integrado . O AppPools NÃO é executado em NetworkService, etc. identidade (por objetivo), mas usa sua própria identidade do AppPool (IIS AppPool \ MyAppPool).

Essa é uma conta de serviço ou conta virtual. (uma conta de usuário, que não é uma conta completa ...)

Gostaria de conceder a esta conta de serviço (IIS AppPool \ MyAppPool) permissões para conectar-se ao meu SQL Server 2008 Express (executando no modo de autenticação misto).

Embora o SQL Server possa adicionar qualquer conta de usuário normal, a conta virtual IIS AppPool \ MyAppPool não pode ser adicionada aos logons válidos (o SQL Server diz que a conta não pode ser encontrada).

Existe algum truque, qualquer coisa que eu precise habilitar para fazer as contas virtuais funcionarem? (o processo w3wp.exe é executado sob essa identidade de acordo com taskmgr, mas também não posso usar a conta na segurança NTFS ...)

Obrigado pela ajuda!

Máx.
fonte

Respostas:

381

O "IIS APPPOOL \ AppPoolName" funcionará, mas como mencionado anteriormente, ele não parece ser um nome de AD válido. Portanto, quando você o pesquisa na caixa de diálogo "Selecionar Usuário ou Grupo", ele não aparece (na verdade , ele o encontrará, mas pensará que é uma conta real do sistema e tentará tratá-lo como tal ... o que não funcionará e fornecerá a mensagem de erro sobre o fato de não ter sido encontrado).

Como eu consegui fazer isso é:

  1. No SQL Server Management Studio, procure a pasta Segurança (a pasta de segurança no mesmo nível das pastas Bancos de Dados, Objetos de Servidor etc.) ... não a pasta de segurança em cada banco de dados individual)
  2. Clique com o botão direito do mouse em logins e selecione "Novo Login"
  3. No campo Nome de logon, digite IIS APPPOOL \ YourAppPoolName - não clique em pesquisar
  4. Preencha quaisquer outros valores que desejar (por exemplo, tipo de autenticação, banco de dados padrão etc.)
  5. Clique OK

Enquanto o nome do AppPool realmente existir, o logon deve agora ser criado.

dp.
fonte
4
Desculpe ressuscitar uma postagem antiga, mas alguém sabe se isso tem implicações de segurança em um ambiente ativo?
Dooburt
34
incrivelmente útil, ainda que incrivelmente (e porcaria) Microsoftian.
precisa saber é o seguinte
16
Uau. "não clique de pesquisa" no passo 3 parece fazer a diferença (?)
Jedidja
16
Isso não falhará se a instância do servidor SQL estiver em outro servidor? Por exemplo - como é que o SQL1conhecimento sobre o local / virtual IIS AppPool\MyAppPoolon WEB1?
one.beat.consumer
3
Existe alguma solução se o seu servidor Web e SQL Server estiverem em máquinas diferentes !! ?? Posso encontrar o logon, mas não consigo criar o novo logon do SQL. (Se eu não fizer uma verificação de nomes ... ele ainda não funciona)
Dan B
63
CREATE LOGIN [IIS APPPOOL\MyAppPool] FROM WINDOWS;
CREATE USER MyAppPoolUser FOR LOGIN [IIS APPPOOL\MyAppPool];
Ryan Prechel
fonte
1
Bom - enquanto a resposta aceita está correta - eu consegui me envolver em uma situação em que o Management Studio não estava funcionando, então essa solução TSQL bruta era o que eu precisava.
Andrew Patterson
4
Observe para os noobs como eu: certifique-se de executar esta consulta no banco de dados que você deseja acessar com o pool de aplicativos do IIS; a segunda instrução está no nível do banco de dados. Pode ser necessário tornar o usuário membro de determinadas funções de banco de dados e conceder a ele permissões nos esquemas como dbo.
MarioDS 4/11
Depois que descobri que não é possível adicionar logons do IIS APPPOOL por meio da GUI do SSMS, executei seu script. OBRIGADO! USADO para ser possível - não no SSMS 18! Suponho que agora seja um "recurso" #
MC9000
6

Se você estiver passando por máquinas, precisará usar o NETWORK SERVICE, LOCAL SYSTEM, uma conta de domínio ou uma conta de serviço gerenciado do SQL 2008 R2 (se houver), que é a minha preferência se você tiver uma infraestrutura desse tipo . Você não pode usar uma conta que não esteja visível para o domínio do Active Directory.

Dave Markle
fonte
6

Como observação, os processos que usam contas virtuais (NT Service \ MyService e IIS AppPool \ MyAppPool) ainda estão em execução na conta "NETWORK SERVICE", pois esta publicação sugere http://www.adopenstatic.com/cs/blogs/ken/ archive / 2008/01/29 / 15759.aspx . A única diferença é que esses processos são membros dos grupos "NT Service \ MyService" ou "IIS AppPool \ MyAppPool" (pois na verdade são grupos e não usuários). Essa também é a razão pela qual os processos são autenticados na rede como a máquina da mesma forma que a conta do NETWORK SERVICE.

A maneira de proteger o acesso é não depender de essas contas não terem privilégios de SERVIÇO DE REDE, mas conceder mais permissões especificamente para "NT Service \ MyService" ou "IIS AppPool \ MyAppPool" e remover permissões para "Usuários", se necessário.

Se alguém tiver informações mais precisas ou contraditórias, poste.

Steven
fonte
2

Pode ser o que você está procurando ...

http://technet.microsoft.com/en-us/library/cc730708%28WS.10%29.aspx

Também aconselho a longo prazo que considere um usuário de domínio com direitos limitados; o que você está tentando funciona bem em um cenário de máquina de silos, mas precisará fazer alterações se mudar para outra máquina para o servidor DB.

keithwarren7
fonte
0

Eu descobri isso por tentativa e erro ... a verdadeira fenda na armadura era uma configuração pouco conhecida no IIS no Configuration Editorsite do

Section: system.webServer/security/authentication/windowsAuthentication

From: ApplicationHost.config <locationpath='ServerName/SiteName' />

chamado useAppPoolCredentials(que está definido como Falsepadrão. Defina isso como Truee a vida se tornará ótima novamente !!! Espero que isso economize dor para o próximo cara ....

insira a descrição da imagem aqui

Dan B
fonte
Eu segui o mesmo processo, mas o problema não foi resolvido. Você deve ter feito outra coisa também, pode compartilhar?
RSB 23/04
@RSB - você seguiu todas as outras etapas? você configurou o appPools e concedeu a eles permissões para os arquivos em que o site está localizado? Você adicionou o nome do servidor como um logon com permissões ao SQL Server? Você aplicou o appPool ao SQL Server com permissões? Você modificou o IIS para usar o WindowsAuthentication? Quais erros você está recebendo? Funciona no seu ambiente de desenvolvimento e não na produção?
22415 Dan B
Eu configurei o appPool, mas como lhes conceder permissão para arquivos onde o site está localizado? Como adicionar o nome do servidor como um logon com permissões ao servidor SQL? Também adicionei o appPool ao SQL Server com permissões. Como modificar o IIS para usar o WindowsAuthentocation.It funciona no meu ambiente de desenvolvimento quando o IIS e o servidor sql estão na mesma máquina, mas fornece o erro System.ComponentModel.Win32Exception: Erro de acesso negado quando o servidor IIS e Sql estão em máquinas diferentes. Por favor sugira.
RSB 24/04
se você me der seu e-mail, enviarei um documento que fiz sobre como fazer tudo ... há muito mucj para adicioná-lo aqui ...
Dan B
@RSB Enviei um email para você. Boa sorte.
21915 Dan B
0

No meu caso, o problema foi que comecei a criar um projeto de amostra MVC Alloy do zero usando a extensão Visual Studio / Episerver e funcionou bem quando executado usando o Visual Studio iis express local. No entanto, por padrão, ele aponta o banco de dados sql para o LocalDB e, quando implantei o site no IIS local, ele começou a apresentar alguns dos erros iniciais que resolvi: 1. adicionando a ligação do URL do site local a C: / Windows / System32 / drivers / etc / hosts 2. Em seguida, editando o application.config encontrou o local do arquivo clicando com o botão direito do mouse no IIS express no canto inferior direito da tela ao executar o site usando o Visual studio e adicionando a ligação para o URL iis local. 3. Finalmente, fiquei preso com "incapaz de acessar erros no banco de dados"

arokanika
fonte