2

Visual Studio 2013(C#) と SSAS 2014 (AMO 経由) を使用しています。SSAS データベースで特定のユーザーのアクセス許可のリストを準備する必要があります。たとえば、domainName\userName には、データベースで使用可能な 5 つのディメンションのうち 2 つのディメンションに対する権限があります。このようなリストを用意するのが好きです。

ディメンション名 | 属性 | キューブで使用されるディメンション | ビジュアルトータル | Mdx セット (ある場合) | 役割名

ロールとメンバーをループして、情報を取得できます。しかし、それはロング ショットであり、運用環境ではパフォーマンス フレンドリではないようです。

4

2 に答える 2

1

最後に、AMO を使用してこれを達成することができます。これを解決するために私がしたことは次のとおりです。以下は、特定の SSAS データベースで 1 人のユーザーが持っている権限のリストを確認するために抜粋されたコードです。この結果は、仮想の 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();


}
于 2016-04-20T09:19:40.920 に答える