Compartilhar via


Declarando permissões em assemblies personalizados

Por padrão, o código do assembly personalizado é executado com o conjunto de permissões de execução limitado. Em alguns casos, talvez você queira implementar um assembly personalizado que faça chamadas protegidas para recursos protegidos em seu sistema de segurança (como um arquivo ou o registro). Para fazer isso, você deve fazer o seguinte:

  1. Identifique as permissões exatas de que seu código precisa para fazer a chamada protegida. Se esse método fizer parte de uma biblioteca do Microsoft .NET Framework, essas informações deverão ser incluídas na documentação do método.

  2. Modifique os arquivos de configuração de política do servidor de relatório para conceder ao assembly personalizado as permissões necessárias. Para obter mais informações sobre os arquivos de configuração de política de segurança, consulte Usando arquivos de política de segurança do Reporting Services.

  3. Afirme as permissões necessárias como parte do método no qual a chamada segura é feita. Isso é necessário porque o código de assembly personalizado chamado pelo servidor de relatório faz parte do assembly de host de expressão de relatório, que é executado com a permissão De execução por padrão. O conjunto de permissões de execução permite que o código seja executado, mas não use recursos protegidos.

  4. Marque o assembly personalizado com AllowPartiallyTrustedCallersAttribute se ele estiver assinado com um nome forte. Isso é necessário porque assemblies personalizados são chamados de uma expressão de relatório que faz parte do assembly de host de expressão de relatório, que, por padrão, não recebe FullTrust; portanto, é um chamador "parcialmente confiável". Para obter mais informações, consulte Como usar Strong-Named assemblies personalizados.

Implementando uma chamada segura

Você pode modificar os arquivos de configuração de política para conceder permissões específicas ao assembly. Por exemplo, se você estava escrevendo um assembly personalizado para lidar com a conversão de moeda, talvez seja necessário ler as taxas de câmbio atuais de um arquivo. Para recuperar as informações de taxa, você precisaria adicionar uma permissão de segurança adicional, FileIOPermission, ao conjunto de permissões para o assembly. Você pode fazer a seguinte entrada adicional no arquivo de configuração de política:

<PermissionSet class="NamedPermissionSet"  
   version="1"  
   Name="CurrencyRatesFilePermissionSet"  
   Description="A special permission set that grants read access to my currency rates file.">  
      <IPermission class="FileIOPermission"  
         version="1"  
         Read="C:\CurrencyRates.xml"/>  
      <IPermission class="SecurityPermission"  
         version="1"  
         Flags="Execution, Assertion"/>  
</PermissionSet>  

Em seguida, você adiciona um grupo de códigos que faz referência a esse conjunto de permissões:

<CodeGroup class="UnionCodeGroup"  
   version="1"  
   PermissionSetName="CurrencyRatesFilePermissionSet"  
   Name="MyNewCodeGroup"  
   Description="A special code group for my custom assembly.">  
   <IMembershipCondition class="UrlMembershipCondition"  
      version="1"  
      Url="C:\Program Files\Microsoft SQL Server\MSRS10_50.MSSQLSERVER\MSSQL\Reporting Services\ReportServer\bin\CurrencyConversion.dll"/>  
</CodeGroup>  

Para que seu código adquira a permissão apropriada, você deve declarar a permissão dentro do código do assembly personalizado. Por exemplo, se você quiser adicionar acesso somente leitura a um arquivo XML, C:\CurrencyRates.xml, adicione o seguinte código ao seu método:

// C#  
FileIOPermission permission = new FileIOPermission(FileIOPermissionAccess.Read, @"C:\CurrencyRates.xml");  
try  
{  
   permission.Assert();  
   // Load the XML currency rates file  
   XmlDocument doc = new XmlDocument();  
   doc.Load(@"C:\CurrencyRates.xml");  
...  

Você também pode adicionar a asserção como um atributo de método:

[FileIOPermissionAttribute(SecurityAction.Assert, Read=@"C:\CurrencyRates.xml")]  

Para obter mais informações, consulte "Segurança do .NET Framework" no Guia do Desenvolvedor do .NET Framework.

Consulte Também

Usar assemblies personalizados com relatórios