2016-04-15 14 views
2

Я использую Visual Studio 2013 (C#) и SSAS 2014 (через AMO). Мне нужно подготовить список разрешений данного пользователя в базе данных SSAS. Например, domainName \ userName имеет разрешения на 2 измерения из 5 доступных в базе данных. Мне нравится готовить такой список.Каков наилучший способ получить полный список разрешений данного пользователя с использованием AMO в C#

Наименование параметра | Атрибуты | Размер, используемый в Cube | VisualTotal | Mdx Set (если есть) | Имя роли

Я могу прокрутить роли и членов и получить некоторую информацию. Но кажется, что это длинный выстрел и не будет дружественным к производительности в производственной среде. Любые советы очень ценятся!

ответ

1

Наконец-то я смогу достичь этого с помощью 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(); 


} 
1

Попробуйте выяснить, Analysis Services Stored Procedure Project и BIDS Helper. Я не пробовал любой из них, однако, первых претензий

«Следующие команды будут получать информацию о роли, разрешения измерения, разрешение атрибутов и разрешения кубы и позволит полной документации о параметрах безопасности. "

и второй:

«Суммируя все разрешения безопасности, предоставляемые с помощью ролей вместо того, чтобы нажать на десятки экранов, чтобы найти эту информацию.»

+0

Спасибо Янис. Я начал изучать его. Кажется, этого не может быть достигнуто с помощью AMO через VS 2013. правильно? –

+0

Я думаю, что это должно быть возможно, потому что AMO разоблачает объекты SSAS, однако не может придумать пример получения разрешений в многомерной модели. Перешел только тот, который относится к табличной модели: http://stackoverflow.com/questions/29646645/c-sharp-amo-get-roles-complete. Возможно, это может служить примером. –

 Смежные вопросы

  • Нет связанных вопросов^_^