Autorisierung in Reporting Services

Unter Autorisierung versteht man den Prozess der Beurteilung, ob einer Identität die angeforderte Zugriffsart auf eine bestimmte Ressource in der Berichtsserver-Datenbank erteilt wird. Reporting Services verwendet eine Autorisierungarchitektur auf Rollenbasis, bei der ein Benutzer Zugriff auf eine bestimmte Rolle ausgehend von der Rollenzuweisung für die Anwendung erhält. Sicherheitserweiterungen für Reporting Services enthalten eine Implementierung einer Autorisierungskomponente, die verwendet wird, um Benutzern zugriff zu gewähren, sobald sie auf dem Berichtsserver authentifiziert wurden. Die Autorisierung wird gestartet, wenn ein Benutzer versucht, einen Vorgang im System oder auf einem Berichtsserverelement über die SOAP-API und den URL-Zugriff auszuführen. Dieses Szenario wird über die Sicherheitserweiterungsschnittstelle IAuthorizationExtension2 ermöglicht. Wie vorher angegeben, erben alle Erweiterungen von IExtension die Basisschnittstelle für jede Erweiterung, die Sie bereitstellen. IExtension und IAuthorizationExtension2 sind Elemente des Microsoft.ReportingServices.Interfaces-Namespace.

Zugriff prüfen

Bei der Autorisierung ist der Schlüssel für jede benutzerdefinierte Implementierung der Sicherheit die in der CheckAccess-Methode implementierte Zugriffsüberprüfung. CheckAccess wird immer aufgerufen, wenn ein Benutzer versucht, auf dem Berichtsserver einen Vorgang auszuführen. Die Methode CheckAccess wird für jeden Vorgangstyp überladen. Bei Ordnervorgängen könnte ein Beispiel für eine Zugriffsüberprüfung wie das folgende Beispiel aussehen:

// Overload for Folder operations  
public bool CheckAccess(  
   string userName,   
   IntPtr userToken,   
   byte[] secDesc,   
   FolderOperation requiredOperation)  
{  
   // If the user is the administrator, allow unrestricted access.  
   if (userName == m_adminUserName)   
      return true;  
  
   AceCollection acl = DeserializeAcl(secDesc);  
   foreach(AceStruct ace in acl)  
   {  
         if (userName == ace.PrincipalName)  
         {  
            foreach(FolderOperation aclOperation in   
               ace.FolderOperations)  
            {  
               if (aclOperation == requiredOperation)  
                     return true;  
            }  
         }  
   }  
   return false;  
}  

Der Berichtsserver ruft die Methode CheckAccess auf, indem der Name des angemeldeten Benutzers, ein Benutzertoken, die Sicherheitsbeschreibung für das Element und der angeforderte Vorgang übergeben werden. Hier würden Sie die Sicherheitsbeschreibung auf den Benutzernamen und die entsprechende Berechtigung zur Durchführung der Anforderung überprüfen, dann würden Sie mit true anzeigen, dass der Zugriff erteilt wird, oder mit false , dass der Zugriff verweigert wird.

Sicherheitsdeskriptoren

Wenn Sie Autorisierungsrichtlinien für Elemente in der Berichtsserver-Datenbank festlegen, gibt eine Clientanwendung (z. B. der Berichts-Manager) die Benutzerinformationen an die Sicherheitserweiterung weiter, zusammen mit einer Sicherheitsrichtlinie für das Element. Die Sicherheitsrichtlinie und die Benutzerinformationen werden zusammen als Sicherheitsbeschreibung bezeichnet. Eine Sicherheitsbeschreibung enthält die folgenden Informationen für ein Element in der Berichtsserver-Datenbank:

  • Gruppe oder Benutzer, der eine bestimmte Berechtigung hat, Vorgänge in dem Element auszuführen.

  • Elementtyp.

  • Eine freigegebene Zugriffssteuerungsliste, die den Zugriff auf das Element kontrolliert.

Sicherheitsbeschreibungen werden mit den Webdienstmethoden SetPolicies und SetSystemPolicies erstellt.

Autorisierungsfluss

Die Reporting Services-Autorisierung wird von der Sicherheitserweiterung gesteuert, die derzeit für die Ausführung auf dem Server konfiguriert ist. Die Autorisierung ist rollenbasiert und auf die Berechtigungen und Vorgänge beschränkt, die von der Reporting Services-Sicherheitsarchitektur bereitgestellt werden. Das folgende Diagramm veranschaulicht den Prozess der Autorisierung von Benutzern für die Bearbeitung von Elementen in der Berichtsserver-Datenbank:

Screenshot of the Reporting Services security authorization flow.

Wie in diesem Diagramm angezeigt, befolgt die Autorisierung diese Reihenfolge:

  1. Sobald die Clientanwendungen authentifiziert sind, stellen sie über die Webdienstmethoden der Reporting Services Anforderungen an den Berichtsserver. Ein Authentifizierungsticket wird in Form eines Cookies im HTTP-Header jeder Webanforderung weitergeleitet.

  2. Das Cookie wird vor jeder Zugriffsprüfung überprüft.

  3. Sobald das Cookie überprüft wird, ruft der Berichtsserver GetUserInfo auf, und dem Benutzer wird eine Identität gegeben.

  4. Der Benutzer versucht, einen Vorgang über den Reporting Services-Webdienst auszuführen.

  5. Der Berichtsserver ruft die Methode CheckAccess auf.

  6. Die Sicherheitsbeschreibung wird abgerufen und an eine benutzerdefinierte Sicherheitserweiterungsimplementierung von CheckAccess übergeben. Zu diesem Zeitpunkt wird der Benutzer, die Gruppe oder der Computer mit der Sicherheitsbeschreibung des Elements verglichen, auf das gerade ein Zugriff erfolgt. Danach erfolgt die Autorisierung zur Durchführung des angeforderten Vorgangs.

  7. Wenn der Benutzer autorisiert ist, führt der Webdienst den Vorgang durch und gibt eine Antwort an die aufrufende Anwendung zurück.