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


Программирование объектов безопасности AMO

В службах Microsoft SQL Server Службы Analysis Services для программирования объектов безопасности или выполнения программ, в которых используются объекты безопасности AMO, необходимо быть членом группы администраторов сервера или администраторов базы данных. Администратор сервера или администратор базы данных — это уровни доступа, обеспечиваемые службами SQL Server Службы Analysis Services.

В службах Службы Analysis Services пользователь получает доступ к объекту через сочетание ролей и разрешений, назначенных этому объекту. Дополнительные сведения см. в разделе Классы безопасности объектов AMO.

Объекты ролей и разрешений

Роли сервера содержат в коллекции одну и только одну роль, роль администратора. Новые роли в коллекцию ролей сервера добавлять нельзя. Членство в роли администратора дает полный доступ ко всем объектам на сервере.

Объекты Role создаются на уровне базы данных. Обслуживание ролей сводится к добавлению или удалению членов роли, а также ролей в объекте Database. Если с ролью связан хотя бы один объект Permission, то удалить ее невозможно. Чтобы удалить роль, необходимо произвести поиск во всех объектах Permission, находящихся в объектах Database, и удалить объект Role из разрешений. Только после этого объект Role можно будет удалить из объекта Database.

Разрешения указывают, какие действия разрешены над объектом, для которого эти разрешения установлены. Разрешения могут быть установлены для следующих объектов: Database, DataSource, Dimension, Cube, MiningStructure и MiningModel. Обслуживание разрешений сводится к предоставлению и отмене прав доступа при помощи соответствующего свойства доступа. У каждого разрешения на доступ есть свойство, которому может быть установлен требуемый уровень доступа. Доступ может быть определен для следующих операций: Process, ReadDefinition, Read, Write и Administer. Доступ 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
        }

См. также

Справочник

Microsoft.AnalysisServices

Основные понятия

Знакомство с классами объектов AMO

Программирование объектов безопасности AMO

Разрешения и права доступа (службы Analysis Services — многомерные данные)

Логическая архитектура (службы Analysis Services — многомерные данные)

Объекты баз данных (службы Analysis Services — многомерные данные)

Другие ресурсы

Защита экземпляра служб Analysis Services