Programar objetos de seguridad de AMO
Se aplica a:
SQL Server Analysis Services Azure Analysis Services
Power BI Premium
En Analysis Services, la programación de objetos de seguridad o aplicaciones en ejecución que usan objetos de seguridad amo requiere ser miembro del grupo Administrador del servidor o del grupo Administrador de base de datos servidor. Administrador del servidor y Administrador de base de datos.
En Analysis Services, el acceso de usuario a cualquier objeto se obtiene a través de la combinación de roles y permisos asignados a ese objeto. Para obtener más información, vea Clases de seguridad de AMO.
Objetos de rol y permiso
Los roles del servidor contienen un único rol en la colección, el rol de los administradores. Los nuevos roles no se pueden agregar a la colección de roles del servidor. La pertenencia en el rol de los administradores permite el acceso completo a cada objeto del servidor
RoleLos objetos se crean en el nivel de base de datos. El mantenimiento de roles solo requiere agregar o quitar miembros del rol y agregar o quitar roles al Database objeto. No se puede descartar un rol si hay algún Permission objeto asociado al rol. Para quitar un rol, se PermissionDatabaseRole deben buscar todos los objetos de los objetos y quitar de los permisos, Role antes de que se pueda quitar de Database.
Los permisos definen las acciones habilitadas en el objeto donde se proporciona el permiso. Los permisos se pueden proporcionar 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 solo se define en el Database objeto . Se obtiene el nivel de seguridad del administrador de bases de datos cuando se concede el rol con el permiso para administrar la base de datos.
En el ejemplo siguiente crea cuatro roles: Los 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 'Estados Unidos'.
Los lectores pueden leer en el cubo proporcionado y el acceso a celdas se limita a la dimensión del cliente en 'Estados Unidos'.
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
}