Home > SQL Reporting Services > Script for Setting Item-level Security in Reporting Services

Script for Setting Item-level Security in Reporting Services

Название статьи практически цитирует название статьи Брайана Келлера (Bryan Keller), которую можно посмотреть тут: Sample Script for Setting Item-level Security in Reporting Services. Статья хорошая, скрипт очень полезный, если нужно раздать права на сервер репортинга при инсталляции, но есть одно НО. Он работает один раз. Точнее одному пользователю можно установить одну привилегию, не больше. В ситуации, когда пользователю нужно назначить например привилегии Browser и Browser for Microsoft CRM, то придется делать это двумя вызовами скрипта с разными параметрами и на втором вызове, к сожалению, скрипт выдаст ошибку. Возможно это связано с тем, что судя по дате публикации статьи Келлера, скрипт создавался под SQL Server 2000, а тестировал я на SQL Server 2008. В любом случае, предлагаю ознакомиться с небольшой модификацией функции Main(). В моем варианте, скрипт принимает в качестве параметра не имя привилегии, а набор привилегий, разделенных запятой.

Public Sub Main()
   Dim isRoot As Boolean = False
   Dim inheritParent As Boolean
   Dim policies() As Policy
   Dim newPolicies() As Policy
   Dim policy As New Policy()

   Dim roles_array As String()
        roles_array = SplitRoles(roleName)
        Dim i As Integer
        i = 0
        For Each s As String In roles_array
            i = i + 1
        Next

        Dim roles(i - 1) As Role
        i = 0

        For Each s As String In roles_array
            roles(i) = New Role()
            roles(i).Name = s
            i = i + 1
        Next

   policy.Roles = roles
   policy.GroupUserName = userName

   While Not isRoot
      ' Once the root of the catalog is reached,
      ' stop applying policies
      If itemPath = "/" Then
         isRoot = True
      End If
      policies = rs.GetPolicies(itemPath, inheritParent)

      ' If the user selects not to keep inherited or current policy,
      ' empty the policy
      If Not keepCurrentPolicy = "True" Then
         policies = Nothing
      End If
      newPolicies = AddNewPolicy(policy, policies)
      rs.SetPolicies(itemPath, newPolicies)
      itemPath = GetParentPath(itemPath)
   End While
   Console.WriteLine("Policy successfully set.")
End Sub 'Main

 Писался на скорую руку, а в VB.NET я не силен, поэтому дабы избежань недоразумений количество привилегий считал, как говорится на пальцах – проходом по массиву. Уж не взыщите)

Удачных инсталляций 😉

  1. No comments yet.
  1. No trackbacks yet.

Leave a comment