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

3

Por diversas razões, eu me tornei o administrador LDAP defacto no meu local de trabalho. Eu tenho aprendido isso no trabalho há cerca de um ano. Então, ao descrever as coisas, sinta-se à vontade para sugerir melhores maneiras de fazer as coisas.

Eu tenho um Novell eDirectory no qual estou armazenando informações de funcionários. O principal uso é a autenticação de vários serviços da Web, como o Moodle ou o Drupal. Mas também estou usando isso como backend para um novo Diretório de Funcionários. Eu não vi nenhum ponto em duplicar os dados mais do que já estava sendo duplicado. Além disso, um diretório de funcionários parece exatamente o tipo de coisa que o LDAP foi feito.

Eu criei entradas para cada escritório e, em seguida, configurei um atributo em cada usuário que referencia o dn da entrada do escritório para o escritório. O problema que tenho agora é que cada escritório provavelmente tem seu próprio número de telefone. Assim, os funcionários que têm mais de um escritório (se trabalham em mais de um campus, por exemplo) têm 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, eu preciso de uma maneira de dizer: "esse número de telefone é para esse escritório".

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

Existe uma estrutura semelhante que eu poderia usar no LDAP? Ou método que é 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=edu para phone: 555-555-5555 ?

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

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

E assim por diante ...

Algumas notas, caso sejam relevantes:

Eu criei atributos personalizados para os dn's de escritório e departamento usando a sintaxe DN 1.3.6.1.4.1.1466.115.121.1.12.

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

Escritórios têm o objectClasses: Um objectClass personalizado contendo a referência dn personalizada à entrada do campus, ndsLoginProperties, organizationalPerson, Person e Top.

As entradas do usuário são iguais às dos escritórios, além da posixAccount.

Existe alguma outra informação que eu deva fornecer?

Editar para resolver problemas que os comentários são muito curtos para:

Se eu criar outra entrada contendo as metainformações, conforme descrito no link , precisarei criar uma meta-entrada 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 concorda.

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

'' ' dn: cn = jobtitle, ou = ID do usuário, ou = metadados, dc = faculdade, dc = edu officedn: cn = DC107, ou = localizações, dc = faculdade, dc = edu telefone: 555-555-5555

dn: cn = número de telefone, ou = ID do usuário, ou = metadados, dc = faculdade, dc = edu officedn: cn = MAIN222, ou = localizações, dc = faculdade, dc = edu telefone: 111-111-1111 '' '

Eu estava esperando que houvesse uma maneira mais limpa do que isso para realizar o que eu quero.

    
por David R. 15.04.2013 / 23:22

1 resposta

1

Por que não criar um objeto para cada posição que inclua as informações officedn e 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 contêiner. Isso tornará a pesquisa e o processamento de um número arbitrário de posições extremamente simples.

    
por 17.04.2013 / 11:58