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

.net 在C中使用AMO获取给定用户的完整权限列表的最佳方法是什么#,.net,permissions,ssas,dimension,amo,.net,Permissions,Ssas,Dimension,Amo,我正在使用Visual Studio 2013(C#)和SSAS 2014(通过AMO)。我需要准备SSAS数据库中给定用户的权限列表。例如,domainName\userName对数据库中可用的5个维度中的2个维度拥有权限。我喜欢准备一份这样的清单 维度名称|属性|多维数据集中使用的维度| VisualTotal | Mdx集(如果有)|角色名称 我可以循环浏览角色和成员并获取一些信息。但这似乎是一个长期的尝试,在生产环境中不会对性能友好。请尝试签出并重试。然而,我还没有尝试过任何一种,第一种

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

维度名称|属性|多维数据集中使用的维度| VisualTotal | Mdx集(如果有)|角色名称

我可以循环浏览角色和成员并获取一些信息。但这似乎是一个长期的尝试,在生产环境中不会对性能友好。

请尝试签出并重试。然而,我还没有尝试过任何一种,第一种说法

“以下命令将提取有关角色的信息, 维度权限、属性权限和多维数据集权限以及 将允许完整的安全设置文档。”

第二点:

“汇总通过角色授予的所有安全权限 而不必点击几十个屏幕来找到这个 信息。”


最后,我能够使用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();


}

谢谢你,杰尼斯。我开始调查。这似乎无法通过VS 2013使用AMO实现。是吗?我认为这应该是可能的,因为AMO正在公开SSAS对象,但是,无法提供一个在多维模型中检索权限的示例。只遇到了一个表格式模型:。也许这可以作为一个例子。