Программирование объектов безопасности AMO
В службах MicrosoftSQL ServerAnalysis Services для программирования объектов безопасности или выполнения программ, в которых используются объекты безопасности AMO, необходимо быть членом группы администраторов сервера или администраторов базы данных. Администратор сервера или администратор базы данных — это уровни доступа, предоставляемые службами SQL ServerAnalysis Services.
В службах Analysis Services пользователь получает доступ к объекту через сочетание ролей и разрешений, назначенных этому объекту. Дополнительные сведения см. в разделе Классы безопасности объектов AMO.
Объекты ролей и разрешений
Роли сервера содержат одну и только одну роль в коллекции, роль администратора. Новые роли в коллекцию ролей сервера добавлять нельзя. Членство в роли администратора дает полный допуск ко всем объектам на сервере.
Объекты Role создаются на уровне базы данных. Ведение роли сводится к добавлению или удалению членов из роли, а также добавлению или удалению ролей из объекта Database. Если с ролью ассоциирован какой-либо объект Permission, ее невозможно удалить. Чтобы удалить роль, необходимо произвести поиск во всех объектах Permission, находящихся в объектах Database, и удалить объект Role из разрешений. Только после этого объект Role можно будет удалить из объекта Database.
Разрешения указывают, какие действия с объектом, для которого эти разрешения установлены, разрешены. Разрешения можно устанавливать для следующих объектов: Database, DataSource, Dimension, Cube, MiningStructure и MiningModel. Ведение разрешений заключается в предоставлении и отмене прав доступа при помощи соответствующего свойства доступа. У каждого разрешения на доступ есть свойство, которому может быть установлен требуемый уровень доступа. Доступ можно определить для следующих операций: Process, ReadDefinition, Read, Write и Administer. Доступ для администрирования задается только для объекта Database. Уровень безопасности администратора базы данных достигается только при предоставлении роли разрешения на администрирование базы данных.
В следующем образце создаются четыре роли: администраторы баз данных, обработчики, агенты записи и агенты чтения.
Администраторы баз данных могут администрировать указанные базы данных.
Обработчики могут обрабатывать все объекты в базе данных и проверять результаты. Для проверки результатов указанном кубу необходимо явно предоставить право доступа для чтения к объекту базы данных, поскольку разрешения на чтения не распространяется на дочерние объекты.
Агенты записи могут выполнять чтение и запись в указанный куб, а их доступ к ячейкам ограничен ячейками «США» в измерении клиентов.
Агенты чтения могут выполнять чтение в указанном кубе, а их доступ к ячейкам ограничен ячейками «США» в измерении клиентов.
static public void CreateRolesAndPermissions(Database db, Cube cube) { Role role; DatabasePermission dbperm; CubePermission cubeperm; #region Create the Database Administrators role // Create the Database Administrators role. role = db.Roles.Add("Database Administrators"); role.Members.Add(new RoleMember("")); // e.g. domain\user role.Update(); // Assign administrative permissions to this role. // Members of this role can perform any operation within the database. dbperm = db.DatabasePermissions.Add(role.ID); dbperm.Administer = true; dbperm.Update(); #endregion #region Create the Processors role // Create the Processors role. role = db.Roles.Add("Processors"); role.Members.Add(new RoleMember("")); // e.g. myDomain\johndoe role.Update(); // Assign Read and Process permissions to this role. // Members of this role can process objects in the database and query them to verify results. // Process permission applies to all contained objects, i.e. all dimensions and cubes. // Read permission does not apply to contained objects, so we must assign the permission explicitly on the cubes. dbperm = db.DatabasePermissions.Add(role.ID); dbperm.Read = ReadAccess.Allowed; dbperm.Process = true; dbperm.Update(); cubeperm = cube.CubePermissions.Add(role.ID); cubeperm.Read = ReadAccess.Allowed; cubeperm.Update(); #endregion #region Create the Writers role // Create the Writers role. role = db.Roles.Add("Writers"); role.Members.Add(new RoleMember("")); // e.g. redmond\johndoe role.Update(); // Assign Read and Write permissions to this role. // Members of this role can discover, query and writeback to the Adventure Works cube. // However cell access and writeback is restricted to the United States (in the Customer dimension). dbperm = db.DatabasePermissions.Add(role.ID); dbperm.Read = ReadAccess.Allowed; dbperm.Update(); cubeperm = cube.CubePermissions.Add(role.ID); cubeperm.Read = ReadAccess.Allowed; cubeperm.Write = WriteAccess.Allowed; cubeperm.CellPermissions.Add(new CellPermission(CellPermissionAccess.Read, "[Customer].[Country-Region].CurrentMember is [Customer].[Country-Region].[Country-Region].&[United States]")); cubeperm.CellPermissions.Add(new CellPermission(CellPermissionAccess.ReadWrite, "[Customer].[Country-Region].CurrentMember is [Customer].[Country-Region].[Country-Region].&[United States]")); cubeperm.Update(); #endregion #region Create the Readers role // Create the Readers role. role = db.Roles.Add("Readers"); role.Members.Add(new RoleMember("")); // e.g. redmond\johndoe role.Update(); // Assign Read permissions to this role. // Members of this role can discover and query the Adventure Works cube. // However the Customer dimension is restricted to the United States. dbperm = db.DatabasePermissions.Add(role.ID); dbperm.Read = ReadAccess.Allowed; dbperm.Update(); cubeperm = cube.CubePermissions.Add(role.ID); cubeperm.Read = ReadAccess.Allowed; Dimension dim = db.Dimensions.GetByName("Customer"); DimensionAttribute attr = dim.Attributes.GetByName("Country-Region"); CubeDimensionPermission cubedimperm = cubeperm.DimensionPermissions.Add(dim.ID); cubedimperm.Read = ReadAccess.Allowed; AttributePermission attrperm = cubedimperm.AttributePermissions.Add(attr.ID); attrperm.AllowedSet = "{[Customer].[Country-Region].[Country-Region].&[United States]}"; cubeperm.Update(); #endregion }
См. также