Codezugriffssicherheit in Reporting Services

Die Codezugriffssicherheit dreht sich um diese Kernbegriffe: Beweise, Codegruppen und benannte Berechtigungssätze. In Reporting Services verfügen der Berichts-Manager, Berichts-Designer und die Berichtsserverkomponenten über eine Richtliniendatei, die die Codezugriffssicherheit für benutzerdefinierte Assemblys konfiguriert. Diese Richtliniendatei konfiguriert auch den Codezugriff für Daten-, Übermittlungs-, Rendering- und Sicherheitserweiterungen. Die folgenden Abschnitte enthalten eine Übersicht über die Codezugriffssicherheit. Ausführlichere Informationen zu den Artikeln, die in diesem Abschnitt behandelt werden, finden Sie unter "Sicherheitsrichtlinienmodell" in der Dokumentation zum Microsoft .NET Framework SDK.

Reporting Services verwendet Codezugriffssicherheit, da der Berichtsserver zwar auf ASP.NET Technologie basiert, aber es gibt einen wesentlichen Unterschied zwischen einer typischen ASP.NET Anwendung und dem Berichtsserver. Eine typische ASP.NET Anwendung führt keinen Benutzercode aus. Im Gegensatz dazu verwendet Reporting Services eine offene und erweiterbare Architektur, die Benutzern die Programmierung anhand der Berichtsdefinitionsdateien und des Code-Elements der Berichtsdefinitionssprache sowie die Entwicklung spezifischer Funktionen in einer benutzerdefinierten Assembly für die Verwendung in Berichten ermöglicht. Weiterhin können Entwickler leistungsstarke Erweiterungen entwerfen und bereitstellen, die die Funktionen des Berichtsservers verbessern. Diese Leistungsfähigkeit und Flexibilität bietet die Notwendigkeit, so viel Schutz und Sicherheit wie möglich zu bieten.

Reporting Services-Entwickler können eine beliebige .NET Framework-Assembly in ihren Berichten verwenden und alle Funktionen der Assemblys abrufen, die für den globalen Assemblycache bereitgestellt wurden. Der Berichtsserver kann lediglich steuern, welche Berechtigungen für Berichtsausdrücke und geladene benutzerdefinierte Assemblys gelten. In Reporting Services erhalten benutzerdefinierte Assemblys standardmäßig nur Berechtigungen zum Ausführen.

Beweise

Beweise sind Informationen, die die Common Language Runtime (CLR) zum Ermitteln einer Sicherheitsrichtlinie für Codeassemblys verwendet. Beweise geben der Laufzeit an, dass der Code ein bestimmtes Merkmal besitzt. Zu üblichen Formen von Beweisen zählen digitale Signaturen und der Speicherort einer Assembly. Beweise können auch benutzerdefiniert sein, um andere Informationen darzustellen, die für die Anwendung sinnvoll sind.

Sowohl Assemblys als auch Anwendungsdomänen werden Berechtigungen auf der Grundlage von Beweisen gewährt. Der Speicherort einer Assembly, auf die Reporting Services versucht zuzugreifen, ist eine übliche Form des Beweises für Assemblys mit schwachen Namen. Dieses Beispiel wird als URL-Nachweis bezeichnet. URL-Nachweise für eine benutzerdefinierte Datenverarbeitungserweiterung, die auf einem Berichtsserver bereitgestellt wird, kann sein C:\Program Files\Microsoft SQL Server\MSRS10_50.MSSQLSERVER\Reporting Services\ReportServer\bin\Microsoft.Samples.ReportingServices.FsiDataExtension.dll. Der starke Name oder die digitale Signatur einer Assembly ist eine andere übliche Form für einen Beweis. In diesem Fall ist der Beweis der öffentliche Schlüssel für eine Assembly.

Codegruppen

Eine Codegruppe ist eine logische Gruppierung von Code mit einer angegebenen Bedingung für die Mitgliedschaft. Jeglicher Code, der die Mitgliedschaftsbedingung erfüllt, ist in der Gruppe enthalten. Administratoren konfigurieren eine Sicherheitsrichtlinie durch Verwaltung von Codegruppen und ihren zugeordneten Berechtigungssätzen.

Eine Mitgliedschaftsbedingung für eine Codegruppe basiert auf Beweisen. Zum Beispiel basiert eine URL-Mitgliedschaft für eine Codegruppe auf URL-Beweisen. Die Common Language Runtime (CLR) verwendet beschreibende Merkmale, wie z. B. URL-Beweise, mit denen Code beschrieben wird und ermittelt wird, ob die Bedingungen einer Gruppenmitgliedschaft erfüllt werden. Die Mitgliedschaftsbedingung für eine Codegruppe ist z. B. "Code in der Assembly C:\Programme\Microsoft SQL Server\MSRS10_50.MSSQLSERVER\Reporting Services\ReportServer\bin\Microsoft.Samples.ReportingServices.FsiDataExtension.dll". Die Laufzeit untersucht die Beweise, um zu ermitteln, ob der Code aus diesem Speicherort stammt. Ein Beispiel für einen Konfigurationseintrag für diesen Codegruppentyp könnte wie im folgenden Beispiel aussehen:

<CodeGroup class="UnionCodeGroup"  
   version="1"  
   PermissionSetName="FullTrust"  
   Name="MyCodeGroup"  
   Description="Code group for my data processing extension">  
      <IMembershipCondition class="UrlMembershipCondition"  
         version="1"  
         Url="C:\Program Files\Microsoft SQL Server\MSRS10_50.MSSQLSERVER\Reporting Services\ReportServer\bin\Microsoft.Samples.ReportingServices.FsiDataExtension.dll"  
       />  
</CodeGroup>  

Sie sollten mit Ihrem Systemadministrator oder Experten für die Anwendungsbereitstellung zusammenarbeiten, um den Typ der Codezugriffssicherheit und Codegruppen zu ermitteln, die für Ihre benutzerdefinierten Assemblys oder Reporting Services-Erweiterungen erforderlich sind.

Benannte Berechtigungssätze

Ein benannter Berechtigungssatz ist ein Satz von Berechtigungen, den Administratoren einer Codegruppe zuordnen können. Die meisten benannten Berechtigungssätze bestehen aus mindestens einer Berechtigung, einem Namen und einer Beschreibung für den Berechtigungssatz. Administratoren können benannte Berechtigungssätze verwenden, um die Sicherheitsrichtlinien für Codegruppen zu erstellen oder zu ändern. Es ist möglich, einen benannten Berechtigungssatz mehreren Codegruppen zuzuordnen. Die CLR stellt integrierte benannte Berechtigungssätze wie Nothing, Execution, Internet, LocalIntranet, Everything und FullTrust bereit.

Hinweis

Benutzerdefinierte Daten, Übermittlung, Rendering und Sicherheitserweiterungen in Reporting Services müssen unter dem FullTrust-Berechtigungssatz ausgeführt werden. Arbeiten Sie mit Ihrem Systemadministrator zusammen, um die geeigneten Codegruppen- und Mitgliedschaftsbedingungen für Ihre Reporting Services-Erweiterungen hinzuzufügen.

Sie können Ihre eigenen benutzerdefinierten Ebenen von Berechtigungen benutzerdefinierten Assemblys zuordnen, die Sie mit Berichten verwenden. Wenn Sie z. B. möchten, dass eine Assembly auf eine bestimmte Datei zugreift, können Sie einen neuen benannten Berechtigungssatz mit einem bestimmten Datei-E/A-Zugriff erstellen und den Berechtigungssatz dann Ihrer Codegruppe zuordnen. Der folgende Berechtigungssatz gewährt schreibgeschützten Zugriff auf die Datei MyFile.xml:

<PermissionSet class="NamedPermissionSet"  
   version="1"  
   Name="MyNewFilePermissionSet"  
   Description="A special permission set that grants read access to my file.">  
    <IPermission class="FileIOPermission"  
       version="1"  
       Read="C:\MyFile.xml"/>  
    <IPermission class="SecurityPermission"  
       version="1"  
       Flags="Assertion, Execution"/>  
</PermissionSet>  

Eine Codegruppe, die Sie diesem Berechtigungssatz erteilen, könnte wie im folgenden Beispiel aussehen:

<CodeGroup class="UnionCodeGroup"  
   version="1"  
   PermissionSetName="MyNewFilePermissionSet"  
   Name="MyNewCodeGroup"  
   Description="A special code group for my custom assembly.">  
   <IMembershipCondition class="UrlMembershipCondition"  
      version="1"  
      Url="C:\Program Files\Microsoft SQL Server\MSRS10_50.MSSQLSERVER\Reporting Services\ReportServer\bin\MyCustomAssembly.dll"/>  
</CodeGroup>