在 C# 中使用 AMO 获取给定用户的完整权限列表的最佳方法是什么

What is the best way to obtain the complete list of permission of a given user using AMO in C#

我正在使用 Visual Studio 2013(C#) 和 SSAS 2014(通过 AMO)。我需要准备 SSAS 数据库中给定用户的权限列表。例如,domainName\userName 对数据库中可用的 5 个维度中的 2 个具有权限。我喜欢准备这样的清单。

Dimension Name | Attributes | Dimension used in Cube | VisualTotal | Mdx Set (if any) | Role Name

我可以遍历角色和成员并获取一些信息。但似乎这是一个远景,并且在生产环境中对性能不友好。

尝试查看 Analysis Services Stored Procedure Project and BIDS Helper。我没有尝试过这些,但是,首先声明

"The following commands will extract information about roles, dimension permissions, attribute permissions and cube permissions and would allow for the complete documentation of the security settings."

第二个:

"To summarize all the security permissions granted via the roles instead of having to click into dozens of screens to find this information."

我终于能够使用 AMO 实现这一目标。这是我为解决这个问题所做的。 以下是用于找出一个用户在给定 SSAS 数据库中拥有的权限列表的代码片段。然后将此结果加载到假设的数据表中。我希望这会帮助其他人尝试找到类似的解决方案。

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();


}