Não é possível conectar-se ao banco de dados usando o Win Auth no aplicativo da Web do ASP.Net hospedado no IIS7

2

Eu tenho um aplicativo Web hospedado no Windows Server 2008 de 64 bits com o IIS 7 e o SQL Server 2008. A conta do pool de aplicativos Web é o Serviço de Rede e adicionei essa conta aos logons do SQL Server 2008 e mapeei ao usuário no banco de dados com direitos dbowner.

Este site está no ASP.Net 2.0 e está usando a Autenticação de Formulários para proteger o acesso a alguns de seus recursos (não todos) para que Acesso Anônimo, Imersão = True e Autenticação de Formulários estejam Habilitados no IIS 7. O aplicativo Web está utilizando a Associação Controles do provedor.

Quando o site é iniciado; dentro do "Aplicativo inicia" ele tenta se conectar ao banco de dados e ler algumas configurações de inicialização. A cadeia de conexão para o banco de dados é salva no web.config. A seguir, a string de conexão.

Data Source=XXXXX; Initial Catalog=XXXXX; Integrated Security=SSPI; Trusted_Connection=True;

No entanto, quando o aplicativo é iniciado, ele não conseguiu se conectar ao banco de dados e eu encontrei as seguintes 3 entradas no log de eventos.

SSPI handshake failed with error code 0x8009030c while establishing a connection with integrated security; the connection has been closed. [CLIENT: ]

Login failed. The login is from an untrusted domain and cannot be used with Windows authentication. [CLIENT: ]

Event code: 3005 
Event message: An unhandled exception has occurred. 
Event time: 4/26/2011 9:22:05 PM 
Event time (UTC): 4/26/2011 6:22:05 PM 
Event ID: 71a4b2cd8d40492ab89af3430cf42ea5 
Event sequence: 2 
Event occurrence: 1 
Event detail code: 0 

Application information: 
    Application domain: /LM/W3SVC/5/ROOT-1-129483157247676684 
    Trust level: Full 
    Application Virtual Path: / 
    Application Path: C:\LMS Projects\Deployment\Web Applications\Microsoft Dynamics CRM Customer LMS Portal\ 
    Machine name: LMS 

Process information: 
    Process ID: 3688 
    Process name: w3wp.exe 
    Account name: NT AUTHORITY\NETWORK SERVICE 

Exception information: 
    Exception type: LoyaltyException 
    Exception message: Exception of type 'LMS.Helpers.LoyaltyException' was thrown. 

Request information: 
    Request URL: http://localhost:6666/default.aspx 
    Request path: /default.aspx 
    User host address: ::1 
    User:  
    Is authenticated: False 
    Authentication Type:  
    Thread account name: NT AUTHORITY\NETWORK SERVICE 

Thread information: 
    Thread ID: 4 
    Thread account name: NT AUTHORITY\NETWORK SERVICE 
    Is impersonating: False 
    Stack trace:    at ASP.global_asax.Application_Start() in c:\LMS Projects\Deployment\Web Applications\Microsoft Dynamics CRM Customer LMS Portal\Global.asax:line 27

A exceção mostrada acima é uma exceção personalizada que eu executo depois de manipular a exceção de plataforma para não ser confundida com o erro no código. Este código está funcionando bem no ambiente Windows Server 2003 e IIS 6.0.

    
por S M Kamran 26.04.2011 / 22:23

1 resposta

1

A representação fará com que seu usuário anônimo seja usado, em vez de seu usuário do pool de aplicativos.

Aqui estão algumas recomendações:

  • Se você der a cada site seu próprio pool de aplicativos, para seu usuário anônimo, configure-o para usar o usuário do pool de aplicativos. Então você só precisa manter um usuário.
  • Defina o usuário do pool de aplicativos como algo diferente de serviço de rede. Como você está usando o IIS 7.0 (WS08 RTM), é mais difícil trabalhar com o usuário IIS APPPOOL \ AppPoolName e geralmente não é bom trabalhar diretamente com o NETWORK SERVICE. Há alguma elevação conhecida de falhas de segurança de permissão e a permissão concedida para essa conta também o abre para outros aplicativos. Eu provavelmente criaria um usuário personalizado, atribuísse ao pool de aplicativos, concedesse permissões em disco e concedesse acesso ao banco de dados.
por 04.05.2011 / 16:01