System.Security.SecurityException quando o diretório virtual aponta para um compartilhamento remoto no ASP.NET

Este artigo ajuda você a resolve o problema que System.Security.SecurityException pode ser gerado quando você usa um diretório virtual que aponta para um compartilhamento remoto para hospedar um ASP da Microsoft. Aplicativo baseado em NET.

Versão original do produto: ASP.NET
Número de KB original: 320268

Sintomas

Quando você usa um diretório virtual que aponta para um compartilhamento remoto para hospedar um ASP. Aplicativo baseado em NET, você pode receber uma mensagem de erro semelhante a um dos seguintes exemplos:

  • Mensagem 1

    Descrição de exceção de segurança: o aplicativo tentou executar uma operação não permitida pela política de segurança. Para conceder a esse aplicativo a permissão necessária, entre em contato com o administrador do sistema ou altere o nível de confiança do aplicativo no arquivo de configuração.
    Detalhes da exceção: System.Security.SecurityException: erro de segurança.
    Erro de origem:
    Linha 30: __intialized de bool estático privado = false; Linha 31: Linha 32: public Global_asax() { Linha 33: if (ASP. Global_asax.__intialized == false)) { Linha 34: ASP. Global_asax.__intialized = true;

  • Mensagem 2

    Erro do servidor no aplicativo /ApplicationName.
    Descrição do erro do analisador: ocorreu um erro durante a análise de um recurso necessário para atender a essa solicitação. Examine os seguintes detalhes de erro de análise específicos e modifique o arquivo de origem adequadamente.
    Mensagem de erro do analisador: não foi possível carregar o tipo ApplicationName.Global.
    Erro de origem: Linha 1: <%@ Application Codebehind="Global.asax.cs" Inherits="ApplicationName.Global" %> Arquivo de origem: Caminho do Aplicativo\global.asax Linha: 1

Motivo

O System.Web namespace não tem o AllowPartiallyTrustedCallersAttribute aplicado a ele. Para obter mais informações, visite padrões & práticas.

Qualquer código que não esteja no grupo de código My_Computer_Zone que não tenha esse atributo requer o direito do usuário FullTrust . Portanto, o compartilhamento remoto que contém o conteúdo dos aplicativos Web requer FullTrust.

Resolução

Para resolve esse comportamento, conceda o direito fullTrust ao compartilhamento remoto:

  1. No servidor Web, abra Ferramentas Administrativas e clique duas vezes em Configuração do Microsoft .NET Framework.

  2. Expanda a Política de Segurança do Runtime, expanda Máquina e expanda Grupos de Código.

  3. Clique com o botão direito do mouse em All_Code e selecione Novo.

  4. Select Create a new code group. Dê ao seu grupo de código um nome relevante, como o nome do compartilhamento de aplicativos. Selecione Avançar.

  5. Na lista Escolher o tipo de condição para esse grupo de código , selecione URL.

  6. Na caixa URL , digite o caminho do compartilhamento no seguinte formato:
    file:////\\computername\\sharename\*

    Observação

    Substitua o nome do computador pelo nome do computador que está hospedando o compartilhamento remoto. Substitua o nome do share pelo nome do compartilhamento.

  7. Selecione Avançar. Na próxima página, selecione Usar um conjunto de permissões existente e selecione FullTrust.

  8. Selecione Avançar e, em seguida, selecione Concluir.

  9. Reinicie o IIS (Serviços de Informações da Internet) para reiniciar o processo de trabalho ASP.NET.

Se a Configuração de .NET Framework da Microsoft não for exibida em Ferramentas Administrativas, você poderá instalar o SDK (Kit de Desenvolvimento de Software) .NET Framework para adicionar a Configuração do Microsoft .NET Framework. Em vez disso, você pode executar o seguinte comando para fazer a alteração:

Drive :\WINDOWS\Microsoft.NET\Framework\v2.0.50727\caspol.exe -m -ag 1 -url "file:////\\computername\sharename\*" FullTrust -exclusive on

Para obter mais informações sobre o que esses argumentos fazem, execute o seguinte comando:

caspol.exe -?

Status

Este é o comportamento padrão.

Mais informações

Nessa configuração, a conta sob a qual o processo de trabalho ASP.NET é executado deve ter direitos suficientes para o compartilhamento remoto. Você pode definir a conta na qual o processo de trabalho é executado usando a <processmodel> marca no arquivo Machine.config .

Etapas para reproduzir o comportamento

  1. Crie um novo diretório virtual que aponte para um compartilhamento remoto.
  2. Crie um aplicativo para o diretório virtual. Verifique se o usuário que se conecta ao compartilhamento tem acesso de leitura ao conteúdo remoto.
  3. Na marca do <processmodel> arquivo Machine.config , altere o usuário para um usuário de domínio que tenha permissões de lista, leitura e execução no compartilhamento remoto.
  4. Crie um arquivo de .aspx embutido e, em seguida, coloque o arquivo no compartilhamento remoto.
  5. Faça uma solicitação para a página.

Referências

Para obter mais informações sobre as permissões necessárias para que a conta ASPNET execute ASP.NET aplicativos, consulte Introdução à Identidade ASP.NET. Para obter mais informações sobre ASP.NET segurança, consulte INFO: ASP.NET Visão geral de segurança.