有没有办法在SSAS表格2017(1400)中完全管理安全性?
我想使用Microsoft.AnalysisServices.Tabular dll管理C#中的角色。
我无法访问ColumnPermissions(或者我不知道如何)并设置TablePermissions过滤器。
这是我的代码:
private static void ReplaceRolesAndMembersWithInitialValues(Database db, Model model, List<CubeRoleModel> initRolesForPostgres)
{
var roles = model.Roles;
if (roles.Count > 0)
{
var rolesName = roles.Select(x => x.Name).Distinct().ToList();
foreach (var n in rolesName)
{
roles.Remove(n);
}
model.SaveChanges();
}
if (initRolesForPostgres.Count > 0)
{
var tablesNames = new HashSet<string>(model.Tables.Select(a => a.Name).Distinct().ToList());
var tables = model.Tables;
Dictionary<string, Table> dictTables = new Dictionary<string, Table>();
foreach (var t in tables)
{
dictTables.Add(t.Name, t);
}
foreach (var n in initRolesForPostgres)
{
ModelRole newRole = new ModelRole
{
Name = n.RoleName,
Description = n.RoleDescription,
ModelPermission = n.ModelPermission
};
if (n.Members.Count > 0)
{
foreach (var m in n.Members)
{
var nMem = new WindowsModelRoleMember
{
MemberName = m.MemberName
};
newRole.Members.Add(nMem);
}
}
if (n.TablePermissions.Count > 0)
{
var tb = newRole.TablePermissions;
foreach (var tabPerm in n.TablePermissions)
{
if (tables.Contains(tabPerm.TableName) && string.IsNullOrWhiteSpace(tabPerm.TableFilters) == false)
{
TablePermission newTablePer = new TablePermission
{
Name = tabPerm.TableName,
FilterExpression = tabPerm.TableFilters
};
if (newTablePer.Validate().ContainsErrors) { continue; }
tb.Add(newTablePer);
}
}
}
if (newRole.Validate().ContainsErrors) { continue; }
model.Roles.Add(newRole);
}
model.SaveChanges();
}
}
任何的想法?
一天后,我设法解决这个问题。首先,您应该获取Microsoft.AnalysisServices.Tabular和Microsoft.AnalysisServices.Core的最后一个DLL。您将在Microsoft SQL Server 2017安装文件夹中找到此dll。
在此之后,您将找到所需的所有信息here。