【问题标题】:C# amo get roles completeC# amo 获取角色完成
【发布时间】:2015-06-21 04:51:37
【问题描述】:

我正在处理一个 SSAS 项目,除其他外,我需要在 C# 中获取表格多维数据集的完整用户列表。 目前我的工作方式是我可以获得角色,但数据不完整。当我调用 Server.Database.Roles(为便于阅读而简化)属性并枚举它时,我只得到 ID、Name 和 CreatedTimeStamp。我缺少的是成员、CellPermissions(DAX 过滤器)以及这些成员的权限,这一点至关重要。 我目前在 Server.Database.Cube 中寻找的权限(读/写/管理员)但 CubePermissions 是空的...

在 SSMS 中,当我编写一个 testroles 脚本时,该角色包含:

<ID>Role</ID>
        <Name>TestRole</Name>
        <Description>role for testing</Description>
        <Members>
            <Member>
                <Name>THORVALDDATA\rj</Name>
                <Sid>OMITTED</Sid>
            </Member>
            <Member>
                <Name>THORVALDDATA\dp</Name>
                <Sid>OMITTED</Sid>
            </Member>
            <Member>
                <Name>THORVALDDATA\jtl</Name>
                <Sid>OMITTED</Sid>
            </Member>
        </Members>

但如前所述,当我在代码中枚举它时,我没有得到成员和描述。

各位聪明人能帮我弄清楚这里出了什么问题吗?

我所有的代码:

        RoleCollection roleCollection = _analysisServer.Databases[dbID].Roles;

        Database database = _analysisServer.Databases[dbID];

        Dictionary<string, CubeRole> roles = new Dictionary<string, CubeRole>();
        foreach (Role role in roleCollection)
        {
            CubeRole cRole = new CubeRole();
            cRole.ID = role.ID;
            cRole.Name = role.Name;

            cRole.Members = role.Members;
            CubeCollection cubeCollection = _analysisServer.Databases[dbID].Cubes;

            foreach (Cube cube in cubeCollection)
            {
                foreach (CubePermission cubePermission in cube.CubePermissions)
                {
                    cRole.Filters = cubePermission.CellPermissions;
                    cRole.Permission.Add(cubePermission);
                }
            }
            roles.Add(cRole.Name, cRole);
        }
        return roles;

【问题讨论】:

    标签: c# ssas roles


    【解决方案1】:

    使用表格,您可以在服务器级别拥有管理员。在数据库级别,您只有 3 个内置权限:1)完全控制 2)处理数据库和 3)读取。您在数据库中创建的每个角色都可以选择这些权限。表格中没有多维数据集,因此您只有 2 个级别,服务器和数据库。 MSDN 是了解表格 https://msdn.microsoft.com/en-us/library/hh213165.aspx 中权限和角色的良好起点

    您可以遍历数据库的角色以提取每个角色中的角色成员以及与每个角色关联的权限:

       //loop through database permissions
       foreach (AMO.DatabasePermission dbp in Analysisdb.DatabasePermissions)
              {
               Console.Write(dbp.Role.Name); //role name
               Console.Write(dbp.Read); // Is read role?
               Console.Write(dbp.Process); // Is process role?
               Console.Write(dbp.Administer); // Is Full control role?
              //loop through database permissions role members
              foreach (AMO.RoleMember rolemember in dbp.Role.Members)
                  { 
                  Console.Write(rolemember.Name); 
                   }
              }
    

    可以通过循环遍历每个角色的每个维度来提取每个维度的 DAX 表达式。下面的示例将获取 codeplex AdventureWorks 示例模型中用户角色的货币维度的 DAX 表达式:

         using (AMO.DimensionPermission dimensionPermission = AnalysisDb.Dimensions.GetByName("Currency").DimensionPermissions[0]);
    Console.Write(dimensionPermission.AllowedRowsExpression);
    

    有关表格 AMO 的更多信息,请参阅 http://tabularamo2012.codeplex.com/SourceControl/latest#AMO2TabularV2/AMO2Tabular.RlsFunctions.cs

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-17
      • 2020-07-31
      • 1970-01-01
      • 2021-10-16
      • 2015-04-14
      • 1970-01-01
      • 2017-06-01
      • 2013-01-16
      相关资源
      最近更新 更多