Usando o wrapper do LDAP com o InfoSphere Federation Server

Aproveite e integre seus dados de diretório em um ambiente SQL

O wrapper do LDAP é um pacote Java™ puro baseado na tecnologia do SDK do wrapper Java do InfoSphere™ Federation Server. Ao fornecer acesso somente leitura para servidores de protocolo LDAP em um ambiente SQL, o wrapper do LDAP facilita a integração e a conectividade entre dados de negócios em um banco de dados relacional e dados de recursos humanos no servidor do diretório do LDAP.

Yun Feng Sun, Advisory Software Engineer, IBM

Sun Yun FengYun Feng Sun is an Advisory Software Engineer at the IBM China Software Development Lab. He currently works for the development team on the IBM InfoSphere Federation Server product.



Eileen Lin, Senior Technical Staff Member, IBM

Dr. Eileen Lin is a Senior Technical Staff Member in Silicon Valley Laboratory in San Jose, California. She is one of the original members responsible for the success of DataJoiner, a federated database product that is the predecessor of the federation technology in DB2. Currently, she is the architect for the data federation technology in WebSphere Information Integrator. Dr. Lin has many patents covering areas such as federation technology, query optimization and parallel query processing.



Art Kaufmann, Senior Software Engineer, IBM

Art Kaufmann is a senior software engineer working in information integration through federation and Web services. Art is technical lead for the SOA and Federation team responsible for the wrapper SDK.



Martin Klumpp, Technical Lead, Software Engineer, IBM

Martin Klumpp photoMartin Klumpp is a technical lead for the InfoSphere FastTrack product and is located at IBM Silicon Valley Laboratory in San Jose, California. He participated in the LDAP wrapper design and development in 2005.


nível de autor Contribuidor do
        developerWorks

Xing Yu Liu, Software Engineer Intern, IBM

Xing Yu Liu photoXing Yu Liu was a software engineer intern at the IBM China Software Development Lab and was involved into the LDAP wrapper development.



23/Set/2010

Antes de iniciar

Sobre este tutorial

Este tutorial introduz um wrapper do LDAP baseado em Java que ajuda o InfoSphere Federation Server a acessar e integrar dados do diretório do LDAP. O tutorial inicia destacando o valor de negócios do wrapper, depois define as etapas detalhadas do uso do wrapper e termina com um cenário simples para juntar dados do LDAP com outros dados empresariais. O código binário do wrapper do LDAP está disponível para download na seção Download .

Objetivos

Este tutorial mostra como configurar e usar o wrapper do LDAP com o InfoSphere Federation para ler dados de diretório no servidor do diretório do LDAP. Depois de fazer isso, você poderá juntar e unir dados em seu servidor do diretório do LDAP com outros dados corporativos acessíveis a seu banco de dados federado.

Pré-requisitos

Este tutorial foi escrito usando o InfoSphere Federation Server e o servidor do diretório do LDAP. Você deverá ter familiaridade geral com LDAP, bancos de dados relacionais e conceitos do InfoSphere Federation Server, incluindo servidor federado, wrapper, definição de servidor, mapeamento de usuário e apelidos.

Requisitos do sistema

Para concluir as etapas deste tutorial, é preciso instalar os seguintes softwares:

  • InfoSphere Federation Server: Este tutorial é baseado no InfoSphere Federation Server Versão 9.5. O InfoSphere Federation Server v9.1 e v9.7 também podem ser usados. Para obter detalhes, consulte o Web site do InfoSphere Federation Server.
  • Servidor do diretório do LDAP: Este tutorial é baseado no Tivoli Directory Server V6.0. Para obter detalhes, consulte o Web site do Tivoli Directory Server. No entanto, qualquer servidor compatível com o diretório do LDAP v3 pode ser usado.

Introdução

Hoje, exceto pelas mais simples, todas as tarefas de negócio requerem o uso de informações de uma variedade de fontes de dados que os negócios construíram durante muitos anos. Os dados podem estar armazenados em uma variedade de formatos, como fontes de dados relacionais ou não relacionais. Este ambiente complexo e dinâmico apresenta desafios significativos para usuários e aplicativos de negócios, e para as pessoas de TI que precisam mantê-lo e gerenciá-lo. A tecnologia de federação protege o solicitante de todas as complexidades associadas com o acesso a dados em diversos locais, incluindo conectividade, semântica, formatos e métodos de acesso. Usando uma linguagem baseada em padrões, como Linguagem de Consulta Estruturada (SQL), o InfoSphere Federation Server permite que os usuários, ou os aplicativos agindo em seu nome, acessem informações de forma transparente, sem preocupações com sua implementação física.

O wrapper do LDAP adiciona valor à tecnologia de federação existente permitindo que ela acesse e integre dados no servidor do diretório do LDAP, que é amplamente usado em ambientes corporativos para armazenar dados de recursos humanos e informações de identidade. Ele foi desenvolvido com Java puro e é baseado na tecnologia do SDK do wrapper Java do InfoSphere Federation Server. Internamente, ele usa JNDI para acessar o servidor do diretório do LDAP.

A figura 1 ilustra a arquitetura do wrapper do LDAP.

Figura 1. A arquitetura do wrapper do LDAP
Federated client uses SQL to accesss federated server, which uses LDAP wrapper and JNDI to access LDAP Server. Results at the client is a relational table.

O protocolo LDAP ou LDAP, é um protocolo de aplicativo para consultar e modificar serviços de diretório. A unidade de informação básica armazenada no diretório é chamada de entrada LDAP, que é definida por meio do esquema LDAP e organizada em uma estrutura de Directory Information Tree (DIT). Uma entrada LDAP pode ser identificada por seu Nome Distinto (DN).

A figura 2 exibe amostras de entradas de departamento, que são armazenadas no DIT. A classe de objeto é department e o DN é ou=IBM (ou: unidade organizacional).

Figura 2. Um exemplo de LDAP DIT
chart shows ou=IBM, connected to 4 departments: QA, Development, Marketing, and Sales, each with employees, country, and location

Com o wrapper do LDAP, é possível mapear entradas LDAP que estejam sob um DN com o mesmo esquema para um apelido LDAP. É possível, então, usar a SQL para consultar entradas LDAP mapeadas com o apelido LDAP através do InfoSphere Federation Server. Basicamente, o mapeamento é executado especificando o DN e a classe de objeto das entradas LDAP. Por exemplo, se você criou o apelido DEPARTMENT com o DIT mostrado na figura 2, é possível usar a SQL exibida na listagem 1 para recuperar todos os departamentos com menos de 20 funcionários.

Listagem 1. Consulta pelo apelido DEPARTMENT
SELECT * FROM DEPARTMENT WHERE EMPLOYEES < 20;

NAME        EMPLOYEES   COUNTRY   LOCATION
----------  ----------- --------- ---------
Marketing   12          USA       CA 
Sales       10          USA       CA

Este tutorial fornece instruções detalhadas sobre como usar o wrapper do LDAP.


Implementação do wrapper do LDAP

Faça o download do pacote do wrapper do LDAP

O wrapper do LDAP está disponível na seção Download deste tutorial. Faça o download do LDAPWrapper.zip em seu sistema de arquivos local e descompacte-o em um diretório. O arquivo zip contém os seguintes arquivos:

  • LDAPWrapper.jar é o pacote Java do wrapper do LDAP. Coloque o arquivo JAR no diretório <caminho de instalação do InfoSphere Federation Server >/function . Este diretório é o caminho da classe padrão para o InfoSphere Federation Server JVM. Ou é possível colocar o pacote em qualquer caminho que deseje e atualizar sua variável de ambiente CLASSPATH para incluir o caminho.
  • LDAPWrapper.xml e LDAPWrapper.properties são usados pelo centro de controle do DB2 para definir objetos do wrapper do LDAP no centro de controle. Coloque o LDAPWrapper.xml no diretório <caminho de instalação do InfoSphere Federation Server >/cfg . Coloque LDAPWrapper.properties no diretório <caminho de instalação do InfoSphere Federation Server >/tools/en_US/wrapper_cfg .
  • create_function_mappings.ddl contém uma instrução DDL para criar um mapeamento de função para o wrapper do LDAP. Este arquivo ddl é usado posteriormente no tutorial.

Configure os parâmetros dbm cfg para o wrapper do LDAP

O wrapper do LDAP é um wrapper baseado em Java que usa JDNI para se conectar ao servidor do diretório do LDAP. As bibliotecas de classe JNDI e alguns dos recursos que o wrapper do LDAP usa estão incluídos no Java 2 SDK V1.4.2 e posteriores. Use o JDK que acompanha o InfoSphere Federation Server.

Para definir os parâmetros dbm cfg para wrappers do LDAP, faça o seguinte:

  1. Defina o parâmetro de configuração do gerenciador de banco de dados chamado JDK_PATH para apontar para uma instalação válida do JDK.

    Se o JDK foi instalado com seu produto InfoSphere Federation Server, este parâmetro está definido adequadamente. No entanto, se o parâmetro do gerenciador do banco de dados (dbm cfg) for redefinido, será necessário especificar onde o SDK para Java está instalado. Para tanto, use o comando na listagem 2 e substitua <your_jdk_path > com o caminho efetivo de seu JDK.

    Listagem 2. Atualizar JDK PATH
    db2 update dbm cfg using JDK_PATH <your_jdk_path>

    Se seu JDK estiver instalado no diretório $HOME/sqllib/java/jdk, é possível redefinir o caminho como uma cadeia de caractere vazia ('').

  2. Aumente o tamanho de heap da Java VM.

    Por padrão, o tamanho de heap da Java VM é definido para 4096 páginas (4K) no HP-UX e 2048 páginas em todos os outros sistemas operacionais no InfoSphere Federation Server V9.5. Isto poderá não ser suficiente para carregar e executar o wrapper do LDAP, portanto será preciso aumentar o tamanho de heap.

    Por exemplo, execute o comando na listagem 3 para definir o tamanho de heap de sua Java VM para 8192 páginas:

    Listagem 3. Atualizar o tamanho do heap Java
    db2 update dbm cfg using JAVA_HEAP_SZ 8192
  3. Depois de atualizar a configuração do gerenciador do banco de dados, é preciso reiniciar o DB2 usando os comandos exibidos na listagem 4.
    Listagem 4. Reiniciar o DB2
    db2 terminate
    db2stop
    db2start

Adicionando fontes de dados LDAP a um servidor federado

Para configurar o servidor federado para acessar fontes de dados LDAP, é preciso fornecer ao servidor federado informações sobre as fontes de dados e objetos que deseja acessar. É possível configurar o servidor federado para acessar fontes de dados LDAP usando o centro de controle do DB2 ou a linha de comando do DB2. O centro de controle do DB2 inclui um assistente para configurar o servidor federado.

Antes de iniciar

  • A federação deverá estar instalada em um servidor que agirá como o servidor federado.
  • Deverá existir um banco de dados no servidor federado.

Para adicionar o servidor do diretório do LDAP e os objetos LDAP a um servidor federado, faça o seguinte:

  1. Registre as funções customizadas para o wrapper do LDAP.
  2. Registre o wrapper do LDAP.
  3. Registre as definições do servidor do LDAP.
  4. Opcionalmente: crie o mapeamento de usuário do LDAP.
  5. Registre apelidos para as entradas do LDAP.

Registrando as funções customizadas para o wrapper do LDAP

É preciso registrar as funções customizadas do LDAP antes de registrar o wrapper do LDAP. As funções customizadas do LDAP são usadas com o wrapper do LDAP para transmitir predicados para o mecanismo de consulta no servidor de origem de dados do diretório do LDAP.

É preciso registrar todas as funções customizadas em cada instância do banco de dados federado em que o wrapper do LDAP estiver instalado. Todas as funções customizadas do wrapper do LDAP deverão estar registradas com o nome do esquema ldap. Para cada uma das funções customizadas do LAP, emita a instrução CREATE FUNCTION com as palavras-chave AS TEMPLATE DETERMINISTIC NO EXTERNAL ACTION . O nome completo de cada função é ldap.function_name.

O exemplo mostrado na listagem 5 registra uma versão da função ldap.search_dn :

Listagem 5. Exemplo do modelo de criação de função
CREATE FUNCTION ldap.search_dn (varchar(),varchar()) 
    RETURNS INTEGER AS TEMPLATE 
    DETERMINISTIC NO EXTERNAL ACTION;

Para registrar as funções customizadas, é possível usar o arquivo de amostra create_function_mappings.ddl do pacote que foi transferido por download, que inclui as instruções CREATE FUNCTION para cada uma das possíveis combinações de tipos de dados. A seguir, você pode se conectar ao banco de dados federado e usar o comando da listagem 6 para registrar as funções customizadas em cada banco de dados federado.

Listagem 6. Registrar as funções customizadas do wrapper do LDAP
db2 connect to <federated database>

db2  -tvf create_function_mappings.ddl

A pesquisa do LDAP usa duas categorias de funções:

  • Funções para configurações de pesquisas
  • Funções para filtros de pesquisa

Uma seção posterior do tutorial mostra como usar essas funções.

As tabelas 1 e 2 listam as descrições das funções customizadas que são usadas com o wrapper do LDAP.

Tabela 1. Funções customizadas para os parâmetros de configuração da pesquisa do LDAP
FunçãoDescrição
ldap.search_dn(arg1,arg2)agr1 especifica qualquer nome de coluna do apelido que aplicará a alteração.
arg2 especifica o objeto base de pesquisa do LDAP - o ponto de partida da pesquisa no DIT.
Ao usar esta função para consultar um apelido do LDAP, ela substituirá a opção DN definida no apelido.
ldap.search_scope(arg1,arg2)agr1 especifica qualquer nome de coluna do apelido que aplicará a alteração.
arg2 especifica a profundidade de pesquisa no DIT a partir do objeto base.

O valor do argumento pode ser um dos seguintes:

  • OBJECT— Pesquisa somente o objeto base.
  • ONELEVEL— Pesquisa somente os filhos imediatos do objeto base. O objeto base em si não é examinado.
  • SUBTREE— Pesquisa o objeto base e todos os seus descendentes.

Observação: Para as duas funções na tabela 1, o tipo de dado para os parâmetros arg1 é qualquer tipo de dado que o wrapper do LDAP suporta. O tipo de dado para os parâmetros arg2 é varchar().

Tabela 2. Funções personalizadas para o filtro de pesquisa do LDAP
FunçãoDescrição
ldap.eq(arg1,arg2)Operador= no filtro de pesquisa do LDAP.
ldap.ge(arg1,arg2)Operador>= no filtro de pesquisa do LDAP.
ldap.le(arg1,arg2)Operador<= no filtro de pesquisa do LDAP.
ldap.gt(arg1,arg2)No filtro de pesquisa do LDAP, não há um operador > direto. A função gt será convertida para &( arg1>=arg2)(! (arg1=arg2))
ldap.lt(arg1,arg2)No filtro de pesquisa do LDAP, não há um operador < direto. A função lt será convertida para &( arg1<=arg2)(! (arg1=arg2))

Observação:

Para as funções listadas na tabela 2, arg1 e arg2 têm o mesmo tipo de dado. Eles são os tipos de dado que o wrapper do LDAP suporta, exceto BLOB e CLOB. arg1 especifica o nome de uma coluna. arg2 especifica o valor a ser comparado. Para ldap.eq, o caractere * pode ser usado em arg2 e corresponde a qualquer subcadeia se a sintaxe do atributo do LDAP suportar correspondência de subcadeia.

Para a coluna que representa um atributo com vários valores, as entradas com qualquer um dos valores correspondentes são recuperadas e todos os valores concatenados com o valor da opção de coluna de apelido DELIMITER poderão ser exibidos.

Registrando o wrapper do LDAP

É preciso registrar um wrapper para acessar fontes de dados do LDAP. Servidores federados usam wrappers para comunicação e recuperação de dados de fontes de dados.

Para registrar um wrapper, use a instrução CREATE WRAPPER . Por exemplo, para registrar o ldap_wrapper no servidor federado que usa o sistema operacional AIX, emita a instrução na listagem 7.

Listagem 7. Instrução Create wrapper
CREATE WRAPPER ldap_wrapper LIBRARY 'libdb2qgjava.a' options( 
    UNFENCED_WRAPPER_CLASS 'com.ibm.wfs.wrapper.ldap.UnfencedLdapWrapper');
  • LIBRARY 'libdb2qgjava.a'

    Este é o nome do arquivo de biblioteca do SDK do wrapper Java para os servidores federados que usam sistemas operacionais AIX. O nome da biblioteca a usar em plataformas Windows é 'db2qgjava.dll'. O nome da biblioteca a usar no AIX é 'libdb2qgjava.a', e, em outras plataformas UNIX, o nome da biblioteca é 'libdb2qgjava.so'.

  • UNFENCED_WRAPPER_CLASS 'com.ibm.wfs.wrapper.ldap.UnfencedLdapWrapper'

    A opção UNFENCED_WRAPPER_CLASS do wrapper é necessária para qualquer wrapper baseado em Java, que aponta para o nome da classe do wrapper unfenced do wrapper do LDAP.

Registrando a definição do servidor para uma fonte de dados do LDAP

Depois de registrar o wrapper, é preciso registrar um servidor correspondente.

Para o wrapper do LDAP, você cria uma definição de servidor, pois o wrapper precisa receber informações de conexão que possa usar para se conectar ao servidor de origem de dados do diretório do LDAP.

Para registrar a definição do servidor do LDAP no sistema federado, use a instrução CREATE SERVER .

O objeto do servidor deverá estar associado com o wrapper do LDAP que foi registrado usando a instrução CREATE WRAPPER .

Por exemplo, suponha que queira criar um objeto do servidor chamado ldap_server para um servidor de fonte de dados do diretório do LDAP que resida na mesma máquina que o servidor federado, escutando na porta 389. A comunicação com o servidor de fonte de dados do diretório do LDAP não é criptografada e o tempo limite de conexão está definido para 3 minutos. É possível usar a instrução CREATE SERVER mostrada na Listagem 8 para registrar o objeto do servidor.

Listagem 8. Instrução Create server
CREATE SERVER ldap_server WRAPPER ldap_wrapper 
   OPTIONS (URL 'ldap://localhost:389', TIMTOUT ‘3');

É possível usar as opções de servidor URL e TIMEOUT especificadas na instrução CREATE SERVER , como mostra a Tabela 3.

Tabela 3. Opções do servidor do LDAP
Opções do servidorDescrição
URLObrigatório
Tipo: cadeia de caractere
Esta é a URL de conexão para o servidor de fonte de dados do diretório do LDAP
TIMEOUTOpcional
Tipo: cadeia de caractere Ela deve ser uma cadeia de caractere com número inteiro.
O valor de tempo limite para a conexão (operação bind do LDAP) é expresso em minutos.
O valor padrão é de 2 minutos.

Formato do valor da opção URL

É possível usar uma lista explícita de hosts ou um host padrão para especificar um ou mais servidores de destino do diretório do LDAP.

  • Lista explícita de host

    É possível especificar explicitamente o nome do host no qual o servidor de fonte de dados do diretório do LDAP está sendo executado. Você pode usar a opção URL para se conectar a uma lista de hosts, separada por espaços em branco, e cada host pode, opcionalmente, usar a forma scheme://host:port ou scheme://host. Os exemplos na listagem 9 mostram como o wrapper do LDAP conecta-se com o primeiro servidor ativo da lista.

    Listagem 9. Lista explícita de hosts na opção URL do servidor
    CREATE SERVER ldap_server WRAPPER ldap_wrapper 
       OPTIONS ( URL 'ldap://server1');
       
    CREATE SERVER ldap_server WRAPPER ldap_wrapper 
       OPTIONS ( URL 'ldap://server1:389');
       
    CREATE SERVER ldap_server WRAPPER ldap_wrapper 
       OPTIONS ( URL 'ldap://server1:389 ldap://server2');
  • Hosts padrão

    Se você registrou serviços LDAP no DNS de sua infraestrutura de rede, então, com a ajuda do JNDI, o wrapper do LDAP pode localizar um ou mais servidores padrão de fonte de dados do diretório do LDAP com o seguinte formato:

    Listagem 10. Hosts padrão na opção URL do servidor
    CREATE SERVER ldap_server WRAPPER ldap_wrapper OPTIONS (URL 'ldap://');

    Se o parâmetro host estiver definido como ldap://, então a biblioteca LDAP tentará encontrar um ou mais servidores padrão de fonte de dados do diretório do LDAP que tenham portas não SSL. Se encontrar mais do que um servidor padrão, então ela processará a lista em sequência até que encontre um servidor ativo.

    É possível adicionar um nome distinto como filtro para a URL para selecionar servidores de fonte de dados do diretório do LDAP com base nos sufixos do servidor. Se a porção principal do DN for uma correspondência exata do sufixo de um servidor depois de normalizar maiúsculas e minúsculas, então o servidor é adicionado à lista de servidores candidatos. Por exemplo, a listagem 11 mostra uma instrução que retorna os servidores padrão de fonte de dados do LDAP que têm um sufixo que suporta somente o DN especificado.

    Listagem 11. Hosts padrão com sufixo na opção URL do servidor
    CREATE SERVER ldap_server WRAPPER ldap_wrapper 
       OPTIONS (URL 'ldap:///cn=fred, dc=austin, dc=ibm, dc=com’);

    O servidor tem o sufixo dc=austin, dc=ibm, dc=com que corresponde aos parâmetros de procura. Se mais de um servidor padrão for localizado, então a lista é processada em sequência até que um servidor ativo seja encontrado.

O wrapper do LDAP permanece conectado ao servidor de fonte de dados do diretório do LDAP até que a conexão seja removida.

TIMEOUT

O wrapper do LDAP interrompe uma tentativa de conexão se não conseguir estabelecer uma conexão com o servidor de fonte de dados do diretório do LDAP dentro de um certo período limite. O tempo de espera padrão definido pelo wrapper do LDAP é de dois minutos. É possível alterar o período do tempo de espera definindo o valor da opção como uma cadeia de caractere de um inteiro, representando o tempo de espera da conexão em minutos.

O modelo de segurança do wrapper do LDAP

O wrapper do LDAP usa segurança do JNDI, que são os modelos de segurança na plataforma Java subjacente e no protocolo LDAP. A criptografia SSL é usada e, como pré-requisito, o servidor de fonte de dados do diretório do LDAP deverá estar configurado para o SSL. O certificado SSL deve estar registrado com o Federation Server JRE. A seguir, é preciso instalar o certificado do servidor ou de CA em seu banco de dados Federation Server JRE de certificados confiáveis. Por exemplo, a listagem 12 mostra como adicionar um certificado ao JRE.

Listagem 12. Adicionar certificado ao JRE
cd <Federation_Server_JRE_PATH>/lib/security
keytool -import -file server_cert.cer -keystore cacerts

Para obter mais informações sobre como registrar um certificado SSL, consulte os documentos do JDK.

É possível solicitar SSL de URLs de LDAPS. Se uma URL de LDAPS estiver na parte do esquema de uma opção de URL, então é usado ldaps ao invés de ldap. Ele especifica o uso de SSL ao se comunicar com o servidor de fonte de dados do diretório do LDAP. Por exemplo, a listagem 13 mostra como o wrapper do LDAP usa SSL com a instrução CREATE SERVER .

Listagem 13. Instrução Create server com SSL ativado
CREATE SERVER ldap_server WRAPPER ldap_wrapper 
   OPTIONS ( URL 'ldaps://localhost:636', TIMEOUT ‘3’);

Observação: É preciso usar SSL para conectar a um servidor em uma porta que esteja usando SSL. A porta padrão de SSL do LDAP é 636 e a porta padrão para comunicações não seguras é 389.

Criando os mapeamentos de usuário para uma fonte de dados do LDAP

Quando você tenta acessar um servidor de fonte de dados do diretório do LDAP, o servidor federado estabelece uma conexão com o servidor de fonte de dados do diretório do LDAP. Pode não ser preciso criar mapeamentos de usuário, dependendo do método de acesso de contas usado em seu sistema LDAP.

Um mapeamento de usuário é uma associação entre cada ID e senha de usuário do servidor federado e o ID e senha de usuário correspondente da fonte de dados.

É possível usar dois métodos para especificar mapeamentos de usuário com sistemas federados. É possível incluir um repositório externo, como outro servidor de diretório LDAP, para armazenar os mapeamentos de usuário, ou criar os mapeamentos de usuário no catálogo do banco de dados federado.

  • Não é preciso criar mapeamentos de usuário no InfoSphere Federation Server se seu servidor de fonte de dados do diretório do LDAP estiver configurado para acesso anônimo.

  • Não é preciso criar mapeamentos de usuário se você tiver um repositório externo para armazenar os mapeamentos de usuário, como outro servidor do diretório do LDAP, mas é preciso especificar a opção DB2_UM_PLUGIN no wrapper do LDAP ou a definição do servidor do LDAP ao registrar ou alterar o wrapper ou o servidor.

  • É preciso criar mapeamentos de usuários para quaisquer contas que usem o wrapper do LDAP se seu servidor de fonte de dados do diretório do LDAP estiver configurado para autenticar contas de usuários com IDs e senhas.

Mapeamentos de usuário fornecem uma forma de autenticar o acesso de usuários ou aplicativos que consultam uma fonte de dados LDAP com o wrapper do LDAP. Se um usuário ou aplicativo envia uma consulta SQL para um apelido LDAP registrado, e nenhum mapeamento de usuário estiver definido para aquele usuário ou aplicativo, então o wrapper do LDAP usa autenticação anônima para recuperar dados do servidor de fonte de dados do diretório do LDAP. Se um DIT do LDAP for consultado e exigir autenticação, então uma mensagem de erro poderá ser retornada. Para garantir que o ID e a senha do usuário corretos sejam passados para o servidor de fonte de dados do diretório do LDAP, é possível criar mapeamentos de usuário em seu banco de dados federado para usuários que sejam autorizados a pesquisar fontes de dados do LDAP. Ao criar um mapeamento de usuário, a senha é armazenada em formato criptografado em uma tabela de catálogo do sistema de banco de dados federado.

Use a instrução CREATE USER MAPPING para registrar o usuário para o objeto do servidor do LDAP. O objeto do usuário deverá estar associado ao objeto do servidor do LDAP que foi registrado usando a instrução CREATE SERVER . Por exemplo, a listagem 14 mostra como a instrução CREATE USER MAPPING mapeia um usuário DEMO para o usuário cn=root no servidor de fonte de dados do diretório do LDAP.

Listagem 14. Instrução Create user mapping para usuário específico
CREATE USER MAPPING FOR DEMO SERVER ldap_server OPTIONS (
   REMOTE_AUTHID 'cn=root',
   REMOTE_PASSWORD 'amIAdmin');

No exemplo mostrado na listagem 15, USER é uma palavra-chave que identifica o usuário atual, não um nome de usuário USER.

Listagem 15. Instrução Create user mapping para o usuário atual
CREATE USER MAPPING FOR USER SERVER ldap_server OPTIONS (
   REMOTE_AUTHID 'cn=root',
   REMOTE_PASSWORD 'amIAdmin');
Tabela 4. Opções de mapeamento de usuário do LDAP
Opções de mapeamento de usuárioDescrição
REMOTE_AUTHIDObrigatório
Tipo: cadeia de caractere de comprimento diferente de zero
O ID do usuário remoto que será usado para conexão com o servidor do diretório do LDAP
REMOTE_PASSWORDObrigatório
Tipo: cadeia de caractere de comprimento diferente de zero
A senha remota que pertence ao ID do usuário

Registrando apelidos para uma fonte de dados do LDAP

Depois de registrar um servidor, é preciso registrar um apelido correspondente para se referir às entradas LDAP em uma consulta.

Para definir um apelido LDAP, é preciso mapear atributos da entrada LDAP com relação ao modelo relacional. Os nomes da coluna de apelido devem corresponder aos nomes de atributo da entrada LDAP. Os tipos de atributo LDAP podem ser mapeados para os seguintes tipos de dados do DB2: VARCHAR, CHARACTER, CLOB, INTEGER, SMALLINT, BIGINT, DOUBLE/FLOAT, REAL, DECIMAL/NUMERIC, TIMESTAMP, TIME, DATE e BLOB.

Os tipos de dados de atributos devem ser os mesmos ou compatíveis, de forma que o wrapper do LDAP possa transformar os dados do atributo para o tipo de dado do DB2. Se o servidor de fonte de dados do diretório do LDAP armazenar dados do tipo cadeia de caractere que tenham um formato compatível, então o wrapper do LDAP poderá definir os dados para o tipo de dados do DB2. O wrapper relatará um erro se os dados não puderem ser definidos corretamente ou excederem o intervalo do tipo de dados do DB2 ao recuperar dados da fonte de dados. Se um campo não numérico for longo demais para seu tipo de coluna, então os dados em excesso são truncados com uma mensagem de aviso. Se um campo decimal tiver mais dígitos depois do caractere de notação decimal do que permitido pelo parâmetro de escala de seu tipo de coluna, então os dados em excesso são truncados com uma mensagem de aviso (SQL1844W).

Tabela 5. Tabela de mapeamento do tipo de dados DB2/LDAP
Tipo de dado do DB2Formato dos dados do atributo LDAP
VARCHAR, CHARACTER, CLOBQualquer atributo LDAP com sintaxe de cadeia de caractere em sua natureza
INTEGER, SMALLINT, BIGINT
  • Um atributo LDAP com uma sintaxe de INTEGER (1.3.6.1.4.1.1466.115.121.1.27)
  • Um atributo LDAP que tenha dados de cadeia de caractere com um formato de número inteiro
DOUBLE/FLOAT, REALUm atributo LDAP que tenha dados de cadeia de caractere com um formato de número de vírgula
DECIMAL/NUMERICAtributo LDAP que tenha dados de cadeia de caractere com um formato decimal/numérico definido no apelido
TIMESTAMPAtributo LDAP com horário generalizado (1.3.6.1.4.1.1466.115.121.1.24)
DATEAtributo LDAP com horário generalizado (1.3.6.1.4.1.1466.115.121.1.24)
O wrapper do LDAP extrai a parte DATE do valor do atributo LDAP e a converte para o formato DATE do DB2.
TIMEAtributo LDAP com horário generalizado (1.3.6.1.4.1.1466.115.121.1.24)
O wrapper do LDAP extrai a parte TIME do valor do atributo LDAP e a converte para o formato TIME do DB2.
BLOBQualquer atributo LDAP com uma sintaxe binária em sua natureza

Para registrar um apelido LDAP, use a instrução CREATE NICKNAME . Por exemplo, a listagem 16 mostra como a instrução cria o apelido Department .

Listagem 16. Instrução Create nickname
CREATE NICKNAME Department (
   department VARCHAR(20) NOT NULL, 
   name VARCHAR (150),
   employees INTEGER,
   country VARCHAR(50),
   location VARCHAR(10)) 
   FOR SERVER ldap_server 
      OPTIONS (
         DN 'ou=IBM'
         OBJECTCLASS 'department'
         SCOPE ‘ONELEVEL’
         SIZE_LIMIT '1000'
         TIME_LIMIT '10'
         DEREF ‘FINDING’);

O wrapper do LDAP converte todas as consultas com relação ao apelido LDAP para uma operação de pesquisa do LDAP. A tabela 6 mostra como as opções especificadas do apelido LDAP correspondem aos parâmetros de procura do LDAP.

Tabela 6. Opções de apelido LDAP
Opções de apelidoDescrição
DNObrigatório
Tipo: Cadeia de caractere
Um nome distinto especifica o objeto base no DIT para pesquisa do LDAP.
OBJECTCLASSObrigatório
Tipo: Cadeia de caractere
Especifica as classes de objeto das entradas que podem ser recuperadas por meio do apelido para o contexto dado. Ela permite vários valores separados por um ponto e vírgula ;.
SCOPEOpcional
Tipo: Cadeia de caractere
especifica a profundidade de pesquisa no DIT a partir do objeto base. O valor pode ser um dos seguintes:
  • OBJECT— Pesquisa somente o objeto base.
  • ONELEVEL— Pesquisa somente os filhos imediatos do objeto base; o objeto base em si não é examinado.
  • SUBTREE— Pesquisa o objeto base e todos os seus descendentes.Este é o escopo de pesquisa padrão.
SIZE_LIMITOpcional
Tipo: Cadeia de caractere. Deve ser uma cadeia de caractere com número inteiro.
Restringe o número de entradas retornadas pela pesquisa.
O valor padrão é 0, portanto os resultados da pesquisa não tem limite máximo de retorno.
TIME_LIMITOpcional
Tipo: Cadeia de caractere. Deve ser uma cadeia de caractere com número inteiro.
Limita o tempo total da pesquisa em minutos.
O valor padrão é 0, portanto não há limite de tempo para a pesquisa.
DEREFOpcional
Tipo: Cadeia de caractere
Especifica se objetos de alias (conforme definido no X.501) são tratados durante a pesquisa. Se o valor desta opção estiver definido como Y, então a fonte de dados transformará a referência de aliases em subordinados do objeto base durante a pesquisa.
O valor padrão é N.

DN

O nome distinto (DN) especifica o parâmetro Base para um contexto de pesquisa do LDAP. O objeto base é um nó que define o ponto de partida da pesquisa dentro do DIT.

É possível mudar o valor de DN de duas formas ao consultar um apelido:

  • Use a instrução ALTER NICKNAME para alterar o valor de DN antes da consulta
  • Use a função ldap.search_dn em predicados para substituir o valor de DN especificado no apelido. A listagem 17 mostra um exemplo de consulta.
    Listagem 17. Consulta com ldap.search_dn
    select * from department where ldap.search_dn (department.name,‘cn=dev,ou=ibm’)=1;

OBJECTCLASS

A classe de objeto é um termo do LDAP que descreve o tipo de objeto que é representado por uma entrada de diretório. A opção OBJECTCLASS é usada para realizar as seguintes tarefas:

  1. Especificar quais tipos de entradas podem ser recuperadas. Por exemplo: o contexto de pesquisa contém entradas da classe de objeto estrutural Person e Department. Portanto, ao pesquisar por um apelido, dependendo de como a OBJECTCLASS for especificada na instrução CREATE NICKNAME , a instância da classe de objeto Person ou Department é retornada.

  2. Impinja os nomes de coluna de apelido. Os nomes de coluna na instrução CREATE NICKNAME deverão ser nomes de atributos especificados nas classes de objetos ou suas classes de objetos superiores. Se quiser definir um nome de coluna de apelido que seja diferente do nome do atributo do LDAP, então é preciso usar a opção de coluna REMOTE_NAME para registrar o apelido. Por exemplo, a listagem 18 mostra como o atributo employees é definido com um nome diferente, employee_number.

    Listagem 18. Criar apelido com a opção de coluna REMOTE_NAME
    CREATE NICKNAME Department (
       department VARCHAR(20) NOT NULL, 
       name VARCHAR (150),
       employee_number INTEGER OPTIONS(REMOTE_NAME ’ employees’),
       country VARCHAR(50),
       location VARCHAR(10)) 
       FOR SERVER ldap_server 
       OPTIONS (
           DN 'ou=IBM'
           OBJECTCLASS 'department');

O valor OBJECTCLASS pode ser definido com qualquer nome de classe de objeto válido que esteja definido no servidor de fonte de dados do diretório do LDAP, mas não pode conter um * no nome.

É possível declarar uma classe de objeto como abstrata, estrutural ou auxiliar no sistema LDAP. É possível usar uma classe de objeto abstrata como um modelo para criar outras classes de objetos. Uma entrada de diretório não pode ser comprovada a partir de uma classe de objeto abstrata. Ao invés disso, ela requer classes de objetos estruturais. Uma classe de objeto auxiliar não pode ser comprovada por si só como uma entrada de diretório, mas pode ser anexada a entradas de diretório que são comprovadas a partir de classes de objetos estruturais. Classes de objetos auxiliares fornecem um método para estender classes de objetos estruturais sem a necessidade de alterar a definição de esquema de uma classe estrutural.

A listagem 19 mostra um exemplo de uma entrada LDAP.

Listagem 19. Amostra de entrada LDAP com classe de objeto auxiliar
dn: cn=Barbara J Jensen,dc=example,dc=com
objectClass: person 
objectClass: contact
cn: Barbara J Jensen
sn: Jensen
mail: jensen@example.com

A objectClass chamada person é estrutural, portanto tem atributos cn e sn.

A objectClass chamada contact é auxiliar, portanto tem um atributo chamado mail.

É possível recuperar o atributo na classe de objeto auxiliar combinando-o com atributos em classes de objetos estruturais ou outras classes de objetos auxiliares na mesma entrada. A OBJECTCLASS permite vários valores com o delimitador ponto e vírgula ; .

Por exemplo, a listagem 20 mostra como usar várias classes de objetos para criar um apelido.

Listagem 20. Criar um apelido com várias classes de objetos
CREATE NICKNAME ldap_person_mail (
   cn char(50) NOT NULL, 
   sn char(30), 
   mail char(50)) 
   FOR SERVER ldap_server 
      OPTIONS (
          DN 'dc=example.com’, 
          OBJECTCLASS 'person;contact');

SCOPE

É possível definir os escopos de pesquisa OBJECT, ONELEVEL e SUBTREE para cada consulta de pesquisa do LDAP. É possível, então, mudar o valor de SCOPE das duas formas seguintes ao consultar um apelido.

  • É possível usar a instrução ALTER NICKNAME para mudar o valor de SCOPE antes da consulta.

  • É possível usar a função ldap.search_scope nos predicados, de forma que a função ldap.search_scope substitua o valor de SCOPE especificado no apelido. Por exemplo, a listagem 21 mostra como consultar com a função ldap.search_scope .

    Listagem 21. Consulta com ldap.search_scope
    SELECT * FROM Department WHERE LDAP.SEARCH_SCOPE (Department.name,'SUBTREE') = 1;

TIME_LIMIT e SIZE_LIMIT

Ao definir uma pesquisa em um apelido do LDAP, ela é convertida para uma operação de pesquisa do LDAP. Como pesquisas LDAP gerais retornam um grande número de entradas, você deveria especificar limites de tempo e de tamanho para evitar o consumo de recursos. O SIZE_LIMIT restringe o número de entradas retornadas pela pesquisa. O TIME_LIMIT limita o tempo total da pesquisa. Os servidores de fonte de dados do diretório do LDAP também poderão impor limites mais restritos do que aqueles solicitados pelo wrapper do LDAP. Portanto, os TIME_LIMIT e SIZE_LIMIT efetivos são os menores entre o valor especificado nesta opção e o valor configurado no servidor de fonte de dados do diretório do LDAP.

Observação: Ao consultar um apelido LDAP, o SIZE_LIMIT não se destina a limitar o número de linhas retornadas pelo wrapper do LDAP. Ao invés disso, ele define o parâmetro de limite de tamanho para uma operação de pesquisa do LDAP para que a consulta LDAP recupere dados do servidor de fonte de dados do diretório do LDAP. De forma similar, é possível usar o TIME_LIMIT para definir o parâmetro de limite de tempo para uma pesquisa do LDAP.

Se você definir um limite muito alto, então as opções SIZE_LIMIT e TIME_LIMIT poderão retornar um resultado da consulta não determinista. Por exemplo, a listagem 22 mostra como consultar um apelido com limites específicos de tamanho e tempo.

Listagem 22. Pesquisa de apelido com SIZE_LIMIT e TIME_LIMIT
CREATE NICKNAME department (
    department VARCHAR(20) NOT NULL, 
    name VARCHAR (150),
    employees INTEGER,
    country VARCHAR(50),
    location VARCHAR(10)) 
    FOR SERVER ldap_server 
    OPTIONS (
         DN 'ou=IBM'
         OBJECTCLASS 'department'
         SIZE_LIMIT '1000'
         TIME_LIMIT '10');
         
SELECT * FROM department WHERE location=’CA';

Se você definir a classe de objeto department sob o DN ou=ibm com um SIZE_LIMIT de 1000 entradas, e houver efetivamente mais de 1000 entradas, então a consulta poderá retornar um número diferente de linhas. Isto ocorre porque algumas das entradas que correspondem ao critério location=CA poderão não ser recuperadas do servidor de fonte de dados do diretório do LDAP.

Definindo atributos com vários valores para o wrapper do LDAP

É possível maximizar as capacidades de consulta do wrapper do LDAP definindo cada atributo como seu tipo de dado do DB2 equivalente verdadeiro, no qual os inteiros do LDAP são definidos como inteiros do DB2. No entanto, ao fazer isto, você evita o retorno de vários valores para atributos não VARCHAR porque somente o primeiro valor é retornado. Isto é restrito, pois ao selecionar atributos com vários valores, o wrapper retorna somente uma linha de resultados por entrada LDAP. No entanto, é possível definir uma segunda coluna para o mesmo atributo remoto com um tipo de dado VARCHAR. A seguir, é possível especificar o nome remoto da segunda coluna usando a opção de coluna REMOTE_NAME .

É possível usar o nome da coluna na lista SELECT para retornar todos os valores como uma lista separada por delimitadores de todos os seus valores. Você especifica o delimitador que deseja usar dentro de cada opção DELIMITER da coluna.

Também é possível padronizar os nomes locais de cada coluna de vários valores. Por exemplo, é possível adicionar o prefixo m_ ao nome local da coluna que é definida como seu tipo de dado verdadeiro. Por exemplo, suponha que há uma coluna de apelido chamada actionDate em um atributo LDAP de vários valores que esteja definido com o tipo de dado TIMESTAMP. É possível, então, criar uma segunda coluna de apelido chamada m_actionDate que tenha uma opção de coluna REMOTE_NAME apontando para actionDate. É possível, então, defini-la como um tipo de dado VARCHAR e usar m_actionDate em uma lista SELECT para retornar todas as datas de aprovação em uma lista separada por delimitadores. Por exemplo, a listagem 23 mostra como criar o apelido usando atributos de vários valores.

Listagem 23. Criar um apelido para atributos de vários valores
CREATE NICKNAME date (
     actionDate  TIMESTAMP,
     m_actionDate  VARCHAR(256) OPTIONS (REMOTE_NAME 'actionDate', DELIMITER  ';')) 
     FOR SERVER ldap_server
     OPTIONS (
        DN 'ou=IBM'
        OBJECTCLASS 'date');

Consultas e funções customizadas para fontes de dados LDAP

É possível usar funções customizadas em uma consulta.

Funções customizadas para os parâmetros de configuração da pesquisa do LDAP

É possível mudar o DN de pesquisa e o SCOPE de um apelido, dependendo da consulta. É possível usar as duas funções customizadas a seguir para definir temporariamente o valor de uma consulta:

  • ldap.search_dn
  • ldap.search_scope

Ao usar as funções customizadas, é preciso comparar seu valor de retorno com o valor 1 no predicado de igualdade. Também é preciso usar AND com quaisquer outros predicados que se apliquem às colunas no mesmo apelido LDAP, como mostra a listagem 24.

Listagem 24. Exemplos corretos de funções customizadas para parâmetros de configuração da pesquisa do LDAP
SELECT * FROM ldap_nickname 
   WHERE ldap.search_scope(ldap_nickname.column, ‘ONELEVEL’)=1 
   AND location='CA';

SELECT * FROM ldap_nickname1,ldap_nickname2 
   WHERE ldap.search_dn(ldap_nickname1.column,'cn=dn1')=1 
   AND     ldap.search_dn(ldap_nickname2.column,'cn=dn2')=1;

A listagem 25 mostra uma instrução incorreta que retornará a mensagem de erro SQL0142N (SQL statement not supported).

Listagem 25. Exemplo incorreto de funções customizadas para parâmetros de configuração da pesquisa do LDAP
SELECT * from ldap_nickname 
   WHERE ldap.search_scope(ldap_nickname.column, ‘ONELEVEL’)=1 
   OR location=’CA’;

Funções customizadas para um filtro de pesquisa do LDAP

O ambiente federado usa os mecanismos do servidor do banco de dados federado e o servidor de fonte de dados do diretório do LDAP para o wrapper do LDAP. É possível usar as seguintes funções customizadas do LDAP para especificar quais predicados são transferidos para o servidor de fonte de dados do diretório do LDAP:

  • ldap.eq
  • ldap.ge
  • ldap.le
  • ldap.gt
  • ldap.lt

É preciso informar um argumento da coluna do termo de pesquisa e um argumento do termo da pesquisa em funções customizadas. O exemplo a seguir mostra uma instrução ldap.eq : ldap.eq (<search term column>,<query term>).

Ao definir o valor do argumento da coluna do termo da pesquisa, você deverá referir-se a uma coluna definida no apelido LDAP. O valor do argumento do termo da pesquisa deverá ser um literal ou uma variável de host. Não é possível usar um valor aritmético ou uma concatenação de cadeia de caractere. Além disso, o valor do argumento do termo da pesquisa não pode ser NULL, mesmo se você definir a coluna do termo da pesquisa para permitir valores nulos. Varchar é o tipo e o formato de dado válido para o argumento do termo da pesquisa, mesmo se você definiu a coluna do termo da pesquisa com um tipo de dado diferente.

As funções retornam um resultado inteiro e, quando as funções são usadas em um predicado, é preciso comparar o valor de retorno com o valor 1, usando os operadores = ou <> . Por exemplo, a listagem 26 mostra como usar funções customizadas.

Listagem 26. Exemplo do uso de funções customizadas para o filtro de pesquisa do LDAP
SELECT * FROM department WHERE ldap.eq (name, ’development’) = 1;

SELECT * FROM department WHERE ldap.eq (name, ’development’) <> 1;

A expressão NOT (ldap.eq (col,value) = 1) é equivalente a ldap.eq (col,value) <> 1.

Os predicados relacionais, como =, LIKE e <> em colunas de apelidos não são transferidos para o servidor da fonte de dados do diretório do LDAP para processamento, porque a semântica desses operadores não é exatamente a mesma entre o servidor de fonte de dados do diretório do LDAP e o servidor do banco de dados federado. Como os predicados relacionais são compensados pelo servidor do banco de dados federado, se você misturar os predicados relacionados e os predicados das funções personalizadas do LDAP, receberá uma mensagem de erro SQL0142N (SQL statement not supported). Por exemplo, a listagem 27 mostra uma consulta que separa incorretamente as partes do predicado que são processadas pelo wrapper ( ldap.eq) e o predicado relacional em employees que precisa ser processado pelo servidor do banco de dados federado.

Listagem 27. Exemplo incorreto de funções customizadas para filtro de pesquisa do LDAP
SELECT * FROM department  WHERE ldap.eq (name, ’mark*’) = 1 OR employees>3;

Todas as funções customizadas são convertidas para um filtro de pesquisa do LDAP. Por exemplo, a listagem 28 mostra como um apelido é definido com funções customizadas.

Listagem 28. Um apelido é usado para ilustrar o uso de funções customizadas para filtro de pesquisa do LDAP
CREATE NICKNAME Department (
   department VARCHAR(20) NOT NULL, 
   name VARCHAR (150),
   employees INTEGER,
   country VARCHAR(50),
   location VARCHAR(10)) 
   FOR SERVER ldap_server 
   OPTIONS (
     DN 'ou=IBM'
     OBJECTCLASS 'department');

A tabela 7 mostra alguns exemplos de como uma consulta SQL é convertida em um filtro de pesquisa do LDAP pelo wrapper do LDAP

Tabela 7. Exemplos mostrando a conversão de uma consulta SQL em um filtro de pesquisa do LDAP
DescriçãoSQLFiltro de consulta LDAP convertido
Consulta sem predicadosSELECT * FROM Department(objectclass=department)
Consulta com predicados relacionaisSELECT * FROM Department where location='CA'(objectclass=department)
ldap.eq em predicados de consultaSELECT * FROM Department WHERE ldap.eq(location, 'NY')=1(&((location=NY)(objectclass=department))
ldap.eq em predicados de consultaSELECT * FROM Department WHERE ldap.eq(name,'Mark*')=1(&(name=Mark*)(objectClass=department))
ldap.ge em predicados de consultaSELECT * FROM Department WHERE ldap.ge(employees ,'20')=1(& (employees>=20)(objectClass=department))
ldap.le em predicados de consultaSELECT * FROM Department WHERE ldap.le(employees ,'20')=1(& (employees<=20)(objectClass=department))
ldap.gt em predicados de consultaSELECT * FROM Department WHERE ldap.gt(employees,’40’)=1(&(&(employees>=40)(!(employees=40)))(objectClass=department))
ldap.lt em predicados de consultaSELECT * FROM Department WHERE ldap.lt(employees,’40’)=1(&(&(employees<=40)(!(employees=40)))(objectClass=department))
AND em predicados de consultaSELECT * FROM Department WHERE ldap.eq(location,'CA')=1 AND ldap.le(employees,’20’)=1(&(&(location=CA)(employees<=20))(objectClass=department))
OR em predicados de consultaSELECT * FROM Department WHERE ldap.eq(location,'CA' )=1 OR ldap.eq(location , 'NY)'=1;(&(|(location=CA)(location=NY))(objectClass=department))
NOT em predicados de consultaSELECT * FROM Department WHERE NOT ldap.eq(location,'CA')=1
SELECT * FROM Department WHERE ldap.eq(location,'CA')<>1
(&(!(location=CA))(objectClass=department))

Como consultar entradas LDAP com atributos de vários valores

Um campo não pode ter vários valores em um modelo relacional, mas um atributo em uma entrada LDAP pode ter mais de um valor. Os seguintes exemplos explicam como uma consulta com relação a um apelido LDAP se comporta em uma situação de atributo com vários valores.

Suponha que haja uma entrada LDAP com vários valores como esta:

Listagem 29. Exemplo de uma entrada LDAP com vários valores
   dn: value=1,dc=example       
   objectClass: data
   value: 1
   value: 2

A listagem 30, então, define o apelido como nick_char e é definida com um tipo de cadeia de caractere column e uma opção de coluna DELIMETER .

Listagem 30. Definir apelido nick_char
   CREATE NICKNAME nick_char (value  VARCHAR(256) OPTIONS (DELIMETER ';')) 
      FOR SERVER …
      OPTIONS(…);

A listagem 31 mostra como o apelido nick_int é definido com uma coluna do tipo não cadeia de caractere que não pode usar DELIMETER.

Listagem 31. Definir apelido nick_int
CREATE NICKNAME nick_int (value  integer) 
   FOR SERVER …
   OPTIONS(…);

Ao usar consultas com predicados relacionais, os predicados são compensados pelo servidor do banco de dados federado. Para colunas com vários valores com um predicado relacionado, apesar de todos os dados da entrada LDAP serem recuperados, somente o primeiro valor é retornado para o banco de dados federado para processamento.

A listagem 32 mostra como as consultas recuperam a entrada e mostram somente o primeiro valor.

Listagem 32. Consulta a apelido nick_char e nick_int com predicados relacionais
SELECT * FROM nick_char WHERE value=’1;

SELECT * FROM nick_int WHERE value=1;


VALUE
---------------
1

A listagem 33 mostra consultas que não conseguiram recuperar a entrada.

Listagem 33. Consulta a apelido nick_char e nick_int com predicados relacionais
SELECT * FROM nick_char WHERE value='2’;

SELECT * FROM nick_int WHERE value=2;

É possível usar as funções customizadas para o filtro de pesquisa LDAP em predicados para que o servidor do diretório do LDAP processe o filtro de pesquisa. A regra do servidor do diretório do LDAP afirma que se uma entrada LDAP tiver um atributo que inclui QUALQUER UMA das correspondências de valor, então o critério será recuperado.

A listagem 34 mostra como a consulta a apelido usa ldap.eq para nick_char para recuperar a entrada de amostra e exibir todos os valores.

Listagem 34. Consulta a apelido nick_char e nick_int com funções customizadas
SELECT * FROM nick_char WHERE ldap.eq (‘value’, ‘1’) = 1;

SELECT * FROM nick_char WHERE ldap.eq (‘value’, ‘2’) = 1;

VALUE
---------------
1;2

A listagem 35 mostra como é possível usar ldap.eq para nick_int para ter uma entrada de amostra recuperada que exiba somente o primeiro valor. O wrapper do LDAP somente converte o primeiro dado de cadeia de caractere para número inteiro e, a seguir, retorna-o para o servidor do banco de dados federado.

Listagem 35. Consulta a apelido nick_char e nick_int com funções personalizadas
SELECT * FROM nick_int WHERE ldap.eq (value, ‘1’) = 1;

SELECT * FROM nick_int WHERE ldqp.eq (value, ‘2’) = 1;

VALUE
---------------
1

Como otimizar o desempenho do wrapper do LDAP

É possível otimizar o desempenho do wrapper do LDAP para minimizar a quantidade de dados que são transferidos entre o servidor da fonte de dados do diretório do LDAP e o servidor federado.

O wrapper do LDAP no ambiente federado usa os mecanismos de consulta do banco de dados federado e do servidor da fonte de dados do diretório do LDAP. O mecanismo do banco de dados federado processa predicados (operadores relacionais como =, BETWEEN, LIKE, e <>) que são especificados nas colunas de apelido. O mecanismo do servidor da fonte de dados do diretório do LDAP processa predicados que usam funções customizadas do LDAP para o filtro de pesquisa.

É possível minimizar a quantidade de dados que é transferida entre os dois mecanismos de pesquisa estruturando suas consultas para que o processamento de dados seja transferido para o sistema LDAP sempre que possível.


Junte dados do diretório do LDAP com outros dados corporativos

Agora que configurou o InfoSphere Federation Server para acessar dados do diretório do LDAP, é possível juntar e unir esses dados com dados de outras fontes de dados.

É possível adicionar o wrapper apropriado, servidor, mapeamento de usuário e objetos de apelido para outras fontes de dados em seu ambiente. O processo é similar à configuração do InfoSphere Federation Server para acessar o servidor de fonte de dados do diretório do LDAP, apesar de variar para diferentes fontes de dados. Consulte a documentação do InfoSphere Federation Server, tutoriais ou Redbooks para obter detalhes.

Esta seção mostra como emitir uma consulta simples para juntar dados em entradas LDAP com dados em um apelido predefinido no banco de dados federado.

A listagem 36 mostra a estrutura de EMPLOYEE, que é um apelido predefinido no InfoSphere Federation Server.

Listagem 36. Estrutura do apelido EMPLOYEE
EMPLOYEE
	empno (primary key, char(6))
	firstname (varchar(12))
	midiint (char(1))
	lastname (varchar(15))
	workdept (char(3))
	photo (char(4))
	hiredate (date)
	job (char(8))
	  ...

A listagem 37 mostra a estrutura de DEPARTMENT, para a qual você definiu um apelido LDAP.

Listagem 37. Estrutura do apelido DEPARTMENT
DEPARTMENT
   department (varchar(20))
   name (varchar (150)
   employee(integer)
   country COUNTRY (varchar(50))
   location (varchar(10))

A listagem 38 mostra a instrução SELECT que pode ser escrita para listar informações de funcionários cujo local do departamento seja CA.

Listagem 38. Junção dos apelidos EMPLOYEE e DEPARTMENT
SELECT empno,firstname,lastname,workdapt, job
   FROM DEPARTMENT D, EMPLOYEE E
   WHERE D.department= E.workdept
   AND ldap.eq(D.location, ‘CA’)=1;

É possível emitir esta consulta de junção diretamente de uma janela de comando, a partir de ferramentas disponíveis no centro de controle ou a partir de ferramentas disponíveis por meio de ofertas de terceiros. Se preferir não escrever sua própria instrução SQL, você poderá usar o centro de controle ou ferramentas de terceiros para construir graficamente sua consulta de junção.


Resumo

Este tutorial mostrou como implementar e configurar o wrapper do LDAP, incluindo como criar um wrapper do LDAP, um servidor, mapeamento de usuários e objetos de apelido. Exemplos concretos mostraram como consultar fontes de dados LDAP. O tutorial também forneceu dicas de desempenho para o wrapper do LDAP. Finalmente, um exemplo simples demonstrou como juntar um apelido LDAP com outro apelido.


Download

DescriçãoNomeTamanho
LDAP Wrapper for this articleLDAPWrapper.zip34KB

Recursos

Aprender

Obter produtos e tecnologias

Discutir

Comentários

developerWorks: Conecte-se

Los campos obligatorios están marcados con un asterisco (*).


Precisa de um ID IBM?
Esqueceu seu ID IBM?


Esqueceu sua senha?
Alterar sua senha

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

 


A primeira vez que você entrar no developerWorks, um perfil é criado para você. Informações no seu perfil (seu nome, país / região, e nome da empresa) é apresentado ao público e vai acompanhar qualquer conteúdo que você postar, a menos que você opte por esconder o nome da empresa. Você pode atualizar sua conta IBM a qualquer momento.

Todas as informações enviadas são seguras.

Elija su nombre para mostrar



Ao se conectar ao developerWorks pela primeira vez, é criado um perfil para você e é necessário selecionar um nome de exibição. O nome de exibição acompanhará o conteúdo que você postar no developerWorks.

Escolha um nome de exibição de 3 - 31 caracteres. Seu nome de exibição deve ser exclusivo na comunidade do developerWorks e não deve ser o seu endereço de email por motivo de privacidade.

Los campos obligatorios están marcados con un asterisco (*).

(Escolha um nome de exibição de 3 - 31 caracteres.)

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

 


Todas as informações enviadas são seguras.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=80
Zone=Information Management, Tecnologia Java
ArticleID=555960
ArticleTitle=Usando o wrapper do LDAP com o InfoSphere Federation Server
publish-date=09232010