C# amo 完成角色获取
C# amo get roles complete
我正在开发一个 SSAS 项目,除其他外,我需要在 C# 中获取表格多维数据集的完整用户列表。
目前我的工作方式可以让我获得角色,但数据不完整。当我调用 Server.Database.Roles(为了便于阅读而简化)属性 并通过它进行枚举时,我只获得 ID、名称和 CreatedTimeStamp。我缺少的是成员、CellPermissions(DAX 过滤器)和这些成员的权限,这很重要。
我目前在 Server.Database.Cube 中寻找的权限 (read/write/administrator) 但 CubePermissions 是空的...
在 SSMS 中,当我为我的一个测试角色编写脚本时,该角色包含:
<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;
使用表格,您可以在服务器级别拥有管理员。在数据库级别,您只有 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。
我正在开发一个 SSAS 项目,除其他外,我需要在 C# 中获取表格多维数据集的完整用户列表。 目前我的工作方式可以让我获得角色,但数据不完整。当我调用 Server.Database.Roles(为了便于阅读而简化)属性 并通过它进行枚举时,我只获得 ID、名称和 CreatedTimeStamp。我缺少的是成员、CellPermissions(DAX 过滤器)和这些成员的权限,这很重要。 我目前在 Server.Database.Cube 中寻找的权限 (read/write/administrator) 但 CubePermissions 是空的...
在 SSMS 中,当我为我的一个测试角色编写脚本时,该角色包含:
<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;
使用表格,您可以在服务器级别拥有管理员。在数据库级别,您只有 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。