Grundlegendes zu Sicherheitsrichtlinien

Jeder Code, den ein Berichtsserver ausführt, muss Teil einer bestimmten Codezugriffssicherheitsrichtlinie 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 bestimmt anhand von Beweisen, die von einem vertrauenswürdigen Host oder dem Ladeprogramm bereitgestellt werden, zu welchen Codegruppen der Code gehört und welche Berechtigungen ihm daher zuzuweisen sind. Reporting Services verwendet diese von der Microsoft .NET Framework-Common Language Runtime (CLR) definierte Sicherheitsrichtlinienarchitektur. In den nachfolgenden Abschnitten werden die verschiedenen Codetypen in Reporting Services sowie die damit verknüpften Richtlinienregeln aufgeführt.

Berichtsserverassemblys

Berichtsserverassemblys enthalten Code, der Teil des Reporting Services-Produkts ist. Reporting Services wurde mit verwalteten Codeassemblys geschrieben. Alle diese Assemblys verfügen über starke Namen (sind digital signiert). Die Codegruppen für diese Assemblys werden mit StrongNameMembershipCondition definiert, die Beweise auf der Grundlage des öffentlichen Schlüssels für den starken Namen der Assembly bereitstellen. Der Codegruppe werden die FullTrust-Berechtigungen 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 fullTrust diesen Erweiterungen oder Assemblycode in den Richtlinienkonfigurationsdateien erteilen, die der Reporting Services-Komponente zugeordnet sind, die Sie erweitern. Erweiterungen, die im Lieferumfang von Reporting Services enthalten sind, sind mit dem öffentlichen Schlüssel des Berichtsservers signiert und erhalten den FullTrust-Berechtigungssatz.

Wichtig

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 zu den 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. Es gibt eine Codegruppe, die bereits in den Richtliniendateien konfiguriert ist, die diesen Ausdrücken standardmäßig die Ausführungsberechtigung erteilt. Die Codegruppe sieht wie im folgenden Beispiel 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 erfordert die aktuelle Konfiguration für die meisten Ausdrücke keine Sicherheitsrichtliniendateien. Um zusätzliche Berechtigungen für Ausdruckshostassemblys zu erteilen, muss ein Administrator die Richtlinienkonfigurationsdateien des Berichtsservers und Berichts-Designer ändern und die Codegruppe für Berichtsausdrücke ändern. Da es sich um eine globale Einstellung ist, wirkt sich das Ändern von Standardberechtigungen für die Ausdruckshosts auf alle Berichte aus. Aus diesem Grund sollten Sie den gesamten Code platzieren, der zusätzliche Sicherheit in einer benutzerdefinierten Assembly erfordert. Nur dieser Assembly werden die erforderlichen Berechtigungen erteilt.

Wichtig

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.

Achtung

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

Benutzerdefinierte Assemblys, auf die in Berichten verwiesen wird

Einige Berichtsausdrücke können andere Codeassemblys aufrufen, auch in Reporting Services als benutzerdefinierte Assemblys bezeichnet. 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 bei Bedarf zusätzliche Berechtigungen für benutzerdefinierte Assemblys erteilen.

In einigen Fällen müssen Sie möglicherweise einen Vorgang ausführen, der bestimmte Codeberechtigungen in einem Berichtsausdruck erfordert. In der Regel bedeutet dieses Szenario, dass ein Berichtsausdruck einen Aufruf einer gesicherten CLR-Bibliotheksmethode ausführen muss (z. B. eine, die auf Dateien oder die Systemregistrierung zugreift). In der .NET Framework-Dokumentation werden die Codeberechtigungen beschrieben, die für diesen sicheren Aufruf erforderlich sind. Um den Aufruf auszuführen, muss der aufrufende Code diesen spezifischen, sicheren Berechtigungen erteilt 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 viel sicherer, den Aufruf aus einer benutzerdefinierten Assembly zu tätigen und dieser benutzerdefinierten Assembly die spezifischen Berechtigungen zu erteilen.