Compartir a través de


Programar objetos de seguridad AMO

En Microsoft SQL Server Analysis Services, programar objetos de seguridad o ejecutar aplicaciones que usan objetos de seguridad AMO requiere ser un miembro del grupo administrador del servidor o del grupo administrador de base de datos. Tanto el administrador del servidor como el administrador de base de datos son niveles de acceso que proporciona SQL Server Analysis Services.

En Analysis Services, el acceso de usuario a cualquier objeto se obtiene a través de la combinación de funciones y permisos que se asignan a ese objeto. Para obtener más información, vea Clases Security de AMO.

Objetos de función y permiso

Las funciones del servidor contienen una única función en la colección, la función de los administradores. Las nuevas funciones no se pueden agregar a la colección de funciones del servidor. La pertenencia en la función de los administradores permite el acceso completo a cada objeto del servidor

Los objetos Role se crean en el nivel de base de datos. El mantenimiento de la función requiere únicamente agregar o quitar miembros a la función o de la función, así como agregar o quitar funciones al objeto Database. Una función no se puede quitar si es cualquier objeto Permission asociado a la función. Para quitar una función, se deben buscar todos los objetos Permission en los objetos Database y quitar los permisos de Role, antes de que Role se quite de Database.

Los permisos definen las acciones habilitadas en el objeto donde se proporciona el permiso. Se pueden proporcionar permisos a los objetos siguientes: Database, DataSource, Dimension, Cube, MiningStructurey MiningModel. El mantenimiento del permiso implica conceder o revocar acceso habilitado por la propiedad de acceso correspondiente. Para cada acceso habilitado, hay una propiedad que se puede establecer en el nivel de acceso que se desee. El acceso se puede definir para las operaciones siguientes: Procesar, Leer definición, Leer, Escribir y Administrar. Administrar el acceso únicamente se define en el objeto Database. Se obtiene el nivel de seguridad del administrador de bases de datos cuando se concede la función con el permiso para administrar la base de datos.

En el ejemplo siguiente se crean cuatro funciones: Administradores de bases de datos, Procesadores, Escritores y Lectores.

Los administradores de bases de datos pueden administrar la base de datos proporcionada.

Los procesadores pueden procesar todos los objetos en una base de datos y comprobar los resultados. Para comprobar los resultados, se debe habilitar explícitamente al cubo proporcionado el acceso de lectura al objeto de la base de datos, porque el permiso de lectura no se aplica a objetos secundarios.

Los escritores pueden leer y escribir al cubo proporcionado y el acceso a celdas se limita a la dimensión del cliente en 'United States'.

Los lectores pueden leer en el cubo proporcionado y el acceso a celdas se limita a la dimensión del cliente en 'United States'.

        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
        }