Activer et désactiver le sandboxing RDL pour Reporting Services en mode intégré SharePoint

S’applique à : SQL Server Reporting Services (2016) SharePoint Not supported Power BI Report Server

Pour obtenir du contenu lié aux versions précédentes de SQL Server Reporting Services (SSRS), consultez SQL Server 2014 Reporting Services.

La caractéristique de Sandboxing Report Definition Language (RDL) vous permet de détecter et restreindre l’utilisation de types spécifiques de ressources, par les locataires individuels, dans un environnement où plusieurs locataires utilisent une batterie de serveurs Web unique de serveurs de rapports. Citons pour exemple un scénario de services d'hébergement où vous pouvez maintenir une batterie de serveurs Web uniques de serveurs de rapports utilisés par plusieurs locataires et différentes sociétés. En tant qu'administrateur de serveur de rapports, vous pouvez activer cette fonctionnalité pour aider à accomplir les objectifs suivants :

  • Restreindre la taille des ressources externes. Les ressources externes incluent les images, fichiers .xslt et données cartographiques.

  • Lors de la publication des rapports, limiter les types et membres utilisés dans le texte d'expression.

  • Lors du traitement des rapports, limiter la longueur du texte et la taille de la valeur de retour pour les expressions.

Notes

L’intégration de Reporting Services à SharePoint n’est plus disponible après SQL Server 2016.

Lorsque le Sandboxing RDL est activé, les fonctionnalités suivantes sont désactivées :

  • Code personnalisé dans l’élément <Code> d’une définition de rapport.

  • Mode de compatibilité descendante RDL pour les éléments de rapport personnalisés SQL Server 2005 Reporting Services (SSRS).

  • Paramètres nommés dans les expressions

Cet article décrit chaque élément de l’élément <RDLSandboxing> dans le fichier RSReportServer.Config. Pour plus d’informations sur la modification de ce fichier, consultez Modifier un fichier de configuration Reporting Services (RSreportserver.config). Un journal des traces de serveur enregistre l'activité liée à la fonctionnalité Sandboxing RDL. Pour plus d’informations sur les journaux des traces, consultez Journal des traces du service Report Server.

Exemple de configuration

L’exemple suivant illustre les paramètres et valeurs d’exemple pour l’élément <RDLSandboxing> dans le fichier RSReportServer.Config.

<RDLSandboxing>  
   <MaxExpressionLength>5000</MaxExpressionLength>  
   <MaxResourceSize>5000</MaxResourceSize>  
   <MaxStringResultLength>3000</MaxStringResultLength>  
   <MaxArrayResultLength>250</MaxArrayResultLength>  
   <Types>  
      <Allow Namespace="System.Drawing" AllowNew="True">Bitmap</Allow>  
      <Allow Namespace="TypeConverters.Custom" AllowNew="True">*</Allow>  
   </Types>  
   <Members>  
      <Deny>Format</Deny>  
      <Deny>StrDup</Deny>  
   </Members>  
</RDLSandboxing>  

Paramètres de configuration

Le tableau suivant contient des informations sur les paramètres de configuration. Les paramètres sont présentés dans l'ordre dans lequel ils apparaissent dans le fichier de configuration.

Paramètre Description
MaxExpressionLength Quantité maximale de caractères autorisés dans les expressions RDL.

Valeur par défaut : 1 000
MaxResourceSize Quantité maximale de Ko autorisés pour une ressource externe.

Valeur par défaut : 100
MaxStringResultLength Quantité maximale de caractères autorisés dans une valeur de retour pour une expression RDL.

Valeur par défaut : 1 000
MaxArrayResultLength Quantité maximale d'éléments autorisés dans un tableau de valeurs retourné pour une expression RDL.

Valeur par défaut : 100
Types Liste des membres à autoriser dans les expressions RDL.
Autoriser Type ou jeu de types à autoriser dans les expressions RDL.
Espace de noms Attribut pour Allow qui est l’espace de noms qui contient un ou plusieurs types qui s’appliquent à Valeur. Cette propriété n'est pas sensible à la casse.
AllowNew Attribut booléen pour Allow qui contrôle si de nouvelles instances de ce type sont autorisées dans les expressions RDL ou dans un élément de <classe> RDL.

Quand RDLSandboxing est activé, de nouveaux tableaux ne peuvent pas être créés dans les expressions RDL, indépendamment du paramétrage de AllowNew.
Valeur Valeur pour Allow qui est le nom du type à autoriser dans les expressions RDL. La valeur * indique que tous les types dans l’espace de noms sont autorisés. Cette propriété n'est pas sensible à la casse.
Members (Membres) Valeur pour liste des types qui se trouvent dans l’élément <Types> ainsi que dans la liste des noms de membres qui ne sont pas autorisés dans les expressions RDL.
Deny Nom d’un membre qui n’est pas autorisé dans les expressions RDL. Cette propriété n'est pas sensible à la casse.

Lorsque Deny est spécifié pour un membre, tous les membres avec ce nom pour tous les types ne sont pas autorisés.

Utilisation des expressions lorsque le sandboxing RDL est activé

Vous pouvez modifier la fonctionnalité Sandboxing RDL afin d'aider à gérer les ressources utilisées par une expression des manières suivantes :

  • Limitez le nombre de caractères utilisés pour une expression.

  • Limitez la taille du résultat retourné par une expression.

  • Autorisez une liste spécifique de types qui peuvent être utilisés dans une expression.

  • Limitez la liste de membres par nom pour la liste des types autorisés qui peuvent être utilisés dans une expression.

  • La fonctionnalité de Sandboxing RDL vous permet de créer la liste des types approuvés et une liste des membres refusés. La liste des types approuvés est appelée une liste d’autorisation. La liste des membres refusés porte le nom de liste de blocage.

Remarque

Dans la définition de rapport, un ordinateur ne peut pas connaître le type de chaque instance d'une référence d'expression. Lorsque vous ajoutez un membre à la liste de blocage, vous refusez tous les membres de ce nom parmi tous les types dans la liste d’autorisation.

Les résultats d'expression RDL sont vérifiés au moment de l'exécution. Les expressions RDL sont vérifiées dans la définition de rapport lorsque le rapport est publié. Contrôlez le journal des traces du serveur de rapports afin de détecter toute violation. Pour plus d’informations, consultez Report Server Service Trace Log.

Utilisation des types

Lorsque vous ajoutez un type à la liste d’autorisation, vous contrôlez les points d’entrée suivants pour accéder aux expressions RDL :

  • Membres statiques d'un type.

  • ```Nouvelle`` méthode Visual Basic.

  • Élément <Classes> dans la définition de rapport.

  • Membres que vous avez ajoutés à la liste de blocage pour un type dans la liste d’autorisation.

La liste d’autorisation ne contrôle pas les points d'entrée suivants :

  • Datasets du rapport. Les champs dans les datasets de rapport retournés à partir de requêtes peuvent contenir tout type RDL valide.

  • des paramètres de rapport ; Les valeurs de paramètres fournies par l'utilisateur peuvent contenir tout type RDL valide.

  • Membres d'un type actif qui ne sont pas dans la liste de blocage. Par défaut, tous les membres de tous les types dans la liste d’autorisation sont activés. Lorsque vous ajoutez un nom de membre à la liste de blocage, vous refusez tous les membres avec ce nom parmi tous les types figurant dans la liste d’autorisation.

Pour activer un membre d'un type mais refuser un membre avec le même nom pour un type différent, vous devez effectuer les actions suivantes :

  • Ajouter un élément <Deny> pour le nom de membre.

  • Créer un membre de proxy avec un nom différent sur une classe dans un assembly personnalisé pour le membre que vous souhaitez activer.

  • Ajouter cette classe nouvelle à la liste d’autorisation.

Pour ajouter des fonctions Visual Basic .NET Framework à la liste d’autorisation, ajoutez les types correspondants de l’espace de noms Microsoft.VisualBasic à cette liste.

Pour ajouter des mots clés du type Visual Basic .NET Framework à la liste d’autorisation, ajoutez le type CLR correspondant à cette liste. Par exemple, pour utiliser le mot clé Visual Basic .NET Framework Entier, ajoutez le fragment XML suivant à l’élément <RDLSandboxing> :

<Allow Namespace="System">Int32</Allow>  

Pour ajouter un type générique ou un type Nullable Visual Basic .NET Framework à la liste d’autorisation, procédez comme suit :

  • Créer un type de proxy pour le type Nullable générique ou Visual Basic .NET Framework.

  • Ajouter le type de proxy à la liste d’autorisation.

L'ajout d'un type à partir d’un assembly personnalisé à la liste d’autorisation n’accorde pas implicitement l’autorisation Exécuter sur l’assembly. Vous devez modifier spécifiquement le fichier de sécurité d'accès du code et fournir l'autorisation Exécuter à votre assembly. Pour plus d’informations, consultez Sécurité d’accès du code dans Reporting Services.

Maintenance de la liste de membres <Deny>

Lorsque vous ajoutez un nouveau type à la liste d’autorisation, vous utilisez la liste suivante pour déterminer quand vous devrez peut-être mettre à jour la liste de blocage de membres :

  • Lorsque vous mettez à jour un assembly personnalisé avec une version qui introduit de nouveaux types.

  • Lorsque vous ajoutez des membres aux types dans la liste d’autorisations.

  • Quand vous mettez à jour .NET Framework sur le serveur de rapports.

  • Quand vous effectuez une mise à niveau du serveur de rapports vers une version ultérieure de Reporting Services.

  • Lorsque vous mettez à jour un serveur de rapports pour gérer un schéma RDL ultérieur, car de nouveaux membres ont pu être ajoutés aux types RDL.

Utilisation des opérateurs et de Nouveau

Par défaut, les opérateurs de langage Visual Basic .NET Framework sont toujours autorisés, à l’exception de New. L’attribut AllowNew sur l’élément <Allow> contrôle l’opérateur New. D’autres opérateurs de langage, comme l’opérateur d’accesseur de collection ! par défaut et les macros de cast .NET Framework, comme CInt, sont toujours autorisés.

L’ajout d'opérateurs à une liste de blocage, y compris des opérateurs personnalisés, n’est pas pris en charge. Pour exclure des opérateurs pour un type, vous devez effectuer les actions suivantes :

  • Créer un type de proxy qui n'implémente pas les opérateurs que vous souhaitez exclure.

  • Ajouter le type de proxy à la liste d’autorisation.

Pour créer un tableau dans une expression RDL, créez le tableau dans une méthode sur une classe que vous définissez et ajoutez cette classe à la liste d’autorisation.

Pour créer un tableau dans une expression RDL, vous devez effectuer les actions suivantes :

  • Définir une nouvelle classe et créer le tableau dans une méthode sur cette classe.

  • Ajouter la classe à la liste d’autorisation.

Fichier de configuration RsReportServer.config
Journal de suivi de service du serveur de rapports

D’autres questions ? Essayez de poser une question dans le forum Reporting Services