This script could help Analysis Services administrators to load and configure big amount of roles. Supose, I have to configure 100+ roles for every shop in you enterprise. Every shop have his own group in Active Directory: active Directory adminsitrator already created AD groups for shops with description “new”. In AS database I have store dimension and “stor bkey” attribute for each shop.
My task is loop via Active directory groups, look for group description “new”, then create role in Analysis Services, add AD group as role member, grant read permission on cube, define allowed set to his own shop, default member and Visual Totals. After I need to delete description “new”.
1’st part of script looping via AD groups in container and look for description “new” and then call procedure CreateRole.
Public Sub Main()
Dim ADContainer As System.DirectoryServices.DirectoryEntry = _
New System.DirectoryServices.DirectoryEntry(LDAP://OU=MyGruops3,OU=MyGruops2,OU=MyGruops1,DC=MyEnterprise,DC=int)
Dim ADGroup As System.DirectoryServices.DirectoryEntry
Dim sGroupName As StringFor Each ADGroup In ADContainer.Children
If ADGroup.Properties(“Description”).Value = “new” Then
sGroupName = ADGroup.Properties(“cn”).Value
CreateRole(sGroupName)
ADGroup.Properties(“Description”).RemoveAt(0)
ADGroup.CommitChanges()
End If
Next
Dts.TaskResult = Dts.Results.Success
End Sub
Rest of script – configuring role:
Private Sub CreateRole(ByVal sGroupName As String)
Dim RoleMember As String = “MyEnterprise\” & sGroupName
Dim AllowedMember = “[store].[stor bkey].&[" & sGroupName & "]”
Dim AMOServer As Microsoft.AnalysisServices.Server = New Microsoft.AnalysisServices.Server
Dim AMODatabase As Microsoft.AnalysisServices.Database = New Microsoft.AnalysisServices.Database
Dim AMOCube As Microsoft.AnalysisServices.Cube
Dim AMORole As Microsoft.AnalysisServices.Role
Dim AMODatabasePermission As Microsoft.AnalysisServices.DatabasePermission
Dim AMOCubePermission As Microsoft.AnalysisServices.CubePermission
Dim AMODimension As Microsoft.AnalysisServices.Dimension
Dim AMODimensionAttribute As Microsoft.AnalysisServices.DimensionAttribute
Dim AMOCubeDimensionPermission As CubeDimensionPermission
Dim AMOAttributePermission As AttributePermission
Dim AMODimensionPermission As DimensionPermission
AMOServer.Connect(MyServer)
AMODatabase = AMOServer.Databases(MyDatabase)
AMOCube = AMODatabase.Cubes.GetByName(MyCube)
AMORole = AMODatabase.Roles.FindByName(sGroupName)
If Not AMORole Is Nothing Then
AMODatabase.Roles.Remove(AMODatabase.Roles.GetByName(sGroupName).ID)
End If
AMORole = AMODatabase.Roles.Add(sGroupName)
AMORole.Members.Add(New RoleMember(RoleMember))
AMORole.Update()
AMODatabasePermission = AMODatabase.DatabasePermissions.Add(AMORole.ID)
AMODatabasePermission.Read = ReadAccess.Allowed
AMODatabasePermission.Update()
AMOCubePermission = AMOCube.CubePermissions.Add(AMORole.ID)
AMOCubePermission.Read = ReadAccess.Allowed
AMODimension = AMODatabase.Dimensions.GetByName(“store”)
AMODimensionAttribute = AMODimension.Attributes.GetByName(“stor bkey”)
AMOCubePermission.Update()
AMODimensionPermission = AMODimension.DimensionPermissions.Add(AMORole.ID)
AMOAttributePermission = AMODimensionPermission.AttributePermissions.Add(AMODimensionAttribute.ID)
AMOAttributePermission.AllowedSet = “{” & AllowedMember & “}”
AMOAttributePermission.DefaultMember = AllowedMember
AMOAttributePermission.VisualTotals = 1
AMODimensionPermission.Update()
End Sub
Cool group directory stuff. It worked like a charm.
Thanks for writing this great blog I really enjoyed.