...usar o WI_Event | Início Anterior Próximo

...usar a Bridge Jdbc para Ldap

Neste passo-a-passo será mostrado como o desenvolvedor poderá utilizar a Bridge JDBC Ldap para acessar um servidor de diretórios (Active Directory, Apache DS, etc) usando o protocolo Ldap através de pseudo comandos SQL.
O documentação da Bridge Jdbc Ldap pode ser encontrada no site myvd.sourcefourge.net através do link http://myvd.sourceforge.net/bridge.html enquando o download pode ser feito clicando http://myvd.sourceforge.net/jdbcldap.html.
Nos testes foram utilizados o sevidor de diretórios Apache Directory Server (http://directory.apache.org/apacheds/1.5/) e Apache Directory Studio (http://directory.apache.org/studio/), mas nada impede que outros servidores de diretórios sejam utilizados a título do Active Directory da Microsoft.
Antes de iniciar os teste usando o Apache DS foi necessário importar o arquivo example.ldif que já acompanha o produto usando o Apache Studio.
Para que o WI reconheça a Bridge Jdbc Jdap é necessário o download da mesma no link mencionado acima e a colocação do arquivo jdbcLdap.jar na pasta lib do Tomcat 6 ou shared/lib do Tomcat 5.
Ao criar uma conexão com o danco de dados deve-se selecionar a Bridge Jdbc Ldap a qual não estará com *, preencher no alias //localhost:10389, no campo usuário colocar uid=admin,ou=system e no campo senha o valor secret.
Antes de efetivamente começar a escrever os pseudos sqls deve-se enterder o 3 tipos de escopos que a Brigde Jdbc Ldap pode utilizar:
- objectScope: será recuperado apenas os dados do nó especificado
(baixo uso pois os dados retornados são bastante limitados)
Ex1: select * from objectScope;dc=example,dc=com
Ex2: select * from objectScope;ou=Users,dc=example,dc=com
Ex3: select * from objectScope;uid=aeinstein,ou=Users,dc=example,dc=com
- oneLevelScope: será recuperado os dados filhos do nó especificado
(muito uso pois retorna dados estruturalmente muito parecidos com um tabela relacional)
Ex1: select * from oneLevelScope;dc=example,dc=com
Ex2: select * from oneLevelScope;ou=users,dc=example,dc=com
Ex3: select * from oneLevelScope;ou=Users,dc=example,dc=com where uid=?|tmp.user|
- subTreeScope: será recuperado os dados do nó especificado e todos os filhos recursivamente
(baixo uso pois os dados retornados representam uma estrutura hierárquica díficil de trabalhar com o modelo relacional)
OBS: Conforme vimos nos exemplos acima em quase 100% dos casos iremos trabalhar com o oneLevelScope.
E caso o desenvolvedor deseje ele pode ser especificado como escopo padrão no alias do BD para não precisar ser informando nos SQLs.
Ex: //localhost:10389?SEARCH_SCOPE:=oneLevelScope
Segue alguns exemplos de SQL:
- Que pode ser usado no login do projeto que não usa MD5
SELECT * FROM oneLevelScope;ou=Users,dc=example,dc=com WHERE uid=?|tmp.user| and userpassword=?|tmp.pass|
- Que pode ser usado no login do projeto que usa MD5
SELECT userpassword, uid, cn, givenname FROM oneLevelScope;ou=Users,dc=example,dc=com WHERE uid = ?|tmp.user|
Nesse exemplo as senhas armazenadas em userpassword precisam estar no formato MD5
- Um exemplo de SQL com texto fixo
select * from oneLevelScope;ou=Users,dc=example,dc=com where uid='aeinstein'
- O download BD de uma imagem armazenada no formato Base64 no servidor de diretórios
select jpegphoto from oneLevelScope;ou=Users,dc=example,dc=com where uid='aeinstein'
É necessário marcar na definição do download a opção base64 e colocar em tipo o valor jpg que é o formato que está armazenado.
A Bridge Jdbc Ldap também suporta os comando insert, update e delete de forma muito semelhante a um banco de dados relacional, e maiores detalhes podem ser obtidos na documentação do produto. Segue alguns exemplos de update:
- Altera o nome do usuário aeinstein
UPDATE objectScope;uid=aeinstein,ou=Users,dc=example,dc=com SET givenname = 'AlbertX'
OBS: A implementação 2.1 da Bridge Jdbc Ldap contém algum bug que só está aceitando inserts, updates e deletes usando o objectScope.
Funciona: UPDATE objectScope;uid=|tmp.user|,ou=Users,dc=example,dc=com SET givenname = 'AlbertX'
Deveria Funcionar: UPDATE oneLevelScope;ou=Users,dc=example,dc=com SET givenname = 'AlbertX' where uid='|tmp.user|'
- Altera, adiciona ou remove propriedades diretamente pelo acesso Ldap
UPDATE ENTRY objectScope;uid=aeinstein,ou=Users,dc=example,dc=com DO REPLACE SET userPassword='secret'
OBS: Pela documentação da Bridge Jdbc Ldap apesar dessa forma não ser padrão Sql é a forma mais poderosa de manipular as propriedades Ldap.