Grundlegendes zu Sicherheitsrichtlinien

Für SQL Server 2008 R2 hat es keine Änderungen am Inhalt gegeben, der in diesem Thema aufgeführt ist.

Jeder Code, der von einem Berichtsserver ausgeführt wird, muss Teil einer bestimmten Codezugriff-Sicherheitsrichtlinie sein. Diese Sicherheitsrichtlinien bestehen aus Codegruppen, die einem Satz von benannten Berechtigungen Beweise zuordnen. Häufig sind Codegruppen einem benannten Berechtigungssatz zugeordnet, der die zulässigen Berechtigungen für Code in dieser Gruppe angibt. Die Laufzeit verwendet von einem vertrauenswürdigen Host oder dem Ladeprogramm bereitgestellte Beweise, um zu bestimmen, welchen Codegruppen der Code angehört und welche Berechtigungen dem Code daher gewährt werden. Reporting Services richtet sich nach dieser Sicherheitsrichtlinien-Architektur, wie durch die Microsoft .NET Framework Common Language Runtime (CLR) definiert. In den nachfolgenden Abschnitten werden die verschiedenen Codetypen in Reporting Services sowie die damit verknüpften Richtlinienregeln aufgeführt.

Berichtsserverassemblys

Berichtsserverassemblys sind Assemblys, die den Code beinhalten, der Teil des Reporting Services-Produkts ist. Reporting Services wird mit verwalteten Codeassemblys geschrieben; alle diese Assemblys verwenden starke Namen (d. h. sind digital signiert). Die Codegruppen für diese Assemblys werden mit der StrongNameMembershipCondition definiert, die Beweise auf der Grundlage des öffentlichen Schlüssels für den starken Namen der Assembly bereitstellen. Der Codegruppe wird der FullTrust-Berechtigungssatz gewährt.

Berichtsservererweiterungen (Rendering, Daten, Übermittlung und Sicherheit)

Berichtsservererweiterungen sind benutzerdefinierte Erweiterungen für Daten, Übermittlung, Rendering und Sicherheit, die Sie selbst oder Drittanbieter zur Erweiterung der Funktionen von Reporting Services erstellen. Sie müssen diesen Erweiterungen oder dem Assemblycode in den Richtlinien-Konfigurationsdateien, die mit der zu erweiternden Reporting Services-Komponente verknüpft sind, FullTrust gewähren. Erweiterungen, die im Lieferumfang von Reporting Services enthalten sind, sind mit dem öffentlichen Schlüssel des Berichtsservers signiert und erhalten den FullTrust-Berechtigungssatz.

Wichtiger HinweisWichtig

Sie müssen die Reporting Services-Richtlinienkonfigurationsdateien ändern, um FullTrust für Erweiterungen von Drittanbietern zu gewähren. Wenn Sie den benutzerdefinierten Erweiterungen keine Codegruppe mit FullTrust hinzufügen, können sie nicht vom Berichtsserver verwendet werden.

Weitere Informationen über die Richtlinienkonfigurationsdateien in Reporting Services finden Sie unter Verwenden von Reporting Services-Sicherheitsrichtliniendateien.

In Berichten verwendete Ausdrücke

Berichtsausdrücke sind Inlinecodeausdrücke oder benutzerdefinierte Methoden im Code-Element einer Berichtsdefinitions-Sprachdatei. In den Richtliniendateien ist bereits eine Codegruppe definiert, die diesen Ausdrücken die standardmäßig festgelegte Berechtigung Execution gewährt. Die Codegruppe sieht wie folgt aus:

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

Die Berechtigung Execution lässt zu, dass Code ausgeführt werden kann, wobei jedoch keine geschützten Ressourcen verwendet werden können. Alle in einem Bericht gefundenen Ausdrücke werden in einer Assembly kompiliert ("Ausdruckshostassembly"), die als Teil des kompilierten Berichts gespeichert wird. Beim Ausführen des Berichts lädt der Berichtsserver die Ausdruckshostassembly und führt Aufrufe für diese Assembly zum Ausführen von Berechtigungen durch. Ausdruckshostassemblys werden mit einem bestimmten Schlüssel signiert, der zum Definieren der Codegruppe für alle Ausdruckshosts verwendet wird.

Berichtsausdrücke beziehen sich auf Berichtsobjekt-Modellauflistungen (Felder, Parameter usw.) und führen einfache Aufgaben wie arithmetische und Zeichenfolgenoperationen aus. Code, der diese einfachen Vorgänge ausführt, erfordert nur die Berechtigung Execution. Standardmäßig wird benutzerdefinierten Methoden im Code-Element und benutzerdefinierten Assemblys in Reporting Services die Berechtigung Execution gewährt. Daher muss bei den meisten Ausdrücken die aktuelle Konfiguration nicht in den Sicherheitsrichtliniendateien geändert werden. Um Ausdruckshostassemblys weitere Berechtigungen gewähren zu können, muss ein Administrator die Riechlinienkonfigurationsdateien des Berichtsservers und des Berichts-Designers anpassen sowie die Berichtsausdruck-Codegruppe ändern. Da es sich um eine globale Einsstellung handelt, wirkt sich eine Änderung der Standardberechtigungen für den Ausdruckshost auf alle Berichte aus. Aus diesem Grund wird empfohlen, jeglichen Code, der zusätzliche Sicherheit erfordert, in einer benutzerdefinierten Assembly zu speichern. Nur dieser Assembly werden die benötigten Berechtigungen gewährt.

SicherheitshinweisSicherheitshinweis

Code, der externe Assemblys oder geschützte Ressourcen aufruft, muss zur Verwendung in Berichten in eine benutzerdefinierte Assembly einbezogen werden. Auf diese Weise können Sie die vom Code angeforderten und durchgesetzten Berechtigungen besser steuern. Es sollten keine Aufrufe von sicheren Methoden im Code-Element erfolgen. Hierzu müssen Sie dem Berichtsausdruckshost FullTrust sowie dem gesamten benutzerdefinierten Code Vollzugriff auf die CLR gewähren.

VorsichtshinweisVorsicht

Gewähren Sie der Codegruppe für einen Berichtsausdruckshost keine FullTrust-Berechtigung. Ansonsten können alle Berichtsausdrücke geschützte Systemaufrufe ausführen.

In Berichten referenzierte benutzerdefinierte Assemblys

Einige Berichtsausdrücke können Codeassemblys von Drittanbietern aufrufen, die in Reporting Services auch als benutzerdefinierte Assemblys bezeichnet werden. Der Berichtsserver erwartet, dass diese Assemblys mindestens über die Berechtigung Execution in den Richtlinienkonfigurationsdateien verfügen. Standardmäßig gewähren die im Lieferumfang von Reporting Services enthaltenen Richtliniendateien allen Assemblys beginnend mit der Zone 'Arbeitsplatz' die Berechtigung Execution. Sie können benutzerdefinierten Assemblys nach Bedarf zusätzliche Berechtigungen gewähren.

In einigen Fällen müssen Sie einen Vorgang ausführen, der bestimmte Codeberechtigungen in einem Berichtsausdruck erfordert. In der Regel bedeutet dies, dass ein Berichtsausdruck einen Aufruf einer sicheren CLR-Bibliotheksmethode (z. B. einer Methode, die auf Dateien oder die Systemregistrierung zugreift) durchführen muss. In der Dokumentation zu .NET Framework werden die Codeberechtigungen beschrieben, die zum Durchführen dieses sicheren Aufrufs notwendig sind. Um den Aufruf ausführen zu können, müssen dem aufrufenden Code diese speziellen, sicheren Berechtigungen gewährt werden. Wenn Sie den Aufruf von einem Berichtsausdruck oder dem Code-Element aus durchführen, müssen der Ausdruckshostassembly die entsprechenden Berechtigungen gewährt werden. Nachdem Sie dem Ausdruckshost jedoch die Berechtigung gewährt haben, gilt diese spezielle Berechtigung für jeglichen Code, der in einem Ausdruck eines beliebigen Berichts ausgeführt wird. Es ist sicher, diesen Aufruf von einer benutzerdefinierten Assembly auszuführen und dieser benutzerdefinierten Assembly die speziellen Berechtigungen zuzuweisen.