Freigeben über


Aktivieren und Deaktivieren von RDL-Sandkasten

Mithilfe der Sandkastenfunktion der RDL (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 möglicherweise auch 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.

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 im <RDLSandboxing> -Element in der RSReportServer.Config-Datei 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 RSReportServer.Config-Datei.

<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 Erlauben , das den Namespace darstellt, der mindestens einen gültigen Typ für Value enthält. Bei dieser Eigenschaft wird die Groß-/Kleinschreibung nicht beachtet.
AllowNew Hierbei handelt es sich um ein boolesches Attribut für Allow, mit dem gesteuert wird, ob neue Instanzen des Typs in RDL-Ausdrücken oder einem RDL-<Class>-Element erstellt werden dürfen.

Hinweis: Wenn RDLSandboxing 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 , 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 Für die Liste der Typen, die im <Typen> -Element enthalten sind, ist dies die Liste der Elementnamen, die nicht in RDL-Ausdrücken zugelassen sind.
Deny Der Name eines Elements, das nicht in RDL-Ausdrücken zugelassen wird. Bei dieser Eigenschaft wird die Groß-/Kleinschreibung nicht beachtet.

Hinweis: Wenn Deny für ein Element angegeben wird, werden alle Elemente mit diesem Namen für alle Typen nicht zugelassen.

Arbeiten mit Ausdrücken bei aktiviertem RDL-Sandboxing

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.

  • Mithilfe der RDL-Sandboxingfunktion können Sie eine Liste genehmigter Typen und eine Liste verweigerter Elemente erstellen. Die Liste der genehmigten Typen wird als Zulassungsliste bezeichnet. Die Liste der verweigerten Elemente wird als Sperrliste bezeichnet.

Hinweis

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

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, um auf RDL-Ausdrücke zuzugreifen:

  • Statische Elemente eines Typs.

  • Die Visual Basic-Methode New .

  • Das <Classes>-Element in der Berichtsdefinition

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

Die Zulassungsliste 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 Sperrliste enthalten sind. Standardmäßig werden alle Elemente aller Typen in der Zulassungsliste aktiviert. Wenn Sie der Sperrliste einen Elementnamen hinzufügen, verweigern Sie alle Elemente dieses Namens für alle Typen in der Zulassungsliste.

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

  • Fügen Sie ein <Verweigern> -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 Zulassungsliste diese neue Klasse hinzu.

Um der Zulassungsliste Visual Basic-Funktionen für .NET Framework hinzuzufügen, müssen Sie die entsprechenden Typen aus dem Namespace „Microsoft.VisualBasic“ zur Zulassungsliste hinzufügen.

Um der Zulassungsliste Visual Basic-Typschlüsselwörter für .NET Framework hinzuzufügen, müssen Sie der Zulassungsliste den entsprechenden CLR-Typ hinzufügen. Um beispielsweise die Visual Basic-.NET Framework Schlüsselwort (keyword) Integerzu verwenden, fügen Sie dem RDLSandboxing-Element> das< folgende XML-Fragment hinzu:

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

Um der Zulassungsliste einen generischen Visual Basic-Typ oder einen Visual Basic-Nullable-Typ für .NET Framework hinzuzufügen, müssen Sie folgende Aktionen 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 Zulassungsliste den Proxytyp hinzu.

Indem Sie einen Typ aus einer benutzerdefinierten Assembly der Zulassungsliste 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 <Ablehnungsliste> von Mitgliedern

Wenn Sie der Zulassungsliste einen neuen Typ hinzufügen, verwenden Sie die folgende Liste, um zu bestimmen, wann Sie die Sperrliste 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 Zulassungsliste 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 sind Visual Basic-.NET Framework-Sprachoperatoren mit Ausnahme von Newimmer zulässig. Der New Operator wird durch das AllowNew -Attribut für das <Allow-Element> gesteuert. Andere Sprachoperatoren, z. B. der Standardmäßige Sammlungsaccessoroperator ! und Visual Basic .NET Framework Umwandlungsmakros wie CInt, sind immer zulässig.

Das Hinzufügen von Operatoren, einschließlich benutzerdefinierter Operatoren, zu einer Sperrliste wird nicht unterstützt. Um Operatoren für einen Typ auszuschließen, gehen Sie wie folgt vor:

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

  • Fügen Sie der Zulassungsliste 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 Zulassungsliste diese Klasse hinzu.

Um in einem RDL-Ausdruck ein neues Array zu erstellen, gehen Sie wie folgt vor:

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

  • Fügen Sie der Zulassungsliste die Klasse hinzu.

Weitere Informationen

RSReportServer Configuration File
Report Server Service Trace Log (Berichtsserverdienst-Ablaufverfolgungsprotokoll)