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 я не силен, поэтому дабы избежань недоразумений количество привилегий считал, как говорится на пальцах – проходом по массиву. Уж не взыщите)
Удачных инсталляций 😉