Aktivieren und Deaktivieren von RDL-Sandkasten für Reporting Services im integrierten SharePoint-Modus

Gilt für: SQL Server Reporting Services (2016) SharePoint Not supported Power BI-Berichtsserver

Inhalt im Zusammenhang mit früheren Versionen von SQL Server Reporting Services (SSRS) finden Sie unter SQL Server 2014 Reporting Services.

Mithilfe der RDL-Sandkastenfunktion der (Report Definition Language, Berichtsdefinitionssprache) können Sie die Verwendung bestimmter Ressourcentypen durch einzelne Mandanten in einer Umgebung erkennen und einschränken, in der mehrere Mandanten eine einzelne Webfarm von Berichtsservern verwenden. Ein Beispiel hierfür ist ein Szenario mit einem Hostingdienst, in dem eine einzelne Webfarm mit Berichtsservern verwaltet wird, die von mehreren Mandanten und unterschiedlichen Firmen verwendet werden. Als Berichtsserveradministrator können Sie diese Funktion aktivieren, um die folgenden Zielsetzungen zu erreichen:

  • Beschränken der Größen externer Ressourcen. Externe Ressourcen sind Bilder, XSLT-Dateien und Kartendaten.

  • Beschränken der Typen und Elemente, die in Ausdruckstext verwendet werden, zum Veröffentlichungszeitpunkt des Berichts.

  • Beschränken der Länge des Texts und der Größe des Rückgabewerts für Ausdrücke zur Berichtsverarbeitungszeit.

Hinweis

Die Integration von Reporting Services in SharePoint ist nach SQL Server 2016 nicht mehr möglich.

Bei Aktivierung des RDL-Sandboxing werden die folgenden Funktionen deaktiviert:

  • Benutzerdefinierter Code im <Code>-Element einer Berichtsdefinition.

  • Der RDL-Abwärtskompatibilitätsmodus für benutzerdefinierte Berichtselemente von SQL Server Reporting Services 2005 (SSRS)

  • Benannte Parameter in Ausdrücken.

In diesem Artikel werden die einzelnen Elemente im <RDLSandboxing>-Element in der Datei „RSReportServer.Config“ beschrieben. Weitere Informationen zum Ändern dieser Datei finden Sie unter Ändern einer Reporting Services-Konfigurationsdatei (RSreportserver.config). In einem Server-Ablaufverfolgungsprotokoll werden Aktivitäten aufgezeichnet, die sich auf die RDL-Sandboxingfunktion beziehen. Weitere Informationen zu Ablaufverfolgungsprotokollen finden Sie unter Berichtsserverdienst-Ablaufverfolgungsprotokoll.

Beispielkonfiguration

Im folgenden Beispiel werden die Einstellungen und Beispielwerte für das <RDLSandboxing>-Element in der Datei „RSReportServer.Config“ veranschaulicht.

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

Konfigurationseinstellungen

Die folgende Tabelle enthält Informationen zu Konfigurationseinstellungen. Diese Einstellungen werden in der Reihenfolge aufgeführt, in der sie in der Konfigurationsdatei angezeigt werden.

Einstellung BESCHREIBUNG
MaxExpressionLength Maximale Anzahl von Zeichen, die in RDL-Ausdrücken zugelassen sind.

Standardwert: 1000
MaxResourceSize Maximale Anzahl von KB, die für eine externe Ressource zugelassen sind.

Standardwert: 100
MaxStringResultLength Maximale Anzahl von Zeichen, die für einen Rückgabewert für einen RDL-Ausdruck zugelassen sind.

Standardwert: 1000
MaxArrayResultLength Maximale Anzahl von Elementen, die für einen Rückgabewert vom Typ "Array" für einen RDL-Ausdruck zugelassen sind.

Standardwert: 100
Typen Die Liste der Elemente, die innerhalb von RDL-Ausdrücken zugelassen sind.
Zulassen Ein Typ oder ein Satz von Typen, die in RDL-Ausdrücken zugelassen sind.
Namespace Attribut für Allow, das den Namespace darstellt, der mindestens einen gültigen Typ für Wert enthält. Bei dieser Eigenschaft wird die Groß-/Kleinschreibung nicht beachtet.
AllowNew Boolesches Attribut für Allow, mit dem gesteuert wird, ob neue Instanzen des Typs in RDL-Ausdrücken oder in einem RDL <Klassen>-Element zulässig sind.

Wenn RDLSandboxing aktiviert ist, können in RDL-Ausdrücken keine neuen Arrays erstellt werden, unabhängig von der Einstellung von AllowNew.
Wert Wert für Allow, der den Namen des in RDL-Ausdrücken zuzulassenden Typs angibt. Der Wert * gibt an, dass alle Typen im Namespace zugelassen werden. Bei dieser Eigenschaft wird die Groß-/Kleinschreibung nicht beachtet.
Mitglieder Wert für die Liste der Typen im <Types>-Element und die Liste der Elementnamen, die in RDL-Ausdrücken nicht zugelassen sind.
Deny (Verweigern) Der Name eines Elements, das in RDL-Ausdrücken nicht zugelassen ist. Bei dieser Eigenschaft wird die Groß-/Kleinschreibung nicht beachtet.

Wenn Deny für ein Element angegeben wird, werden alle Elemente mit diesem Namen für keinen Typ zugelassen.

Arbeiten mit Ausdrücken bei aktiviertem RDL-Sandkasten

Sie können die RDL-Sandboxingfunktion auf die folgenden Weisen ändern, um die von einem Ausdruck verwendeten Ressourcen zu verwalten:

  • Schränken Sie die Anzahl von Zeichen ein, die für einen Ausdruck verwendet werden.

  • Schränken Sie die Größe des Ergebnisses ein, das von einem Ausdruck zurückgegeben wird.

  • Lassen Sie eine bestimmte Liste von Typen zu, die in einem Ausdruck verwendet werden können.

  • Schränken Sie die Liste der Elemente anhand ihrer Namen für die Liste von zulässigen Typen ein, die in einem Ausdruck verwendet werden können.

  • Die RDL-Sandboxingfunktio ermöglicht es Ihnen, eine Liste der zulässigen Dateitypen und eine Liste der verweigerten Mitglieder zu erstellen. Die Liste der zulässigen Typen wird als Zulassungsliste bezeichnet. Die Liste der verweigerten Elemente wird als Blockliste bezeichnet.

Hinweis

In der Berichtsdefinition ist der Typ der einzelnen Instanzen eines Ausdrucksverweises nicht angegeben. Wenn Sie der Blockliste ein Element hinzufügen, verweigern Sie alle Elemente dieses Namens für alle Typen in der Positivliste.

Ergebnisse von RDL-Ausdrücken werden zur Laufzeit überprüft. RDL-Ausdrücke werden in die Berichtsdefinition überprüft, wenn der Bericht veröffentlicht wird. Überwachen Sie das Ablaufverfolgungsprotokoll des Berichtsservers auf Verstöße. Weitere Informationen finden Sie unter Report Server Service Trace Log.

Arbeiten mit Typen

Wenn Sie der Positivliste einen Typ hinzufügen, steuern Sie die folgenden Einstiegspunkte für den Zugriff auf RDL-Ausdrücke:

  • Statische Elemente eines Typs.

  • Die „New“-Methode in Visual Basic.

  • Das <Classes>-Element in der Berichtsdefinition.

  • Elemente, die Sie der Blockliste für einen Typ in der Positivliste hinzugefügt haben.

Die Positivliste steuert die folgenden Einstiegspunkte nicht:

  • Berichtsdatasets. Felder in Berichtsdatasets, die von Abfragen zurückgegeben werden, können jeden gültigen RDL-Typ enthalten.

  • Berichtsparameter. Vom Benutzer bereitgestellte Parameterwerte könnten jeden gültigen RDL-Typ enthalten.

  • Elemente eines aktivierten Typs, die nicht in der Blockliste enthalten sind. Standardmäßig werden alle Elemente aller Typen in der Positivliste aktiviert. Wenn Sie der Blockliste einen Elementnamen hinzufügen, verweigern Sie alle Elemente dieses Namens für alle Typen in der Positivliste.

Um ein Element eines Typs zu aktivieren, aber ein Element mit dem gleichen Namen für einen anderen Typ zu verweigern, müssen Sie wie folgt vorgehen:

  • Fügen Sie ein <Deny>-Element für den Elementnamen hinzu.

  • Erstellen Sie ein Proxyelement mit einem anderen Namen für eine Klasse in einer benutzerdefinierten Assembly für das Element, das Sie aktivieren möchten.

  • Fügen Sie der Positivliste diese neue Klasse hinzu.

Um der Positivliste Microsoft.VisualBasic-Funktionen für .NET Framework hinzuzufügen, fügen Sie die entsprechenden Typen aus dem Namespace zur Positivliste hinzu.

Um der Positivliste Visual Basic-Typschlüsselwörter für .NET Framework hinzuzufügen, müssen Sie der Positivliste den entsprechenden CLR-Typ hinzufügen. Fügen Sie dem <RDLSandboxing>-Element das folgende XML-Fragment hinzu, um beispielsweise das Visual Basic-Schlüsselwort Integer für .NET Framework zu verwenden:

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

Um der Positivliste einen generischen Visual Basic-Typ oder einen Visual Basic-Nullable-Typ für .NET Framework hinzuzufügen, müssen Sie wie folgt vorgehen:

  • Erstellen Sie einen Proxytyp für den generischen Visual Basic-Typ oder Visual Basic-Nullable-Typ für .NET Framework.

  • Fügen Sie der Positivliste den Proxytyp hinzu.

Indem Sie einen Typ aus einer benutzerdefinierten Assembly der Positivliste hinzufügen, gewähren Sie nicht implizit die Ausführungsberechtigung für die Assembly. Sie müssen die Codezugriffs-Sicherheitsdatei spezifisch ändern und die Ausführungsberechtigung für die Assembly bereitstellen. Weitere Informationen finden Sie unter Code Access Security in Reporting Services.

Verwalten der <Deny>-Liste von Elementen

Wenn Sie der Positivliste einen neuen Typ hinzufügen, verwenden Sie die folgende Liste, um zu bestimmen, wann Sie die Blockliste von Elementen möglicherweise aktualisieren müssen:

  • Wenn Sie eine benutzerdefinierte Assembly mit einer Version aktualisieren, in der neue Typen eingeführt werden.

  • Wenn Sie den Typen in der Positivliste Elemente hinzufügen.

  • Wenn Sie das .NET Framework auf dem Berichtsserver aktualisieren

  • Wenn Sie den Berichtsserver auf eine höhere Version der Reporting Services upgraden

  • Wenn Sie einen Berichtsserver aktualisieren, um ein späteres RDL-Schema verarbeiten zu können, da RDL-Typen möglicherweise neue Elemente hinzugefügt wurden.

Arbeiten mit Operatoren und „New“

Standardmäßig werden Visual Basic-Sprachoperatoren für .NET Framework (mit Ausnahme von New) immer zugelassen. Das Attribut AllowNew für das <Allow>-Element steuert den New-Operator. Andere Sprachoperatoren, wie z. B. der Standard-Sammlungsaccessoroperator ! und Visual Basic-Umwandlungsmakros für .NET Framework (z. B. CInt), werden immer zugelassen.

Das Hinzufügen von Operatoren, einschließlich benutzerdefinierter Operatoren, zu einer Blockliste wird nicht unterstützt. Gehen Sie zum Ausschließen von Operatoren für einen Typ wie folgt vor:

  • Erstellen Sie einen Proxytyp, der die auszuschließenden Operatoren nicht implementiert.

  • Fügen Sie der Positivliste den Proxytyp hinzu.

Um in einem RDL-Ausdruck ein neues Array zu erstellen, erstellen Sie das Array in einer Methode für eine Klasse, die Sie definieren, und fügen Sie der Positivliste diese Klasse hinzu.

Gehen Sie zum Erstellen eines neuen Arrays in einem RDL-Ausdruck wie folgt vor:

  • Definieren Sie eine neue Klasse, und erstellen Sie das Array in einer Methode für diese Klasse.

  • Fügen Sie der Positivliste die Klasse hinzu.

RsReportServer.config-Konfigurationsdatei
Berichtsserverdienst-Ablaufverfolgungsprotokoll

Haben Sie dazu Fragen? Stellen Sie eine Frage im Reporting Services-Forum