Cube Permission Method
The method shown below is used to grant Read permission to the specified Role.
'Grant Cube Read Permission to a role Public Function GrantCubeRead(ByVal parmRole As String) As Boolean parmRole = parmRole.Trim() If IsNullOrEmpty(parmRole) Then Return False End If Try Dim objRole As Role = Me.DatabaseObj.Roles.FindByName(parmRole) Dim objCubePerm As CubePermission If objRole Is Nothing Then Return False End If If Me.CubeObj.CubePermissions.FindByRole(objRole.ID) Is Nothing Then objCubePerm = Me.CubeObj.CubePermissions.Add(objRole.ID) objCubePerm.Read = ReadAccess.Allowed objCubePerm.Update(UpdateOptions.Default) End If Catch ServerNotFoundException As ConnectionException Throw ServerNotFoundException Catch ErrorAddingCubePermissionException As OperationException Throw ErrorAddingCubePermissionException Catch GenericAMOException As AmoException Throw GenericAMOException End Try Return True End Function
Dimension Permission Method
The method shown below is used to grant Read permission to all Cube Dimensions to the specified Role.
'Grant Read Permission to ALL Dimensions Public Function GrantDimensionRead(ByVal parmRole As String) As Boolean parmRole = parmRole.Trim() Dim objDimension As Dimension Dim objDimPerm As DimensionPermission If IsNullOrEmpty(parmRole) Then Return False End If Dim objRole As Role = Me.DatabaseObj.Roles.FindByName(parmRole) If objRole Is Nothing Then Return False End If Try If Me.DatabaseObj.Dimensions.Count > 0 Then For Each objDimension In DatabaseObj.Dimensions If objDimension.DimensionPermissions.FindByRole(objRole.ID) Is Nothing Then objDimPerm = objDimension.DimensionPermissions.Add(objRole.ID) objDimPerm.Read = ReadAccess.Allowed objDimPerm.Update(UpdateOptions.Default) End If Next Else Return True End If Catch ServerNotFoundException As ConnectionException Throw ServerNotFoundException Catch ErrorAddingDimPermissionException As OperationException Throw ErrorAddingDimPermissionException Catch GenericAMOException As AmoException Throw GenericAMOException End Try Return True End Function
Backup Utility Method
The AMO methods directly alter the Cube’s metadata. A wrongly issued command could cause ugly consequences. So it’s always better to backup the cube before running your AMO methods, especially during development and testing phase. The code shown below does exactly that. Call this as your first method before calling any of the other AMO methods.
❗IMPORTANT: The backup file name must have an .abf extension
'Backup Analysis Service Database Public Sub BackupDatabase(ByVal parmFilePath As String) Try Me.DatabaseObj.Backup(parmFilePath, False) Catch BackupException As OperationException Throw BackupException Catch GenericAMOException As AmoException Throw GenericAMOException End Try End Sub
I think speaking or writing it out loud made me think about it more. Then it downed on me to use SQL Profiler!
… why didn’t I think of this before?!?!
I’m proud and ashamed at the same time in finding out this simple answer to my own question.
Hi,
This question has been bugging me for a long time. How can you identify who are the currently connected users on your Analysis Services?
Any insight would be appreciated.
Thanks in advance