Поделиться через


Программирование объектов безопасности 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        }