Implementar a segurança dinâmica usando filtros de linha
Nesta lição suplementar, você criará uma função adicional que implementa a segurança dinâmica. A segurança dinâmica oferece segurança em nível de linha com base no nome de usuário ou na id de logon do usuário conectado no momento. Para obter mais informações, consulte Funções (SSAS tabular).
Para implementar a segurança dinâmica, você deverá adicionar uma tabela a seu modelo contendo os nomes de usuários Windows desses usuários que podem criar uma conexão com o modelo como uma fonte de dados e procurar objetos e dados do modelo. O modelo criado usando este tutorial está no contexto da Adventure Works Corp.; entretanto, para concluir esta lição, você deve adicionar uma tabela contendo os usuários de seu próprio domínio. Você não precisará das senhas para os nomes de usuários que serão adicionados. Para criar uma tabela Employee Security, com um exemplo pequeno de usuários de seu próprio domínio, você usará o recurso Colar, colando dados de funcionário de uma planilha do Excel. Em um cenário do mundo real, a tabela que contém nomes de usuários adicionada a um modelo normalmente empregaria uma tabela de um banco de dados real como uma fonte de dados; por exemplo, uma tabela real dimEmployee.
Para implementar a segurança dinâmica, você usará duas funções DAX novas: Função USERNAME (DAX) e Função LOOKUPVALUE (DAX). Estas funções, aplicadas em um fórmula de filtro de linha, são definidas em uma nova função. Usando a função LOOKUPVALUE, a fórmula especifica um valor da tabela Employee Security e passa esse valor para a função USERNAME, que especifica o nome de usuário do usuário registrado que pertence a esta função. O usuário pode procurar apenas nos dados especificados pelos filtros de linha da função. Neste cenário, você especificará que os funcionários de vendas só podem procurar dados de vendas pela internet para as regiões de vendas das quais eles são membro.
Para concluir esta lição suplementar, você executará uma série de tarefas. Essas tarefas que são exclusivas deste cenário de modelo de tabela do Adventure Works, mas não se aplicariam necessariamente a um cenário do mundo real, são identificadas como tal. Cada tarefa inclui informações adicionais que descrevem o propósito da tarefa.
Tempo estimado para concluir esta lição: 30 minutos
Pré-requisitos
Esta lição suplementar faz parte de um tutorial de modelo de tabela, que deve ser concluído na ordem. Antes de executar as tarefas desta lição suplementar, conclua todas as lições anteriores.
Adicione a tabela dimSalesTerritory ao Projeto de Modelo de Tabela de Vendas pela Internet da AW
Para implementar a segurança dinâmica para este cenário do Adventure Works, inclua duas tabelas adicionais no seu modelo. A primeira tabela que você adicionará é dimSalesTerritory (como Sales Territory) do mesmo banco de dados AdventureWorksDW2012. Você aplicará um filtro de linha posteriormente à tabela Sales Territory que define os dados específicos que o usuário registrado pode procurar.
Para adicionar a tabela dimSalesTerritory
No SQL Server Data Tools, clique no menu Modelo e em Conexões Existentes.
Na caixa de diálogo Conexões Existentes, verifique se a conexão da fonte de dados BD Adventure Works do SQL está selecionada e clique em Abrir.
Se a caixa de diálogo Credenciais de Representação aparecer, digite as credenciais de representação usadas na Lição 2: Adicionar dados.
Na página Escolher Como Importar os Dados, deixe Selecionar itens em uma lista de tabelas e exibições para escolher os dados a serem importados marcada e, depois, clique em Avançar.
Na página Selecionar Tabelas e Exibições, selecione a tabela DimSalesTerritory.
Na coluna Friendly Name, digite Sales Territory.
Clique em Visualizar e Filtrar.
Desmarque a coluna SalesTerritoryAlternateKey e clique em OK.
Na página Selecionar Tabelas e Exibições, clique em Concluir.
A nova tabela será adicionada ao espaço de trabalho do modelo. Objetos e dados da tabela de origem dimSalesTerritory são importados para a nova tabela Sales Territory em seu Modelo de Tabela de Vendas pela Internet AW.
Depois que a tabela for importada, clique em Fechar.
Atribuir os nomes amigáveis de colunas
Nesta tarefa, você renomeará as colunas na tabela Sales Territory, atribuindo-lhes nomes amigáveis. Nem sempre é necessário atribuir nomes amigáveis a tabelas e/ou colunas. Fica mais fácil para seu projeto de modelo navegar no designer de modelos, assim como para usuários procurar objetos de modelo e dados em uma lista de campos de aplicativo cliente.
Para renomear Colunas na Tabela Sales Territory
No designer de modelos, renomeie as colunas na tabela Sales Territory:
Sales Territory
Nome de origem
Nome amigável
SalesTerritoryKey
Sales Territory Id
SalesTerritoryRegion
Sales Territory Region
SalesTerritoryCountry
Sales Territory Country
SalesTerritoryGroup
Sales Territory Group
Adicione uma tabela com dados de nome de usuário
Como a tabela dimEmployee no banco de dados de exemplo AdventureWorksDW2012 contém usuários do domínio AdventureWorks, e esses nomes de usuários não existem em seu próprio ambiente, crie uma tabela em seu modelo que contenha um exemplo pequeno (três) de usuários reais de sua organização. Você adicionará estes usuários como membros à nova função. Você não precisa das senhas para os nomes de usuários de exemplo, mas precisará dos nomes de usuários reais do Windows de seu próprio domínio.
Para adicionar uma tabela Segurança de Funcionário
Abra o Microsoft Excel, criando uma nova planilha.
Copie a tabela a seguir, inclusive a linha de cabeçalho, e cole-a na planilha.
Employee Id
Sales Territory Id
First Name
Last Name
Login Id
1
2
<nome do usuário>
<sobrenome do usuário>
<domain\username>
1
3
<nome do usuário>
<sobrenome do usuário>
<domain\username>
2
4
<nome do usuário>
<sobrenome do usuário>
<domain\username>
3
5
<nome do usuário>
<sobrenome do usuário>
<domain\username>
Na nova planilha, substitua o nome, o sobrenome e o domínio\nome de usuário pelos nomes e ids de logon de três usuários em sua organização. Coloque o mesmo usuário nas duas primeiras linhas, para Employee Id 1. Isso mostrará que este usuário pertence a mais de uma região de vendas. Deixe os campos Employee Id e Sales Territory Id como tal.
Salve a planilha como Funcionário de Exemplo.
Na planilha, selecione todas as células com dados de funcionário, inclusive os cabeçalhos e, depois, clique com o botão direito do mouse nos dados selecionados e clique em Copiar.
No SQL Server Data Tools, clique no menu Editar e em Colar.
Se Colar estiver esmaecido, clique em qualquer coluna de qualquer tabela na janela de designer de modelos e, depois, clique no menu Editar e em Colar.
Na caixa de diálogo Visualização de Colagem, em Nome da Tabela, digite Segurança do Funcionário.
Em Dados a serem colados, verifique se os dados incluem todos os dados de usuário e cabeçalhos da planilha Sample Employee.
Verifique se Usar a primeira linha como cabeçalhos de coluna está marcada e clique em OK.
Uma nova tabela nomeada Employee Security com dados de funcionário copiados da planilha Sample Employee é criada.
Criar relações entre as tabelas Internet Sales, Geography e Sales Territory
As tabelas Internet Sales, Geography e Sales Territory contêm uma coluna em comum, Sales Territory Id. A coluna Sales Territory Id na tabela Sales Territory contém valores, um Id diferente para cada região de vendas.
Para criar relações entre as tabelas Internet Sales, Geography e Sales Territory
No designer de modelos, em Exibição de Diagrama, na tabela Geography, clique e mantenha o botão do mouse pressionado na coluna Sales Territory Id, arraste o cursor para a coluna Sales Territory Id na tabela Sales Territory e solte o botão.
Na tabela Internet Sales, clique e mantenha o botão do mouse pressionado na coluna Sales Territory Id, arraste o cursor para a coluna Sales Territory Id na tabela Sales Territory e solte o botão.
Note que a propriedade ativa desta relação é False, o que significa que ela está inativa. Isso ocorre porque a tabela Internet Sales já tem outra relação ativa que é usada em medidas.
Ocultar a tabela Employee Security de aplicativos cliente
Nesta tarefa, você ocultará a tabela Employee Security, impedindo que ela apareça na lista de campo de um aplicativo cliente. Lembre-se de que, ao ocultar uma tabela, você não a protege. Os usuários ainda poderão consultar dados da tabela Employee Security se souberem como fazê-lo. Para proteger os dados da tabela Employee Security, impedindo que usuários possam consultar seus dados, você aplicará um filtro em uma tarefa posterior.
Para ocultar a tabela Employee de aplicativos cliente
- No designer de modelo, na Exibição de Diagrama, clique com o botão direito do mouse no título da tabela Employee e, depois, clique em Ocultar das Ferramentas de Cliente.
Criar uma função de usuário Sales Employees by Territory
Nesta tarefa, você criará uma nova função de usuário. Esta função incluirá um filtro de linha que define quais linhas da tabela Sales Territory são visíveis a usuários. O filtro é aplicado na direção de relação um para muitos a todas as outras tabelas relacionadas a Sales Territory. Você também aplicará um filtro simples que protege a tabela Employee Security inteira contra a consulta por qualquer usuário que seja membro da função.
Observação |
---|
A função Sales Employees by Territory criada nesta lição restringe os membros a procurar (ou consultar) apenas dados de vendas para a região de vendas à qual eles pertencem. Se você adicionar um usuário como um membro à função Sales Employees by Territory que também existe como um membro em uma função criada em Lição 12: Criar funções, obterá uma combinação de permissões. Quando um usuário for membro de várias funções, as permissões e os filtros de linha definidas para cada função serão cumulativos. Quer dizer, o usuário terá as maiores permissões determinadas pela combinação de funções. |
Para criar uma função de usuário Sales Employees by Territory
No SQL Server Data Tools, clique no menu Modelo e em Funções.
Na caixa de diálogo Gerenciador de Funções, clique em Novo.
Uma nova função com a permissão Nenhum é adicionada à lista.
Clique na nova função e, na coluna Nome, renomeie a função como Sales Employees by Territory.
Na coluna Permissões, clique na lista suspensa e selecione a permissão Leitura.
Clique na guia Membros e em Adicionar.
Na caixa de diálogo Selecionar Usuário ou Grupo, em Inserir o nome de objeto para seleção, digite o nome do usuário de exemplo que você usou ao criar a tabela Employee Security. Clique em Verificar Nomes para verificar se o nome de usuário é válido e, depois, clique em OK.
Repita esta etapa, adicionando os outros nomes de usuários de exemplo usados ao criar a tabela Employee Security.
Clique na guia Filtros de Linha.
Para a tabela Employee Security, na coluna DAX Filter, digite a fórmula a seguir.
=FALSE()
Ao concluir a criação da fórmula, pressione ENTER.
Esta fórmula especifica que todas as colunas são resolvidas com a condição Booliana false; portanto, nenhuma coluna da tabela Employee Security pode ser consultada por um membro da função de usuário Sales Employees by Territory.
Para a tabela Sales Territory, digite a fórmula a seguir.
='Sales Territory'[Sales Territory Id]=LOOKUPVALUE('Employee Security'[Sales Territory Id], 'Employee Security'[Login Id], USERNAME(), 'Employee Security'[Sales Territory Id], 'Sales Territory'[Sales Territory Id])
Ao concluir a criação da fórmula, pressione ENTER.
Nesta fórmula, a função LOOKUPVALUE retorna todos os valores da coluna Employee Security[Sales Territory Id], onde Employee Security[Login Id] equivale ao nome de usuário atual registrado no Windows, e Employee Security[Sales Territory Id] equivale ao Sales Territory[Sales Territory Id].
O conjunto de Sales Territory IDs retornado por LOOKUPVALUE é usado para restringir as linhas mostradas na tabela Sales Territory. Apenas as linhas em que Sales Territory ID para a linha estiver no conjunto de IDs retornadas pela função LOOKUPVALUE são exibidas.
Na caixa de diálogo Gerenciador de Funções, clique em Ok.
Testar a função de usuário Sales Employees by Territory
Nesta tarefa, você usará o recurso Analisar no Excel no SQL Server Data Tools para testar a eficácia da função de usuário Sales Employees by Territory. Você especificará um dos nomes de usuários adicionado à tabela Employee Security e como um membro da função. Este nome de usuário será usado como o nome de usuário efetivo na conexão criada entre o Excel e o modelo.
Para testar a função de usuário Sales Employees by Territory
No SQL Server Data Tools, clique no menu Modelo e em Analisar no Excel.
Na caixa de diálogo Analisar no Excel, em Especificar o nome do usuário ou função a ser usado para conectar-se ao modelo, selecione Outro Usuário Windows e clique em Procurar.
Na caixa de diálogo Selecionar Usuário ou Grupo, em Inserir o nome de objeto para seleção, digite um dos nomes de usuário incluídos na tabela Employee e clique em Verificar Nomes.
Clique em Ok para fechar a caixa de diálogo Selecionar Usuário ou Grupo e, depois, clique em Ok para fechar a caixa de diálogo Analisar no Excel.
O Excel será aberto com uma nova pasta de trabalho. Uma Tabela Dinâmica é criada automaticamente. A Lista de Campos de Tabela Dinâmica inclui a maioria dos campos de dados disponíveis no novo modelo.
Note que a tabela Employee Security não fica visível na Lista de campos de Tabela Dinâmica. Isso ocorre porque você optou por ocultar esta tabela de ferramentas de cliente em uma tarefa anterior.
Na lista Campo da Tabela Dinâmica, em ∑ Internet Sales (medidas), selecione a medida Internet Total Sales. A medida será inserida nos campos Values.
Na lista de Campo da Tabela Dinâmica, na coluna Sales Territory Id da tabela Sales Territory. A coluna será inserida nos campos Row Labels.
Note que valores de vendas pela Internet aparecem apenas para a uma região à qual pertence o nome de usuário efetivo que você usou. Se você selecionar outra coluna; por exemplo, City, da tabela Geography como campo Row Label, apenas as cidades da região de vendas à qual o usuário efetivo pertence serão exibidas.
Este usuário não pode navegar nem consultar dados de vendas pela Internet regiões que não sejam aquela à qual eles pertencem porque o filtro de linha definido para a tabela Sales Territory na função de usuário Sales Employees by Territory efetivamente protege dados para todos os dados relacionados a outras regiões de vendas.