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, über die ein Benutzer Zugriff erhält, sobald er sich auf dem Berichtsserver authentifiziert hat. 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. Dies wird durch die Sicherheitserweiterungsschnittstelle IAuthorizationExtension ermöglicht. Wie vorher angegeben, erben alle Erweiterungen von IExtension die Basisschnittstelle für jede Erweiterung, die Sie bereitstellen. IExtension und IAuthorizationExtension sind Elemente des Microsoft.ReportingServices.Interfaces-Namespace.

Zugriffsprüfung

Bei der Autorisierung besteht der Schlüssel zu jeder benutzerdefinierten Sicherheitsimplementierung in der Zugriffsprüfung, die in der Methode CheckAccess implementiert ist. CheckAccess wird jedes Mal aufgerufen, wenn ein Benutzer versucht, einen Vorgang auf dem Berichtsserver durchzuführen. Die Methode CheckAccess wird für jeden Vorgangstyp überladen. Für Ordnervorgänge könnte ein Beispiel für eine Zugriffsprüfung folgendermaßen 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 angegeben 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.

Sicherheitsbeschreibungen

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.

Autorisierungsablauf

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

Reporting Services-Sicherheitsautorisierungsfluss

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.