Share via


Declarando permissões em assemblies personalizados

Por padrão, o código de assembly personalizado é executado com o conjunto de permissões limitado Execution. Em alguns casos, talvez você queira implementar um assembly personalizado que crie chamadas seguras para proteger recursos em seu sistema de segurança (como um arquivo ou o Registro). Para realizar isso, faça o seguinte:

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

  2. Modifique os arquivos de configuração de política de servidor de relatório para conceder as permissões exigidas ao assembly personalizado. 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. Declare as permissões exigidas como parte do método no qual a ligação segura será feita. Isso é obrigatório porque o código de assembly personalizado chamado pelo servidor de relatório faz parte do assembly host de expressão de relatório, executado com a permissãoExecution por padrão. O conjunto de permissões Execution permite que o código seja executado, mas não permite o uso de recursos protegidos.

  4. Marque o assembly personalizado com AllowPartiallyTrustedCallersAttribute se ele for assinado com um nome forte. Isso é obrigatório porque os assemblies personalizados são chamados de uma expressão de relatório que faz parte do assembly host de expressão de relatório que, por padrão, não recebe a permissãoFullTrust; dessa forma, ele é um chamador "parcialmente confiável". Para obter mais informações, consulte Usando assemblies de nome forte personalizados.

Implementando uma chamada segura

Você pode modificar os arquivos de configuração de política para conceder as permissões específicas ao seu assembly. Por exemplo, se você estiver escrevendo um assembly personalizado para manipular conversão de moedas, talvez seja necessário ler as taxas de câmbio da moeda atual em um arquivo. Para recuperar a informações de taxa, você precisaria adicionar uma permissão de segurança adicional, FileIOPermission, ao seu conjunto de permissões para o assembly. Crie a entrada adicional a seguir 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, adicione um grupo de códigos que faça referência ao 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 em seu código de assembly personalizado. Por exemplo, se quiser adicionar acesso somente leitura a um arquivo XML, C:\CurrencyRates.xml, adicione o código a seguir a 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 declaraçà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

Outros recursos