我正在使用 Visual Studio 2013(C#)和 SSAS 2014(通过 AMO)。我需要在 SSAS 数据库中准备给定用户的权限列表。例如,domainName\userName 对数据库中可用的 5 个维度中的 2 个具有权限。我喜欢准备这样的清单。
维度名称 | 属性 | Cube 中使用的维度 | 视觉总计 | Mdx 集(如果有) | 角色名称
我可以遍历角色和成员并获取一些信息。但它似乎是一个长镜头,并且在生产环境中不会对性能友好。
我正在使用 Visual Studio 2013(C#)和 SSAS 2014(通过 AMO)。我需要在 SSAS 数据库中准备给定用户的权限列表。例如,domainName\userName 对数据库中可用的 5 个维度中的 2 个具有权限。我喜欢准备这样的清单。
维度名称 | 属性 | Cube 中使用的维度 | 视觉总计 | Mdx 集(如果有) | 角色名称
我可以遍历角色和成员并获取一些信息。但它似乎是一个长镜头,并且在生产环境中不会对性能友好。
最后,我能够使用 AMO 实现这一目标。这是我为解决这个问题所做的。以下是为找出用户在给定 SSAS 数据库中的权限列表而截取的代码。然后将该结果加载到假设的 DataTable 中。我希望这将有助于其他人试图找到类似的解决方案。
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();
}
尝试查看Analysis Services Stored Procedure Project和BIDS Helper。但是,我没有尝试过任何这些,但首先声明
“以下命令将提取有关角色、维度权限、属性权限和多维数据集权限的信息,并允许完整记录安全设置。”
第二个:
“总结通过角色授予的所有安全权限,而不必单击数十个屏幕来查找此信息。”