Bestätigen von Berechtigungen in benutzerdefinierten Assemblys

Standardmäßig wird Code von benutzerdefinierten Assemblys mit dem eingeschränkten Berechtigungssatz Execution ausgeführt. In einigen Fällen möchten Sie möglicherweise eine benutzerdefinierte Assembly implementieren, die gesicherte Aufrufe von geschützten Ressourcen innerhalb Ihres Sicherheitssystems durchführt (z. B. eine Datei oder die Registrierung). Um dies zu erreichen, müssen Sie die folgenden Aktionen ausführen:

  1. Identifizieren Sie die genauen Berechtigungen, die der Code benötigt, um den gesicherten Aufruf zu machen. Wenn diese Methode Teil einer Microsoft .NET-Framework-Bibliothek ist, sollten diese Informationen in der Dokumentation der Methode enthalten sein.

  2. Ändern Sie die Dateien für die Berichtsserver-Richtlinienkonfiguration, um der benutzerdefinierten Assembly die erforderlichen Berechtigungen zu erteilen. Weitere Informationen zu den Konfigurationsdateien der Sicherheitsrichtlinie finden Sie unter Using Reporting Services Security Policy Files (Verwenden von Reporting Services-Sicherheitsrichtliniendateien).

  3. Erteilen Sie die erforderlichen Berechtigungen als ein Teil der Methode, in der der gesicherte Aufruf gemacht wird. Dies ist notwendig, da der vom Berichtsserver aufgerufene Code für die benutzerdefinierte Assembly ein Teil der Berichtsausdrucks-Hostassembly ist, die standardmäßig mit der Berechtigung Execution ausgeführt wird. Der Berechtigungssatz Execution besagt, dass Code ausgeführt werden kann, aber keine geschützten Ressourcen verwendet werden können.

  4. Markieren Sie die benutzerdefinierte Assembly mit AllowPartiallyTrustedCallersAttribute , wenn sie mit einem starken Namen signiert ist. Dies ist erforderlich, da benutzerdefinierte Assemblys aus einem Berichtausdruck aufgerufen werden, der Teil der Hostassembly des Berichtsausdrucks ist, der standardmäßig nicht "FullTrust" gewährt wird. Daher handelt es sich um einen "teilweise vertrauenswürdigen" Aufrufer. Weitere Informationen finden Sie unter Using Strong-Named Custom Assemblies (Verwenden von benutzerdefinierten Assemblys mit starken Namen).

Implementieren eines sicheren Anrufs

Sie können die Dateien für die Richtlinienkonfiguration ändern, um der Assembly bestimmte Berechtigungen zu erteilen. Wenn Sie beispielsweise eine benutzerdefinierte Assembly für die Währungsumrechnung schreiben, kann es nötig sein, dass die aktuellen Wechselkurse aus einer Datei gelesen werden müssen. Um die Rateinformationen abzurufen, müssen Sie Ihrer Berechtigungssatz für die Assembly eine zusätzliche Sicherheitsberechtigung hinzufügen, FileIOPermission. Sie können folgenden zusätzlichen Eintrag in der Datei für die Richtlinienkonfiguration vornehmen:

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

Sie fügen dann eine Codegruppe hinzu, die auf diesen Berechtigungssatz verweist:

<CodeGroup class="UnionCodeGroup"  
   version="1"  
   PermissionSetName="CurrencyRatesFilePermissionSet"  
   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\MSSQL\Reporting Services\ReportServer\bin\CurrencyConversion.dll"/>  
</CodeGroup>  

Damit Ihr Code die entsprechende Berechtigung erhält, müssen Sie diese Berechtigung im Code der benutzerdefinierten Assembly erteilen. Wenn Sie beispielsweise Lesezugriff zur XML-Datei, C:\CurrencyRates.xml, hinzufügen möchten, müssen Sie folgenden Code zu Ihrer Methode hinzufügen:

// C#  
FileIOPermission permission = new FileIOPermission(FileIOPermissionAccess.Read, @"C:\CurrencyRates.xml");  
try  
{  
   permission.Assert();  
   // Load the XML currency rates file  
   XmlDocument doc = new XmlDocument();  
   doc.Load(@"C:\CurrencyRates.xml");  
...  

Sie können diese Erteilung auch als Methodenattribut hinzufügen:

[FileIOPermissionAttribute(SecurityAction.Assert, Read=@"C:\CurrencyRates.xml")]  

Weitere Informationen finden Sie in der .NET Framework-Sicherheit im .NET Framework Developer's Guide.

Verwenden benutzerdefinierter Assemblys mit Berichten