Compartilhar via


Noções básicas sobre políticas de segurança

Qualquer código executado por um servidor de relatório deve fazer parte de uma política de segurança de acesso de código específica. Essas políticas de segurança consistem em grupos de códigos que mapeiam evidências para um conjunto de conjuntos de permissões nomeados. Geralmente, os grupos de códigos são associados a um conjunto de permissões nomeado que especifica as permissões permitidos para código nesse grupo. O runtime usa evidências fornecidas por um host confiável ou pelo carregador para determinar a quais grupos de código o código pertence e, portanto, quais permissões conceder o código. O Reporting Services segue essa arquitetura de política de segurança, conforme definido pelo CLR (Common Language Runtime) do Microsoft .NET Framework. As seções a seguir descrevem os vários tipos de código no Reporting Services e as regras de política associadas a eles.

Assemblies do servidor de relatório

Os assemblies do servidor de relatório são aqueles que contêm código que faz parte do produto Reporting Services. O Reporting Services é escrito usando assemblies de código gerenciado; todos esses assemblies são de nome forte (ou seja, assinados digitalmente). Os grupos de códigos desses assemblies são definidos usando o StrongNameMembershipCondition, que fornece evidências baseadas em informações de chave pública para o nome forte do assembly. O grupo de códigos recebe o conjunto de permissões FullTrust .

Extensões do servidor de relatório (renderização, dados, entrega e segurança)

As extensões de servidor de relatório são extensões personalizadas de dados, entrega, renderização e segurança que você ou outros terceiros criam para estender a funcionalidade do Reporting Services. Você deve conceder o FullTrust a essas extensões ou código de assembly nos arquivos de configuração de política associados ao componente do Reporting Services que você está estendendo. As extensões enviadas como parte do Reporting Services são assinadas com a chave pública do servidor de relatório e recebem o conjunto de permissões FullTrust .

Importante

Você deve modificar os arquivos de configuração de política do Reporting Services para permitir o FullTrust para quaisquer extensões de terceiros. Se você não adicionar um grupo de códigos com FullTrust para suas extensões personalizadas, elas não poderão ser usadas pelo servidor de relatório.

Para obter mais informações sobre os arquivos de configuração de política no Reporting Services, consulte Usando arquivos de política de segurança do Reporting Services.

Expressões usadas em relatórios

Expressões de relatório são expressões de código embutidas ou métodos definidos pelo usuário contidos no elemento Code de um arquivo de linguagem de definição de relatório. Há um grupo de códigos que já está configurado nos arquivos de política que concede a essas expressões a permissão de execução definida por padrão. O grupo de códigos tem a seguinte aparência:

<CodeGroup  
   class="UnionCodeGroup"  
   version="1"  
   PermissionSetName="Execution"  
   Name="Report_Expressions_Default_Permissions"  
   Description="This code group grants default permissions for code in report expressions and Code element. ">  
    <IMembershipCondition  
       class="StrongNameMembershipCondition"  
       version="1"  
       PublicKeyBlob="002400..."  
    />  
</CodeGroup>  

A permissão de execução permite que o código seja executado (execute), mas não use recursos protegidos. Todas as expressões encontradas em um relatório são compiladas em um assembly (chamado de assembly "host de expressão") armazenado como parte do relatório compilado. Quando o relatório é executado, o servidor de relatório carrega o assembly de host de expressão e faz chamadas para esse assembly para executar expressões. Os assemblies de host de expressão são assinados com uma chave específica que é usada para definir o grupo de códigos para todos os hosts de expressão.

As expressões de relatório fazem referência a coleções de modelos de objeto de relatório (campos, parâmetros etc.) e executam tarefas simples, como operações aritméticas e de cadeia de caracteres. O código que executa essas operações simples requer apenas a permissão de execução . Por padrão, métodos definidos pelo usuário no elemento Code e quaisquer assemblies personalizados recebem permissão de execução no Reporting Services. Portanto, para a maioria das expressões, a configuração atual não exige que você modifique nenhum arquivo de política de segurança. Para conceder permissões adicionais para expressão de assemblies de host, um administrador precisa modificar os arquivos de configuração de política do servidor de relatório e do Designer de Relatórios e alterar o grupo de códigos de expressões de relatório. Como é uma configuração global, a alteração das permissões padrão para os hosts de expressão afeta todos os relatórios. Por esse motivo, é altamente recomendável que você coloque todo o código que exija segurança adicional em um assembly personalizado. Somente este assembly receberá as permissões necessárias.

Importante

O código que chama assemblies externos ou recursos protegidos deve ser incorporado a um assembly personalizado para uso em relatórios. Isso lhe dá mais controle sobre as permissões solicitadas e declaradas pelo seu código. Você não deve fazer chamadas para proteger métodos dentro do elemento Code . Isso exige que você conceda o FullTrust ao host de expressão de relatório e concede a todos os códigos personalizados acesso completo ao CLR.

Cuidado

Não conceda FullTrust ao grupo de códigos de um host de expressão de relatório. Se você fizer isso, habilite todas as expressões de relatório para fazer chamadas de sistema protegidas.

Assemblies personalizados referenciados em relatórios

Algumas expressões de relatório podem chamar assemblies de código de terceiros, também conhecidos no Reporting Services como assemblies personalizados. O servidor de relatório espera que esses assemblies tenham pelo menos permissão de execução nos arquivos de configuração de política. Por padrão, os arquivos de política que são enviados com o Reporting Services concedem permissão de execução a todos os assemblies a partir da zona "Meu Computador". Você pode conceder permissões adicionais a assemblies personalizados conforme necessário.

Em alguns casos, talvez seja necessário executar uma operação que exija permissões de código específicas em uma expressão de relatório. Normalmente, isso significa que uma expressão de relatório precisa fazer uma chamada para um método de biblioteca CLR protegido (como aquele que acessa arquivos ou o registro do sistema). A documentação do .NET Framework descreve as permissões de código necessárias para fazer essa chamada segura; para executar a chamada, o código de chamada deve receber essas permissões específicas e seguras. Se você fizer a chamada de uma expressão de relatório ou do elemento Code , o assembly de host de expressão deverá receber as permissões apropriadas. No entanto, depois que você conceder as permissões ao host da expressão, todo o código executado em qualquer expressão em qualquer relatório agora receberá essa permissão específica. É muito mais seguro fazer a chamada de um assembly personalizado e conceder a esse assembly personalizado as permissões específicas.

Consulte Também

Segurança de acesso do código no Reporting Services
Desenvolvimento Seguro (Reporting Services)