Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 
fernando_tonial
Partner - Specialist
Partner - Specialist

Section Access Integrado ao Domínio

Introdução

Como visto no artigo sobre redução lógica de dados, é possível separar parte dos registros (linhas) de dados de acordo com o usuário autenticado no painel. Ou seja, dependendo do usuário parte dos dados estarão visíveis ou não visíveis. A criação da seção de acesso e as configurações de permissão podem ser consultadas no artigo mencionado. Como visto, uma tabela de usuários precisa ser definida ou carregada de uma base de dados que contenha as regras de acesso para cada grupo de registros. Por exemplo, é possível que um usuário chamado Franco Galati só possa ter acesso aos dados de venda da cidade de Brasília, enquanto outro usuário de nome Roberto Rocha poderá ler os dados nacionais de vendas. Ambos precisam estar registrados na seção de acesso por meio de uma carga de usuários, seja por uma estrutura INLINE ou por uma instrução LOAD que faça a consulta em uma base de dados. A seguir um fragmento do exemplo praticado no artigo sobre seção de acesso por usuário.

Section Access; LOAD * INLINE [

ACCESS, USERID, PASSWORD

ADMIN, Franco, senha

USER, Geilson, senha1

USER, Nilton, senha2

USER, Bruno, senha3

];

Section Application;

Apesar de eficaz, o registro dos usuários dentro do próprio painel (arquivo .QVW) dificulta a administração para organizações (companhias) com um número mais elevado de usuários. Desta forma, sempre que um usuário novo precisar de acesso ao painel, com ou sem redução de dados, o arquivo .QVW precisará ser aberto, editado, alterado e salvo. Alternativamente, o fragmento de código acima pode ser incorporado ao painel por meio de autenticação provida pelo sistema operacional, de maneira que o registro da senha não fique persistido no documento .QVW. Portanto, o fragmento de código a seguir integra a lista de usuários ao sistema operacional evitando que a senha seja gravada no próprio arquivo.

Section Access; LOAD * INLINE [

ACCESS, NTNAME, NTDOMAINSID

ADMIN, Franco.Galati, S-1-5-21-3468352827-1570571401-3998840258

USER, Nilton.Barcelos, S-1-5-21-3468352827-1570571401-3998840258

];

É possível observar no fragmento acima, retirado do artigo sobre redução lógica de dados, que a senha dos usuários não serão mais mantidas no próprio painel, passando ao sistema operacional a responsabilidade pela autenticação do usuário. Assim, quando o painel for aberto, se o login utilizado estiver autenticado pelo sistema operacional, nenhuma senha será solicitada. No entanto, este fragmento também impõe manutenção no arquivo .QVW sempre que um novo usuário for designado para acesso ao painel, ou mesmo para remover um acesso anterior.

Este artigo visa integrar o modelo de autenticação e autorização ao serviço de diretórios da instituição, um LDAP ou Microsoft Active Directory. Ou seja, ao invés de registrar individualmente cada usuário no próprio arquivo .QVW, é possível criar grupos de usuários no serviço de diretórios (AD ou LDAP) para que a autorização se dê com base na participação do usuário dentro de um determinado grupo. Assim, basta o administrador da rede adicionar o usuário ao grupo, ou removê-lo, para que as permissões individuais de acesso aos dados sejam aplicadas na próxima recarga do painel. Com isso, nenhuma atividade de edição do arquivo será necessária.

Integração com Serviço de Diretórios

OLEDB1.PNG

O serviço de diretórios (LDAP ou Active Directory) contém uma base de dados não estruturada como banco relacional, mas que pode ser lida a partir de consultas no QlikView semelhante a uma carga realizada para qualquer outra tabela ou arquivo de dados. Esta conexão poderá substituir as cargas de usuários na seção de acesso, mas primeiro é preciso realizar a conexão para o serviço. Portanto, a partir do editor de script, proceda com os seguintes passos:

1. A partir das opções de conexão a banco de dados, selecione OLEDB e clique no botão Conectar.

DataSource1.PNG

2. Quando a lista de provedores for exibida, escolha OLE DB Provider for Microsoft Directory Services.

3. Na janela de conexão, informe o Data Source no formato LDAP://dominio.com.

Nota:  A conexão para um serviço de diretórios exige um usuário com permissão de leitura (conexão) a base de usuários. 

DataSource2.PNG

4. Informe o usuário que fará a consulta ao serviço de diretórios, no formato domínio\usuário.

5. Clique no botão Test Connection para testar a conexão com o serviço de diretórios.

6. Caso uma mensagem de advertência seja exibida, continue respondendo Yes na janela de notificação.

O resultado será uma mensagem de teste bem sucedido. Portanto, o procedimento de conexão ao serviço de diretórios pode ser concluído. Neste momento, uma instrução será inserida no script, semelhante ao comando abaixo apresentado.

OLEDB CONNECT TO [Provider=ADsDSOObject; User ID=qknow\franco.galati; Encrypt Password=False; Data Source=LDAP://qknow.com.br; Mode=Read; Bind Flags=0; ADSI Flag=-2147483648] (XPassword is IQONdCNOULZEHacGGLIaI); 

Salvando o projeto e executando o processo de Reload será possível observar a conexão sendo estabelecida com sucesso para o serviço de diretórios. O próximo passo é realizar uma consulta para obter a lista de grupos e usuários, que alimentará a seção de acesso. Assuma, para efeito de exemplo, que o Active Directory (ou LDAP) contenha alguns grupos destinados aos painéis do QlikView, entre eles os seguintes:

  • QlikView Dashboard Admin: Usuários que poderão visualizar todos os dados do painel e atuarão como administradores do dashboard (.QVW).
  • America Users: Usuários com privilégios de acesso (não administrativo ao painel) e que poderão visualizar os dados dos paises do continente americano.
  • Europe Users: Usuários com privilégios não administrativos que poderão visualizar apenas os dados de paises europeus ou fora do continente americano.

O propósito destes grupos é adicionar usuários ao serviço de diretórios que possam ser identificados automaticamente pela seção de acesso dentro do painel e com isso possa designar os níveis de permissão e acesso aos dados que estiverem publicados, sem que para isso seja necessário abrir o arquivo .QVW para realizar manutenções na seção de acesso. Uma vez que cada grupo tem seus respectivos usuários, é preciso fazer a leitura dos grupos desejados dentro do documento e atribuir as permissões de seção para cada um deles. O fragmento de código a seguir é usado para varrer os grupos e definir quais são os usuários que pertencem a cada um.

FOR Each arg in 'QlikView Dashboard Admin','America Users','Europe Users' Groups: LOAD distinguishedName As GroupKey, cn As Grupo; SQL select distinguishedName, cn FROM 'LDAP://DC=qknow,DC=com, DC=br' WHERE objectCategory='group' AND cn ='$(arg)'; LET vRows = NoOfRows('Groups'); LET vGK = FieldValue('GroupKey', vRows); Users: LOAD '$(vGK)' As GroupKey, Upper(sAMAccountName) As LanID, cn As Name; SQL SELECT sAMAccountName, cn FROM 'LDAP://DC=qknow,DC=com, DC=br' WHERE memberOf='$(vGK)'; Next arg; 

A instrução FOR realiza um laço até o comando Next, o que fará com o QlikView execute as instruções entre estes dois comandos três vezes, uma vez para cada valor definido na variável arg (argumento). Como três valores (os três grupos) estão definidos na variável, então por três vezes ocorrerá a execução dos comandos. Dentro do laço, o comando LOAD obtém o primeiro grupo (QlikView Deashboard Admin) na primeira execução, seguido pela leitura dos usuários que pertencem a este grupo. O mesmo ocorrerá para os dois restantes.

Nota: É importante que a codificação acima seja inserida em um script oculto, para aumentar a segurança do dos critérios estabelecidos e evitar que possam ser vistos ou modificados. Para maiores informações sobre scripts ocultos consulte o item script oculto no artigo sobre redução lógica de dados. 

Até este ponto do script foi realizada a leitura do serviço de diretórios em busca dos grupos e usuários que farão parte do SECTION ACCESS. O resultado parcial pode ser visto em listas adicionadas a interface principal do painel, como na figura a seguir.

SectionAccessWithAd1.PNG

Como boa prática, recursos não utilizados devem ser liberados da memória. Portanto, as variáveis de script definidas pela instrução LET podem ser excluídas. Para isso, basta associar a variável a um valor nulo. Mais exemplos podem ser encontrados no artigo sobre dicas rápidas.

LET arg   = Null(); LET vRows = Null(); LET vGK   = Null(); 

Seção de Acesso com Grupos do Domínio

Integrar a seção de acesso com usuários do domínio envolve o processo de criação de uma tabela de usuários que terão acesso ao painel com base no grupo em que fazem parte. Por isso, é preciso montar uma tabela na estrutura esperada pela SECTION ACCESS. Como a ideia é que não haja manutenção do painel na medida em que usuários são adicionados ou removidos de grupos no serviço de diretórios, um comando LOAD a partir dos dados previamente carregados criará a estrutura esperada. Como visto no artigo sobre seção de acesso por usuário, um dos campos esperados é o tipo de acesso (ACCESS) que pode ser administrador ou usuário comum. Para criar o campo com os níveis esperados, será utilizada uma tabela de mapeamento.

Permissions:

Mapping LOAD * INLINE [

Group, Permission QlikView Dashboard

Admin, ADMIN Europe Users,

USER America Users, USER];

A criação da tabela de seção de acesso será realizada pela instrução a seguir que obtém os campos a partir das tabelas Groups e Users carregadas acima neste artigo.

Section Access;

LOAD

ApplyMap('Permissions', Grupo) As ACCESS,

'S-1-5-21-2130454873-934382291-718547170' As NTDOMAINSID, GroupKey,

Grupo As GROUPS Resident Groups; Left Join LOAD LanID As NTNAME, GroupKey Resident Users;

Com a seção de acesso configurada, é preciso ligá-la ao modelo de dados. Para isso, a seção de aplicação é utilizada tendo um campo em comum com a seção de acesso. Desta forma, quando o usuário for autenticado no painel automaticamente a seção de acesso selecionará o valor correspondente ao grupo que o usuário faz parte, derivando a mesma seleção via modelo associativo ao grupo da tabela presente na seção de aplicação.

LOAD * INLINE [

GROUPS, Countries Europe

Users, Spain America

Users, Mexico Europe

Users, France America

Users, Brazil Europe

Users, Austria ];

Lembre-se!!:

  • Redução significa a capacidade do QlikView de apresentar um conjunto de dados de acordo com o usuário autenticado.
  • A parte do script que determina a redução de dados é inserida geralmente em uma guia de script oculto.
  • O que torna a redução possível é a ligação entre a seção de acesso e a seção de aplicação.
  • Ajustes no documento são necessários caso o processo desejado para segurança seja a redução de dados de acordo com a autenticação do usuário.
  • É possível restringir o acesso aos dados para o usuário do sistema operacional previamente autenticado.

Se qualquer um dos lembretes acima é novidade para você, recomendamos fortemente a leitura do artigo sobre redução lógica de dados.

Testando a Redução com Usuários do Domínio

Assumindo que todas as configurações necessárias para uma redução foram realizadas (vide o artigo sobre redução lógica de dados), basta carregar os dados do painel (exemplo a seguir) e acessar o dashboard com um usuário que faz parte de um dos grupos previamente configurado no sistema operacional. Para testar o funcionamento, a seguinte carga pode ser realizada.

LOAD * INLINE [

Countries, City, Company, Argentina, Buenos Aires, Los Espandrilos Fantasticos Austria, Graz, Ski Store Belgium, Bruxelles, De la Vita Brazil, Campinas, Paintho da Gama Brazil, Rio de Janeiro, Da Bikini Expertu Brazil, São Paulo, Roba di Piel Brazil, São Paulo, Tendha do Flamengo Canada, Tsawassen, Big Foot Shoes France, Nantes, Le Sais de Rión France, Paris, Chateau de Ville Germany, Stuttgart, Autokleider Ireland, Cork, Boleros Mexico, México D.F., Don Balón Mexico, México D.F., Los Sombreros Gigantes Portugal, Lisboa, El Traige do Benfica Portugal, Lisboa, La Roba do Santho Spain, Barcelona, El Chandal del Barca Spain, Madrid, Las Corbatas Spain, Sevilla, Los Trajes de Matador Sweden, Stockholm, Stephanies ];

Note que entre a seção de aplicação e a carga de dados acima existe um campo em comum: Countries. Para realizar o teste é preciso que as seguintes configurações estejam em vigor:

  • Nas propriedades do documento (CTRL + ALT + D), na guia Segurança (Security), retire as ações que o usuário comum não poderá realizar.
  • Na guia Abrindo (Opening), marque a opção Redução Inicial de Dados Baseada na Seção de Acesso.
  • Certifique-se de ter uma cópia do painel sem as restrições de acesso, caso algo dê errado nas configurações.

Para que as ações tenham efeito é preciso que o script seja executado novamente, o arquivo salvo e o QlikView encerrado (fechado).

Iniciando o QlikView novamente com o usuário Franco Galati é possível notar que todos os países são exibidos, embora na lista Name apenas o nome do usuário seja exibido. Neste processo, o QlikView não solicitou ao usuário suas credenciais, uma vez que a autorização fora feita via Section Access e a autenticação via sistema operacional. O resultado são as listas abaixo exibidas.SectionAccessWithAd2.PNGÉ fácil notar o resultado. Todos os países estão sendo exibidos com suas respectivas empresas e cidades. Agora faremos uma inversão em nível de administração no serviço de diretórios de usuários no Active Directory. O usuário Nilton Barcelos passará a compor o grupo QlikView Dashboard Admin, enquanto o usuário Franco Galati será removido deste grupo e passará para Europe Users. Nenhuma modificação em nível de arquivo .QVW será realizada. A alteração se dará somente no serviço de diretórios. ActiveDirectory1.PNGActiveDirectory2.PNG A primeira janela apresenta o grupo Europe Users com o usuário Franco Galati adicionado a ele, enquanto a segunda mostra o grupo de administradores com o usuário Nilton Barcelos. Cada vez que o painel é recarregado ocorre a atualização das permissões do usuário e seus respectivos grupos. Note o que é visualizado pelo usuário Franco Galati que pertence ao novo grupo. Lembre-se! Nenhuma modificação foi realizada em nível de documento (QVW) ou de QMC.SectionAccessWithAd3.PNG
Considerações finais:

  • Sempre que usuários forem adicionados ou removidos de grupos do domínio, o painel precisará ser recarregado.
  • A carga agendada do painel no QlikView Server pode ser suficiente para atualizar a lista dos usuários e grupos na seção de acesso.
  • Nas configurações acima nenhuma mudança é necessária no painel para que novos usuários possam ter acesso aos dados com as reduções propostas.
  • Para modificar as permissões e os dados acessíveis por um usuário, basta adicioná-lo ou removê-lo do grupo para o qual se deseja alterar as permissões.
Don't Worry, be Qlik.
Labels (2)
6 Replies
eduardo_sommer
Partner - Specialist
Partner - Specialist

Ótimo artigo, Fernando

Obrigado por compartilhar

Eduardo

Marcio_Campestrini
Specialist
Specialist

Fernando,

Boa abordagem sobre a questão de redução de dados, algo que é cada vez mais requisitado nas empresas com múltiplos usuários.

Valeu.

Márcio Rodrigo Campestrini
brunoluis
Enthusiast
Enthusiast

Ótimo artigo meu amigo, me ajudou muito.

Só uma observação.

Onde contem:

LET vGK = FieldValue('LastGroup', vRows);

O correto é:

LET vGK = FieldValue('GroupKey', vRows);

fernando_tonial
Partner - Specialist
Partner - Specialist
Author

Realmente estava equivocado, já alterado. Obrigado.

Don't worry, be Qlik.

Tonial.

Don't Worry, be Qlik.
Clever_Anjos
Employee
Employee

fernando.tonial‌, alguma sugestão de como armazenar o campo de redução fora do Qlik?

No seu exemplo é uma inline, seria possível usar o próprio AD para armazenar essa informação?

LOAD * INLINE [

GROUPS, Countries Europe

Users, Spain America

Users, Mexico Europe

Users, France America

Users, Brazil Europe

Users, Austria ];

fernando_tonial
Partner - Specialist
Partner - Specialist
Author

cleveranjos, é possível utilizar informações externas ao Qlik, como um tabela de banco de dados ou até mesmo um flat file.
Sobre gravar essa informação no AD, acredito que seja possível sim, basta saber qual atributo essa informações será gravada e fazer a busca das informações.

Don't worry, be Qlik.

Tonial.

Don't Worry, be Qlik.