Freigeben über


Aktivieren und Deaktivieren von RDL-Sandboxing

Mit dem RDL-Sandkastenfeature (Berichtsdefinitionssprache) können Sie die Verwendung bestimmter Ressourcentypen nach einzelnen Mandanten in einer Umgebung mehrerer Mandanten erkennen und einschränken, die eine einzelne Webfarm von Berichtsservern verwenden. Ein Beispiel hierfür ist ein Hosting-Szenario, in dem Sie eine einzelne Webfarm mit Berichtsservern verwalten, die von mehreren Mandanten und vielleicht auch von unterschiedlichen Unternehmen 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.

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 Thema werden die einzelnen Elemente des <RDLSandboxing>-Elements 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

Das folgende Beispiel zeigt die Einstellungen und Beispielwerte für das <RDLSandboxing> Element in der Datei 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>  

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.

Konfiguration 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.
Erlauben Ein Typ oder ein Satz von Typen, die in RDL-Ausdrücken zugelassen sind.
Namespace Attribut für Allow ist der Namespace, der einen oder mehrere Typen enthält, die für Value gelten. Bei dieser Eigenschaft wird die Groß-/Kleinschreibung nicht beachtet.
AllowNew Boolesches Attribut für Allow , das steuert, ob neue Instanzen des Typs in RDL-Ausdrücken oder in einem RDL <Class-Element> erstellt werden dürfen.

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

Hinweis: Wenn "Verweigern" für ein Mitglied angegeben wird, sind alle Member mit diesem Namen für alle Typen nicht zulässig.

Arbeiten mit Ausdrücken, wenn RDL-Sandkasten aktiviert ist

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 genehmigten Typen wird als Zulassungsliste bezeichnet. Die Liste der abgelehnten Mitglieder wird als Blockliste bezeichnet.

Hinweis

In der Berichtsdefinition ist der Typ der einzelnen Instanzen eines Ausdrucksverweises nicht angegeben. Wenn Sie der Sperrliste ein Mitglied hinzufügen, verweigern Sie sämtliche Mitglieder mit diesem Namen in der Zulassungsliste, unabhängig von ihrem Typ.

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 Zulassungsliste einen Typ hinzufügen, steuern Sie die folgenden Einstiegspunkte für den Zugriff auf RDL-Ausdrücke:

  • Statische Elemente eines Typs.

  • Die Visual Basic-Methode New .

  • Das Classes-Element<> in der Berichtsdefinition.

  • Mitglieder, die Sie der Sperrliste für einen Typ in der Zulassungsliste hinzugefügt haben.

Die Allowlist kontrolliert nicht die folgenden Einstiegspunkte:

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

  • Mitglieder eines aktivierten Typs, die sich nicht in der Ausschlussliste befinden. Standardmäßig sind alle Mitglieder aller Typen in der Zulassungsliste aktiviert. Wenn Sie einen Mitgliedsnamen zur Sperrliste hinzufügen, verweigern Sie allen Mitgliedern mit diesem Namen den Zugriff auf alle Typen, die sich in der Zulassungsliste befinden.

Um ein Mitglied eines Typs zu aktivieren, aber ein Mitglied mit demselben Namen für einen anderen Typ zu verweigern, müssen Sie die folgenden Schritte ausführen:

  • Fügen Sie ein <Deny-Element> für den Membernamen 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 diese neue Klasse zur Zulassungsliste hinzu.

Um der Zulassungsliste Visual Basic .NET Framework-Funktionen hinzuzufügen, fügen Sie der Zulassungsliste die entsprechenden Typen aus dem Microsoft.VisualBasic-Namespace hinzu.

Um der Zulassungsliste Schlüsselwörter vom Typ Visual Basic .NET Framework hinzuzufügen, fügen Sie der Zulassungsliste den entsprechenden CLR-Typ hinzu. Um zum Beispiel das Visual Basic .NET Framework-Schlüsselwort Integer zu verwenden, fügen Sie dem Element <RDLSandboxing> das folgende XML-Fragment hinzu:

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

Wenn Sie der Zulassungsliste einen generischen oder einen Visual Basic .NET Framework-nullbaren Typ hinzufügen möchten, müssen Sie die folgenden Schritte ausführen:

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

  • Fügen Sie der Erlaubnisliste den Proxytyp hinzu.

Das Hinzufügen eines Typs aus einer benutzerdefinierten Assembly zur Zulassungsliste gewährt 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 <Sperrliste> für Mitglieder

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

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

  • Wenn Sie die Mitglieder zu den Typen in der Erlaubnisliste 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 "Neu"

Standardmäßig werden Visual Basic-Sprachoperatoren für .NET Framework (mit Ausnahme von New) immer zugelassen. Der New Operator wird vom AllowNew Attribut für das <Allow-Element> gesteuert. Andere Sprachoperatoren, z. B. der Standardzugriffsoperator ! für Auflistungen und Visual Basic .NET Framework-Umwandlungsmakros wie CInt, sind immer zulässig.

Das Hinzufügen von Operatoren zu einer Blockliste, einschließlich benutzerdefinierter Operatoren, wird nicht unterstützt. Um Operatoren für einen Typ auszuschließen, müssen Sie die folgenden Schritte ausführen:

  • Erstellen Sie einen Proxytyp, der die operatoren, die Sie ausschließen möchten, nicht implementiert.

  • Fügen Sie der Zulassungsliste den Proxytyp hinzu.

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

Zum Erstellen eines neuen Arrays in einem RDL-Ausdruck müssen Sie die folgenden Schritte ausführen:

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

  • Fügen Sie die Klasse zur Freigabeliste hinzu.

Siehe auch

RSReportServer-Konfigurationsdatei
Report Server Service Trace Log (Berichtsserverdienst-Ablaufverfolgungsprotokoll)