Partager via


Assertion d’autorisations dans des assemblys personnalisés

Par défaut, le code d’assembly personnalisé s’exécute avec le jeu d’autorisations limité Execution. Dans certains cas, vous pouvez implémenter un assembly personnalisé qui effectue des appels sécurisés aux ressources protégées au sein de votre système de sécurité (par exemple, un fichier ou le Registre). Pour ce faire, vous devez effectuer les actions suivantes :

  1. Identifiez les autorisations exactes dont votre code a besoin pour effectuer l'appel sécurisé. Si cette méthode fait partie d’une bibliothèque Microsoft .NET Framework, ces informations doivent être incluses dans la documentation de la méthode.

  2. Modifiez les fichiers de configuration de stratégie du serveur de rapports de manière à accorder les autorisations requises à l'assembly personnalisé. Pour plus d’informations sur les fichiers de configuration de stratégie de sécurité, consultez Utilisation des fichiers de stratégie de sécurité Reporting Services.

  3. Déclarez les autorisations requises dans le cadre de la méthode utilisée pour effectuer l'appel sécurisé. Cette étape est nécessaire car le code d’assembly personnalisé qui est appelé par le serveur de rapports fait partie de l’assembly hôte d’expressions du rapport, qui s’exécute par défaut avec l’autorisation Execution. Le jeu d’autorisations Execution permet au code de s’exécuter, mais pas d’utiliser des ressources protégées.

  4. Marquez l’assembly personnalisé avec AllowPartiallyTrustedCallersAttribute s’il est signé avec un nom fort. Cela est nécessaire, car les assemblys personnalisés sont appelés à partir d’une expression de rapport qui fait partie de l’assembly hôte de l’expression de rapport, qui, par défaut, n’est pas accordé à FullTrust. Il s’agit donc d’un appelant « partiellement approuvé ». Pour plus d’informations, consultez Utilisation d’assemblys personnalisés avec noms forts.

Implémenter un appel sécurisé

Vous pouvez modifier les fichiers de configuration de stratégie de manière à accorder des autorisations spécifiques à votre assembly. Par exemple, si vous écrivez un assembly personnalisé pour gérer la conversion de devises, vous aurez peut-être besoin de lire le taux de change de la devise actuelle dans un fichier. Pour récupérer les informations de débit, vous devez ajouter une autorisation de sécurité supplémentaire, FileIOPermission, à votre jeu d’autorisations pour l’assembly. Vous pouvez ajouter l'entrée suivante au fichier de configuration de stratégie :

<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>  

Vous pouvez ensuite ajouter une groupe de code qui référence ce jeu d'autorisations :

<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>  

Pour que votre code acquière l'autorisation appropriée, vous devez déclarer cette autorisation dans le code de votre assembly personnalisé. Par exemple, si vous souhaitez ajouter l'accès en lecture seule à un fichier XML, C:\CurrencyRates.xml, vous devez ajouter le code suivant à votre méthode :

// 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");  
...  

Vous pouvez déclarer cette autorisation sous la forme d'un attribut de méthode :

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

Pour plus d'informations, consultez la rubrique « Sécurité du .NET Framework » dans le Guide du développeur .NET Framework.

Utilisation d'assemblages personnalisés avec des rapports