Freigeben über


Bestätigen von Berechtigungen in benutzerdefinierten Assemblys

Standardmäßig wird benutzerdefinierter Assemblycode mit dem eingeschränkten Ausführungsberechtigungssatz 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 Schritte ausführen:

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

  2. Ändern Sie die Konfigurationsdateien der Berichtsserverrichtlinie, um der benutzerdefinierten Assembly die erforderlichen Berechtigungen zu erteilen. Weitere Informationen zu den Konfigurationsdateien für Sicherheitsrichtlinien finden Sie unter Verwenden von Reporting Services-Sicherheitsrichtliniendateien.

  3. Bestätigen Sie die erforderlichen Berechtigungen als Teil der Methode, in der der sichere Aufruf erfolgt. Dies ist erforderlich, da der benutzerdefinierte Assemblycode, der vom Berichtsserver aufgerufen wird, Teil der Berichtsausdruck-Hostassembly ist, die standardmäßig mit Ausführungsberechtigung ausgeführt wird. Der Ausführungsberechtigungssatz ermöglicht die Ausführung von Code, aber nicht die Verwendung geschützter Ressourcen.

  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 Verwenden von Strong-Named benutzerdefinierten Assemblys.

Implementieren eines sicheren Anrufs

Sie können die Richtlinienkonfigurationsdateien ändern, um Ihrer Assembly spezifische Berechtigungen zu erteilen. Wenn Sie beispielsweise eine benutzerdefinierte Assembly zum Behandeln der Währungsumrechnung schreiben, müssen Sie möglicherweise die aktuellen Wechselkurse aus einer Datei lesen. Um die Rateinformationen abzurufen, müssen Sie ihrer Berechtigungssatz für die Assembly eine zusätzliche Sicherheitsberechtigung hinzufügen, FileIOPermission. Sie können den folgenden zusätzlichen Eintrag in der Richtlinienkonfigurationsdatei 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>  

Anschließend fügen Sie 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 die Berechtigung in Ihrem benutzerdefinierten Assemblycode bestätigen. Wenn Sie beispielsweise schreibgeschützten Zugriff auf eine XML-Datei C:\CurrencyRates.xmlhinzufügen möchten, müssen Sie der Methode den folgenden Code 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 die Assertion auch als Methodenattribute hinzufügen:

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

Weitere Informationen finden Sie unter ".NET Framework Security" im .NET Framework Developer's Guide.

Siehe auch

Verwenden benutzerdefinierter Assemblys mit Berichten