Este método de autenticação opera de forma semelhante ao método
password, exceto por usar o
LDAP como
método de verificação da senha.
O LDAP é usado apenas para validar os pares
“nome de usuário/senha”.
Portanto, o usuário já deverá existir no banco de dados antes que o
LDAP possa ser usado para autenticação.
A autenticação LDAP pode operar de dois modos.
No primeiro modo, que chamaremos de modo de vinculação simples,
o servidor vincula-se ao nome distinto (DN)
[139]
formado como “prefixo
nome_do_usuário
sufixo”.
Normalmente, o parâmetro prefixo é usado
para especificar cn= ou
DOMAIN\ em um ambiente
de diretório ativo (Active Directory).
O sufixo é usado para especificar a
parte restante do DN em um ambiente
não-diretório ativo.
No segundo modo, que chamaremos de modo de busca e vinculação
(search+bind),
o servidor primeiro se vincula ao diretório LDAP
com um nome de usuário e senha fixos, especificados com
ldapbinddn e
ldapbindpasswd, e realiza uma busca
pelo usuário que está tentando se conectar ao banco de dados.
Se este usuário e senha não estiver configurado, será tentada uma
vinculação anônima ao diretório.
A busca será realizada na subárvore em
ldapbasedn, e tentará fazer uma
correspondência exata do atributo especificado em
ldapsearchattribute.
Uma vez encontrado o usuário nesta busca, o servidor se vincula
novamente ao diretório como este usuário, usando a senha
especificada pelo cliente, para verificar se o login está correto.
Este modo é idêntico ao usado pelos esquemas de autenticação
LDAP em outros softwares, como Apache
mod_authnz_ldap e pam_ldap.
Este método permite uma flexibilidade significativamente maior em
relação à localização dos objetos de usuário no diretório, mas irá
resultar na criação de duas conexões separadas com o servidor
LDAP.
As seguintes opções de configuração são usadas nos dois modos:
ldapserverNomes ou endereços IP de servidores LDAP aos quais se conectar. Podem ser especificados vários servidores separados por espaços.
ldapportNúmero da porta no servidor LDAP a qual se conectar. Se não for especificada nenhuma porta, será usada a configuração de porta padrão da biblioteca LDAP.
ldapscheme
Definido como ldaps para usar
LDAPS.
Esta é uma forma fora do padrão de usar LDAP
sobre SSL, com suporte por algumas
implementações do servidor LDAP.
Veja também a opção ldaptls para uma
alternativa.
ldaptls
Definido como 1 para fazer a conexão entre o
PostgreSQL e o servidor
LDAP usar a encriptação
TLS.
Usa a operação StartTLS do
RFC 4513
[140].
Veja também a opção ldapscheme para uma
alternativa.
Note-se que usar ldapscheme ou
ldaptls apenas encripta o tráfego entre
o servidor PostgreSQL e o servidor
LDAP.
A conexão entre o servidor PostgreSQL
e o cliente PostgreSQL ainda não será
encriptada, a menos que também seja usado SSL.
As opções a seguir são usadas apenas no modo de vinculação simples:
ldapprefixCadeia de caracteres a ser prefixada ao nome do usuário ao formar o DN para autenticação por vinculação simples.
ldapsuffixCadeia de caracteres a ser anexada ao nome do usuário ao formar o DN para autenticação por vinculação simples.
As seguintes opções são usadas apenas no modo “busca e vinculação” (search+bind)
ldapbasednDN raiz para iniciar a busca pelo usuário, ao fazer a autenticação por “busca e vinculação”.
ldapbinddnDN do usuário para vincular ao diretório para executar a busca, ao fazer a autenticação por “busca e vinculação”.
ldapbindpasswdSenha para o usuário vincular ao diretório para realizar a busca, ao fazer a autenticação por “busca e vinculação”.
ldapsearchattribute
Atributo para corresponder ao nome de usuário na busca,
ao fazer a autenticação por “busca e vinculação”.
Se não for especificado nenhum atributo, será usado o atributo
uid.
ldapsearchfilter
Filtro de busca a ser usado
ao fazer a autenticação por “busca e vinculação”.
As ocorrências de $username serão
substituídas pelo nome do usuário.
Permite filtros de busca mais flexíveis do que
ldapsearchattribute.
A seguinte opção pode ser usada como uma forma alternativa de escrever algumas das opções LDAP acima de maneira mais compacta e padronizada:
ldapurlUma URL RFC 4516. O formato é:
ldap[s]://hospedeiro[:porta]/dn_base[?[atributo][?[escopo][?[filtro]]]]
O escopo deve ser um entre
base, one e
sub, e normalmente é este último.
(O padrão é base, que normalmente não é útil
nesta aplicação.)
O atributo pode especificar um
único atributo, caso em que é usado como valor para
ldapsearchattribute.
Se o atributo estiver vazio, então
o filtro poderá ser usado como
valor para ldapsearchfilter.
O esquema da URL ldaps escolhe o método
LDAPS para fazer conexões
LDAP sobre SSL,
equivalente a usar ldapscheme=ldaps.
Para usar conexões LDAP encriptadas usando a operação
StartTLS, deve-se usar o esquema de URL
normal ldap, e especificar a opção
ldaptls além de ldapurl.
Para vinculações não anônimas, ldapbinddn e
ldapbindpasswd devem ser especificados como
opções separadas.
No momento, as URLs LDAP têm suporte apenas no OpenLDAP, não no Windows.
É errado misturar opções de configuração para vinculação simples
com opções para busca e vinculação.
Para usar ldapurl no modo de vinculação simples,
a URL não deve conter um basedn
ou elementos de consulta.
Ao usar o modo “busca e vinculação”, a busca pode ser
realizada usando um único atributo especificado com
ldapsearchattribute, ou usando um filtro de
busca personalizado especificado com
ldapsearchfilter.
Especificar ldapsearchattribute=foo equivale a
especificar ldapsearchfilter="(foo=$username)".
Se não for especificada nenhuma opção, o padrão será
ldapsearchattribute=uid.
Se o PostgreSQL foi construído com
OpenLDAP como a biblioteca cliente
LDAP, a configuração ldapserver
poderá ser omitida.
Neste caso, uma lista de nomes de hospedeiro e portas é buscada
por meio de registros
RFC 2782
DNS SRV.
O nome _ldap._tcp.DOMAIN é buscado, onde
DOMAIN é extraído de
ldapbasedn.
A seguir está um exemplo de configuração LDAP de vinculação simples:
host ... ldap ldapserver=ldap.example.net ↵
ldapprefix="cn=" ↵
ldapsuffix=", ↵
dc=example, ↵
dc=net"
Quando uma conexão com o servidor de banco de dados como usuário
do banco de dados someuser é solicitada, o
PostgreSQL tentará se vincular ao servidor
LDAP usando o DN cn=someuser, dc=example,
dc=net e a senha fornecida pelo cliente.
Se esta conexão for bem-sucedida, o acesso ao banco de dados será
concedido.
A seguir está uma configuração vinculação simples diferente, que usa o esquema LDAPS e um número de porta personalizado, escrito como uma URL:
host ... ldap ldapurl="ldaps://ldap.example.net:49151" ↵
ldapprefix="cn=" ↵
ldapsuffix=", ↵
dc=example, ↵
dc=net"
Isto é um pouco mais compacto do que especificar
ldapserver, ldapscheme e
ldapport separadamente.
A seguir está um exemplo para configuração LDAP de “busca e vinculação”:
host ... ldap ldapserver=ldap.example.net ↵
ldapbasedn="dc=example, ↵
dc=net" ↵
ldapsearchattribute=uid
Quando é solicitada uma conexão com o servidor de banco de dados,
como o usuário do banco de dados someuser,
o PostgreSQL irá tentar se vincular
anonimamente (já que ldapbinddn não foi
especificado) ao servidor LDAP, e executar uma
busca por (uid=someuser) sob o DN base
especificado.
Se for encontrada uma entrada, então se tentará fazer uma vinculação
usando as informações encontradas e a senha fornecida pelo cliente.
Se esta segunda vinculação for bem-sucedida, será concedido o acesso
ao banco de dados.
A seguir está um exemplo para configuração LDAP de “busca e vinculação”:
host ... ldap ldapurl="ldap://ldap.example.net/dc=example,dc=net?uid?sub"
LDAP usam o mesmo formato de URL, então será mais fácil compartilhar a configuração.
A seguir está um exemplo para configuração de
“busca e vinculação” que usa
ldapsearchfilter em vez de
ldapsearchattribute, para permitir autenticação
por ID de usuário ou endereço de e-mail:
host ... ldap ldapserver=ldap.example.net ↵
ldapbasedn="dc=example, ↵
dc=net" ↵
ldapsearchfilter="(|(uid=$username)(mail=$username))"
A seguir está um exemplo para configuração de
“busca e vinculação” que usa a descoberta de DNS SRV
para encontrar o(s) nome(s) do hospedeiro e porta(s) para o serviço
LDAP para o nome de domínio
example.net:
host ... ldap ldapbasedn="dc=example,dc=net"
Como o LDAP geralmente usa vírgulas e espaços para separar as diferentes partes do DN, geralmente é necessário usar valores de parâmetro entre aspas ao configurar as opções do LDAP, conforme mostrado nos exemplos.
[139] Distinguished Name (DN): Semelhante a um endereço, o nome distinto é uma nomenclatura usada para descrever onde o objeto pode ser encontrado no diretório. What Is LDAP (Lightweight Directory Access Protocol)? (N. T.)
[140]
RFC 4513: Este documento descreve os métodos de autenticação
e os mecanismos de segurança do “Lightweight Directory
Access Protocol” (LDAP), e detalha o estabelecimento
da “Transport Layer Security” (TLS) usando a
operação StartTLS. (N. T.)