Comprendre les stratégies de sécurité

Tout code exécuté par un serveur de rapports doit faire partie d’une stratégie de sécurité d’accès au code spécifique. Ces stratégies de sécurité comprennent des groupes de codes qui mappent une preuve à un ensemble de jeux d'autorisations nommés. Souvent, les groupes de codes sont associés à un jeu d'autorisations nommé qui spécifie les autorisations pouvant être accordées au code dans ce groupe. Le runtime utilise la preuve fournie par un hôte approuvé ou par le chargeur pour déterminer les groupes de codes auxquels le code appartient et, par conséquent, les autorisations à accorder au code. Reporting Services adhère à cette architecture de stratégie de sécurité telle qu’elle est définie par le Common Language Runtime (CLR) du Microsoft .NET Framework. Les sections suivantes décrivent les divers types de codes qui existent dans Reporting Services, ainsi que les règles de stratégie associées.

Assemblys du serveur de rapports

Les assemblys du serveur de rapports contiennent du code qui fait partie du produit Reporting Services. Reporting Services est écrit à l’aide d’assemblys de code managé ; tous ces assemblys portent un nom fort (autrement dit, ils sont signés numériquement). Les groupes de codes de ces assemblys sont définis à l’aide de StrongNameMembershipCondition, qui fournit une preuve basée sur les informations de clé publique pour le nom fort de l’assembly. Le jeu d’autorisations FullTrust est accordé au groupe de codes.

Extensions du serveur de rapports (rendu, données, remise et sécurité)

Les extensions du serveur de rapports sont des extensions personnalisées en matière de données, de remise, de rendu et de sécurité que des personnes tierces ou vous-même créez afin d’étendre les fonctionnalités de Reporting Services. Vous devez accorder FullTrust à ces extensions ou code d’assembly dans les fichiers de configuration de stratégie associés au composant Reporting Services que vous étendez. Les extensions fournies avec Reporting Services sont signées à l’aide de la clé publique du serveur de rapports et reçoivent le jeu d’autorisations FullTrust.

Important

Vous devez modifier les fichiers de configuration de stratégie Reporting Services afin que FullTrust soit accordé aux extensions tierces. Si vous n’ajoutez pas de groupe de codes avec FullTrust à vos extensions personnalisées, ces dernières ne peuvent pas être utilisées par le serveur de rapports.

Pour plus d’informations sur les fichiers de configuration de stratégie dans Reporting Services, consultez Utiliser les fichiers de stratégie de sécurité Reporting Services.

Expressions utilisées dans les rapports

Les expressions de rapport sont des expressions de code incorporé ou des méthodes définies par l’utilisateur contenues dans l’élément Code d’un fichier RDL (Report Definition Language). Il existe un groupe de codes déjà configuré dans les fichiers de stratégie qui accorde ces expressions au jeu d’autorisations d’exécution par défaut. Le groupe de codes ressemble à l’exemple suivant :

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

L’autorisation Execution permet au code de s’exécuter mais pas d’utiliser des ressources protégées. Toutes les expressions d'un rapport sont compilées en un assembly (appelé assembly « hôte d'expressions ») qui est stocké en tant que partie du rapport compilé. Lorsque le rapport est exécuté, le serveur de rapports charge l'assembly hôte d'expressions et effectue des appels dans cet assembly pour exécuter les expressions. Les assemblys hôtes d'expressions sont signés avec une clé spécifique utilisée pour définir le groupe de codes de tous les hôtes d'expressions.

Les expressions de rapport référencent des collections du modèle objet de rapport (champs, paramètres, etc.) et effectuent des tâches simples comme l'arithmétique et des opérations de chaîne. Le code qui effectue ces opérations simples requiert uniquement l’autorisation Execution. Par défaut, les méthodes définies par l’utilisateur dans l’élément Code et les assemblys personnalisés reçoivent l’autorisation Execution dans Reporting Services. Par conséquent, pour la plupart des expressions, la configuration actuelle ne nécessite pas de modifier les fichiers de stratégie de sécurité. Pour accorder des autorisations supplémentaires aux assemblys hôtes d’expression, un administrateur doit modifier les fichiers de configuration de stratégie du serveur de rapports et des Concepteur de rapports, et modifier le groupe de codes d’expressions de rapport. Étant donné qu’il s’agit d’un paramètre global, la modification des autorisations par défaut pour les hôtes d’expression affecte tous les rapports. Pour cette raison, vous devez placer tout le code qui nécessite une sécurité supplémentaire dans un assembly personnalisé. Seul cet assembly reçoit les autorisations dont vous avez besoin.

Important

Le code qui appelle des assemblys externes ou des ressources protégées doit être incorporé dans un assembly personnalisé à utiliser dans les rapports. Vous disposez ainsi d'un plus grand contrôle des autorisations requises et déclarées par votre code. N’effectuez pas d’appels pour sécuriser des méthodes dans l’élément Code. En effet, cela vous oblige à accorder FullTrust à l’hôte d’expressions de rapport ; cela vous oblige également à accorder l’accès complet à l’ensemble du code personnalisé pour le Common Language Runtime.

Attention

N’accordez pas FullTrust au groupe de codes pour un hôte d’expressions de rapport. Sinon, vous permettez à toutes les expressions de rapport d'effectuer des appels système protégés.

Assemblys personnalisés référencés dans les rapports

Certaines expressions de rapport peuvent appeler d’autres assemblys de code, également appelés assemblys personnalisés dans Reporting Services. Pour le serveur de rapports, ces assemblys sont censés disposer au moins de l’autorisation Execution dans les fichiers de configuration de stratégie. Par défaut, les fichiers de stratégie fournis avec Reporting Services accordent l’autorisation Execution à tous les assemblys à partir de la zone « Mon Ordinateur ». Vous pouvez accorder des autorisations supplémentaires aux assemblys personnalisés en fonction des besoins.

Dans certains cas, vous devrez peut-être effectuer une opération qui nécessite des autorisations de code spécifiques dans une expression de rapport. En règle générale, ce scénario signifie qu’une expression de rapport doit effectuer un appel à une méthode de bibliothèque CLR sécurisée (par exemple, qui accède aux fichiers ou au registre système). La documentation .NET Framework décrit les autorisations de code requises pour effectuer cet appel sécurisé. Pour exécuter l’appel, le code appelant doit recevoir ces autorisations spécifiques et sécurisées. Si vous effectuez l’appel à partir d’une expression de rapport ou de l’élément Code, les autorisations appropriées doivent être accordées à l’assembly hôte d’expressions. Cependant, une fois que vous avez accordé les autorisations appropriées à l'hôte d'expressions, tout code s'exécutant dans l'expression d'un rapport reçoit désormais cette autorisation spécifique. Il est beaucoup plus sécurisé pour effectuer l’appel à partir d’un assembly personnalisé et accorder à cet assembly personnalisé les autorisations spécifiques.