# 1

# Conexões LDAP

Conexões LDAP são diferentes de outras conexões de modo que um banco de dados LDAP registra informações de modo hierárquico, na Árvore de Informações de Diretório (DIT), enquanto que outros bancos de dados acessados usando o aplicativo gda-browser são bancos de dados relacionais.

Como consequência, conexões LDAP são tratadas de forma especial: como conexões normais com tabelas (veja o mapeamento de tabela a explicado a seguir), e enquanto estiver presente o navegador de perspectiva LDAP

Note que conexões LDAP podem não estar disponíveis caso o banco de dados LDAP não esteja instalado ou o suporte a LDAP foi desabilitado durante a compilação.

# Mapeamento de tabela LDAP

Em uma conexão LDAP, é possível declarar tabelas virtuais que são mapeadas à uma pesquisa LDAP. Essas tabelas virtuais podem então ser usadas posteriormente como qualquer outra tabela. A primeira coluna de cada tabela virtual LDAP será sempre o DN (Nome distinto) de cada registro representado na linha; as outras colunas dependem da definição da tabela.

Uma tabela virtual LDAP é definida pelos seguintes atributos:

um nome de tabela

a base DN para pesquisa: o registro LDAP o qual a pesquisa começa (caso não seja especificado, é utilizado o registro de nível superior da conexão LDAP)

o filtro de pesquisa: um filtro de pesquisa LDAP válido (se nenhum for fornecido, o filtro de pesquisa padrão é "(objectClass=*)", requisitando qualquer registro LDAP).

os atributos: os atributos a receber, cada atributo será mapeado a uma coluna da tabela. Os atributos devem estar em uma lista de atributos, separados por vírgulas, onde a cada atributo pode opcionalmente ser atribuído um tipo e uma opção multi valor (veja abaixo).

o escopo: o escopo da pesquisa, "subtree" (para pesquisar a base DN e a subárvore completa abaixo), "onelevel" (para pesquisar apenas o filho imediato do registro base DN), ou "base" (para pesquisar apenas o registro base DN)

## Propriedades da tabela LDAP

Propriedades da tabela LDAP

Por exemplo, na figura acima, a tabela "users" "contém" todos os registros LDAP do registro de nível superior LDAP da conexão, e tem 3 colunas: o DN, a "cn" e a "jpegPhoto".

# Attributes to columns mapping

As mentioned in the previous section, each attribute will be mapped to a column. The column type is normally automatically determined (string, number, ...) but can be forced by appending to the attribute name the "::<type>" for the requested type.

Also, because some attributes can have multiple values, the table construction handles multi-valued attributes in different ways, depending on each attribute's options. An option can be specified by appending the "::<option>" to the attribute name. Valid options are:

"NULL" or "0": a NULL value will be returned for the attribute

"CSV": a comma separated value with all the values of the attribute will be returned. This only works for string attribute types.

"MULT" or "*": a row will be returned for each value of the attribute, effectively multiplying the number of returned rows

"1": only the first value of the attribute will be used, the other values ignored

"CONCAT": the attributes' values are concatenated (with a newline char between each value)

"ERROR": an error value will be returned (this is the default behaviour)

# SQL usable with LDAP connections

You can use the SQL understood by SQLite in any LDAP connection. Be aware however that if you define database objects (outside of the extended SQL presented next section), they will be lost the next time the LDAP connection is opened.

So it is perfectly safe for example to create a table to store some LDAP data which may require a long operation to obtain, but after closing the LDAP connection, the table and its data will be lost.

See the SQL understood by LDAP connections and virtual connections section for more information.

# SQL extension to handle LDAP tables

LDAP tables can be created using an extended set of SQL commands:

`CREATE LDAP TABLE <table_name> [BASE='<base_dn>'] [FILTER='<filter>'] [ATTRIBUTES='<filter>'] [SCOPE='<filter>']` to declare a new LDAP virtual table

`DESCRIBE LDAP TABLE <table_name>` to show LDAP virtual table's definition

`ALTER LDAP TABLE <table_name> [BASE='<base_dn>'] [FILTER='<filter>'] [ATTRIBUTES='<filter>'] [SCOPE='<filter>']` to modify an LDAP virtual table's definition (only the specified part is actually modified)

`DROP LDAP TABLE <table_name>` to remove an LDAP virtual table. Note that the usual `DROP TABLE <table_name>` can also be used instead.

For example the following SQL code:

CREATE LDAP TABLE users FILTER='(objectClass=inetOrgPerson)' ATTRIBUTES='cn,sn,givenName,seeAlso::*' SCOPE='subtree'; SELECT * FROM users WHERE cn like '%john%'; ALTER LDAP TABLE users FILTER='(&(objectClass=inetOrgPerson)(cn=*john*))'; SELECT * FROM users; DROP LDAP TABLE users;

should display twice the same results, which list all the LDAP entries of the "inetOrgPerson" class with a CommonName (cn) containing the "john" string.