2016-04-15 3 views
2

J'utilise Visual Studio 2013 (C#) et SSAS 2014 (via AMO). Je dois préparer une liste d'autorisations d'un utilisateur donné dans la base de données SSAS. Par exemple, domainName \ userName a des autorisations sur les 2 dimensions sur 5 disponibles dans la base de données. J'aime préparer une liste comme celle-ci.Quel est le meilleur moyen d'obtenir la liste complète des permissions d'un utilisateur utilisant AMO en C#

Dimension Nom | Attributs | Dimension utilisée dans Cube | VisualTotal | Mdx Set (le cas échéant) | Nom du rôle

Je peux parcourir les rôles et les membres et obtenir des informations. Mais il semble que ce soit long et ne soit pas performant dans l'environnement de production. Tout conseil est fort apprécié!

Répondre

1

Enfin, je suis en mesure d'y parvenir en utilisant AMO. Voici ce que j'ai fait pour résoudre cela. Voici le code extrait pour connaître la liste des autorisations d'un utilisateur dans une base de données SSAS donnée. Ce résultat est ensuite chargé dans un DataTable hypothétique. J'espère que cela aidera les autres à essayer de trouver une solution similaire.

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

Essayez de vérifier Analysis Services Stored Procedure Project et BIDS Helper. Je ne l'ai pas essayé l'un d'entre eux, cependant, les premières demandes

« Les commandes suivantes extraire des informations sur les rôles, autorisations de dimension, les autorisations d'attributs et les autorisations de cube et permettrait de la documentation complète des paramètres de sécurité. "

et le second:

« Pour résumer toutes les autorisations de sécurité accordées par les rôles au lieu d'avoir à cliquer dans des dizaines d'écrans pour trouver ces informations . »

+0

Merci Janis. J'ai commencé à regarder dedans. Il semble que cela ne peut pas être réalisé en utilisant AMO à travers VS 2013. pas vrai? –

+0

Je pense qu'il devrait être possible parce que AMO expose des objets SSAS, cependant, n'a pas pu trouver un exemple sur la récupération des autorisations dans le modèle multidimensionnel. Entré à travers seulement celui qui concerne le modèle tabulaire: http://stackoverflow.com/questions/29646645/c-sharp-amo-get-roles-complete. Peut-être que cela pourrait servir d'exemple. –