Programando objetos de segurança AMO
No MicrosoftSQL ServerAnalysis Services, a programação de objetos de segurança ou a execução de aplicativos que usam objetos de segurança AMO exigem a associação ao grupo Administrador de Servidor ou do grupo Administrador de Banco de Dados. Administrador do Servidor e Administrador do Banco de Dados são níveis de acesso fornecidos pelo SQL ServerAnalysis Services.
No Analysis Services, o acesso de usuário a qualquer objeto é obtido pela combinação de Funções e Permissões atribuídas àquele objeto. Para obter mais informações, consulte Classes de segurança AMO.
Objetos de função e de permissão
As funções de servidor contêm somente uma função na coleção, Administradores. Não é possível adicionar novas funções à coleção de funções de servidor. A associação à função Administradores permite acesso completo a todos os objeto do servidor
Os objetos de Role são criados no banco de dados. A manutenção de funções só requer a adição ou remoção de membros da função e a adição ou descarte de funções no objeto Database. Uma função não poderá ser descartada se qualquer objeto Permission estiver associado a ela. Para descartar uma função, todos os objetos de Permission nos objetos Database deverão ser pesquisados e Role deverá ser removido das permissões, antes que Role possa ser descartado de Database.
As permissões definem as ações habilitadas no objeto onde a permissão foi fornecida. Podem ser fornecidas permissões para os seguintes objetos: Database, DataSource, Dimension, Cube, MiningStructuree MiningModel. A manutenção da permissão envolve concessão ou revogação o acesso habilitado pela propriedade de acesso correspondente. Para cada acesso habilitado, existe uma propriedade que pode ser definida com o nível desejado de acesso. O acesso pode ser definido para as seguintes operações: Process, ReadDefinition, Read, Write e Administer. O acesso de administração só será definido no objeto Database. O nível de segurança de administrador de banco de dados é obtido quando a função é concedida com a permissão de banco de dados Administer.
O exemplo a seguir cria quatro funções: Administradores de Banco de Dados, Processadores, Gravadores e Leitores.
Os Administradores de Banco de Dados podem administrar o banco de dados fornecido.
Os Processadores podem processar todos os objetos de um banco de dados e verificar os resultados. Para verificar os resultados, o acesso de leitura ao objeto de banco de dados deve ser explicitamente habilitado no cubo fornecido, já que a permissão de leitura não se aplica a objetos filhos.
Os Gravadores podem ler o cubo fornecido e podem gravar nele, e o acesso de célula está limitado a 'Estados Unidos' na dimensão de cliente.
Os Leitores podem ler o cubo fornecido e o acesso de célula está limitado a 'Estados Unidos' na dimensão de cliente.
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
}
Consulte também