Como posso relacionar o valor de um atributo ldap ao valor de outro?

Como posso relacionar o valor de um atributo ldap ao valor de outro?

Por vários motivos, tornei-me o administrador LDAP de fato em meu local de trabalho. Tenho aprendido isso no trabalho há cerca de um ano. Portanto, à medida que descrevo as coisas, sinta-se à vontade para sugerir maneiras melhores de fazer as coisas.

Eu tenho um Novell eDirectory no qual estou armazenando informações de funcionários. Seu principal uso é autenticar vários serviços da Web, como Moodle ou Drupal. Mas também estou usando-o como back-end para um novo diretório de funcionários. Não vi mais sentido duplicar os dados, pois eles já estavam sendo duplicados. Além disso, um diretório de funcionários parece exatamente o tipo de coisa para a qual o LDAP foi criado.

Criei entradas para cada escritório e, em seguida, configurei um atributo em cada usuário que faz referência ao dn da entrada do escritório. O problema que tenho agora é que cada escritório provavelmente possui seu próprio número de telefone. Assim, funcionários que possuem mais de um escritório (caso trabalhem em mais de um campus, por exemplo) possuem mais de um número de telefone. Como os números de telefone seguem o funcionário, não posso simplesmente atribuir o número à entrada do escritório. Então, preciso dizer de alguma forma: "este número de telefone é deste escritório".

Se este fosse um banco de dados MySQL, eu simplesmente criaria uma tabela que mapeasse as coisas da maneira que eu quisesse.

Existe uma estrutura semelhante que eu poderia usar no LDAP? Ou método equivalente?

Para dar um exemplo detalhado do que estou falando, aqui está um pseudo ldif de uma entrada de funcionário:

dn: cn=user,ou=staff,dc=college,dc=edu
officedn: cn=DC107,ou=locations,dc=college,dc=edu
officedn: cn=MAIN222,ou=locations,dc=college,dc=edu
phone: 555-555-5555
phone: 111-111-1111
departmentdn: cn=it,ou=departments,ou=groups,dc=college,dc=edu
departmentdn: cn=math,ou=departments,ou=groups,dc=college,dc=edu
title: web systems admin
title: professor of discrete math

Então, como eu me relacionaria: officedn: cn=DC107,ou=locations,dc=college,dc=educom phone: 555-555-5555?

Ou officedn: cn=MAIN222,ou=locations,dc=college,dc=edupara phone: 111-111-1111?

Ou departmentdn: cn=math,ou=departments,ou=groups,dc=college,dc=edupara title: professor of discrete math?

E assim por diante...

Algumas notas, caso sejam relevantes:

Criei atributos personalizados para o DNS do escritório e do departamento usando a sintaxe DN 1.3.6.1.4.1.1466.115.121.1.12.

As entradas de departamento têm objectClasses groupOfNames, nestedGroupAux e Top.

Os escritórios têm as objectClasses: uma objectClass personalizada que contém a referência dn personalizada para a entrada do campus pai, ndsLoginProperties, OrganizationalPerson, Person e Top.

As entradas do usuário são iguais às dos escritórios, mais a posixAccount.

Há alguma outra informação que devo fornecer?

Edite para resolver problemas para os quais os comentários são muito curtos:

Se eu criar outra entrada contendo as meta informações, conforme descrito emhttps://serverfault.com/a/500129/99647Eu precisaria criar uma metaentrada por número de telefone e por cargo.

dn: cn=MAIN222,cn=user,ou=staff,dc=college,dc=edu officedn: cn=MAIN222,ou=locations,dc=college,dc=edu phone: 111-111-1111 departmentdn: cn=math,ou=departments,ou=groups,dc=college,dc=edu title: professor of discrete math departmentdn: cn=it,ou=departments,ou=groups,dc=college,dc=edu title: web systems admin

Não funcionaria porque não há como um computador descobrir que o administrador de sistemas web não combina com matemática, mas sim.

Antes de postar a pergunta, o método que pensei foi algo como criar um ou para todos os metadados: ou=metadata,dc=college,dc=eduDepois, um ou para cada usuário: ou=userid,ou=metadata,dc=college,dc=eduDepois, uma entrada por cargo e número de telefone que os vinculava a seus departamentos e escritórios:

``` dn: cn=cargo,ou=userid,ou=metadados,dc=college,dc=edu officedn: cn=DC107,ou=locations,dc=college,dc=edu telefone: 555-555-5555

dn: cn=phonenumber,ou=userid,ou=metadata,dc=college,dc=edu officedn: cn=MAIN222,ou=locations,dc=college,dc=edu telefone: 111-111-1111 ```

Eu esperava que houvesse uma maneira mais limpa do que essa de realizar o que desejo.

Responder1

Por que não criar apenas um objeto para cada posição que inclua o officedn e informações relacionadas no mesmo objeto?

Então:

dn: cn=DC107,cn=user,ou=staff,dc=college,dc=edu
officedn: cn=DC107,ou=locations,dc=college,dc=edu
phone: 555-555-5555
departmentdn: cn=it,ou=departments,ou=groups,dc=college,dc=edu
title: web systems admin

dn: cn=MAIN222,cn=user,ou=staff,dc=college,dc=edu
officedn: cn=MAIN222,ou=locations,dc=college,dc=edu
phone: 111-111-1111
departmentdn: cn=math,ou=departments,ou=groups,dc=college,dc=edu
title: professor of discrete math

Dessa forma, você mantém todos os campos relevantes para uma única posição em um objeto, e o objeto do usuário é o container. Isso tornará a pesquisa e o processamento de um número arbitrário de posições extremamente simples.

informação relacionada