2016-04-15 15 views
2

Ich verwende Visual Studio 2013 (C#) und SSAS 2014 (über AMO). Ich muss eine Liste der Berechtigungen eines bestimmten Benutzers in der SSAS-Datenbank vorbereiten. Zum Beispiel hat domainName \ userName Berechtigungen für die 2 von 5 verfügbaren Dimensionen in der Datenbank. Ich möchte eine solche Liste vorbereiten.Was ist der beste Weg, um die vollständige Liste der Berechtigungen eines bestimmten Benutzers mit AMO in C#

Dimensionsname | Attribute | Dimension in Cube | VisualTotal | Mdx Set (falls vorhanden) | Rollenname

Ich kann durch Rollen und Mitglieder durchlaufen und einige Informationen erhalten. Aber es scheint, dass es eine lange Schuß ist und in der Produktionsumgebung nicht leistungsfreundlich sein wird. Jeder Rat wird sehr geschätzt!

Antwort

1

Endlich kann ich dies mit AMO erreichen. Hier ist, was ich getan habe, um das zu lösen. Im Folgenden wird der Code ausgewählt, um die Liste der Berechtigungen zu ermitteln, die ein Benutzer in einer bestimmten SSAS-Datenbank hat. Dieses Ergebnis wird dann in eine hypothetische DataTable geladen. Ich hoffe, dass dies anderen helfen wird, eine ähnliche Lösung zu finden.

using (Server Srv = new Server()) 
{ 
    Srv.Connect("\\serverName\instanceName");      
    Database d = Srv.Databases.FindByName("My SSAS DB");  
    foreach (Role r in d.Roles) 
    { 
     foreach (RoleMember m in r.Members) 
     { 
      if (string.Compare(m.Name, "domainName\userName", StringComparison.InvariantCultureIgnoreCase) == 0) 
      {    
       foreach (Cube c in d.Cubes) 
       {           
        CubePermission cp = c.CubePermissions.FindByRole(r.ID); 
        if(!(cp == null)) 
        { 
         foreach(CubeDimensionPermission cdimPerm in cp.DimensionPermissions) 
         { 
          foreach(AttributePermission attPerm in cdimPerm.AttributePermissions) 
          {        
           DataRow dr = dt.NewRow(); 
           dr["Database Name"] = d.Name; 
           dr["Role Name"] = r.Name; 
           dr["Dimension Name"] = cdimPerm.CubeDimension.Name; 
           dr["Cube Name"] = c.Name; 
           dr["Attribute Name"] = attPerm.Attribute.Name; 
           dr["AllowedSet"] = attPerm.AllowedSet; 
           dr["DeniedSet"] = attPerm.DeniedSet; 
           dr["DefaultMember"] = attPerm.DefaultMember; 
           dr["VisualTotals"] = attPerm.VisualTotals; 
           dt.Rows.Add(dr); 
          } 
         }            
        } 
       }          
      } 
     } 
    }     
    Srv.Disconnect(); 


} 
1

Versuchen Sie es mit Analysis Services Stored Procedure Project und BIDS Helper. Ich habe nicht eine dieser versuchte jedoch zunächst Ansprüche

„Die folgenden Befehle Informationen über Rollen extrahieren, Dimension Berechtigungen, Attributberechtigungen und Würfel Berechtigungen und wäre für die vollständige Dokumentation der Sicherheitseinstellungen ermöglichen. "

und die zweite:

„Um alle Sicherheitsberechtigungen über die Rollen erteilt zusammenfassen statt in Dutzende von Bildschirmen klicken diese Informationen zu finden.“

+0

Vielen Dank Janis. Ich fing an, es zu untersuchen. Es scheint, dass dies mit AMO bis VS 2013 nicht erreicht werden kann. –

+0

Ich denke, es sollte möglich sein, weil AMO SSAS-Objekte freigibt, konnte jedoch nicht mit einem Beispiel zum Abrufen von Berechtigungen in mehrdimensionalen Modell kommen. Kam nur über das, was das tabellarische Modell betrifft: http://stackoverflow.com/questions/29646645/c-sharp-amo-get-roles-complete. Vielleicht könnte das als Beispiel dienen. –