OpenLDAP与MySQL的工作,但需要架构的build议

所以,我已经下载了最新的OpenLDAP源代码,使用—-enable-sql编译,与slapd.conf ,configuration了odbc文件,将表格添加到我的当前数据库中,花了一个星期的时间debuggingslapd -d -1 ,现在MySQL用户已经成为LDAP用户并且能够login。

我需要一些帮助来理解LDAP对象的基本结构。 从我读的所有东西,我假设每个对象都需要属于一个structuralObjectClass ,然后每个对象可以属于许多其他objectClasses

我需要这个LDAP服务器做的唯一事情就是validation用户。 用户不需要编辑他们的信息。 所以我首先制定了如下结构:

 Institute dn: dc=example,dc=org dc: example structuralObjectClass: dcObject objectClass: organization o: example description: Example Company Groups Dn: ou=Groups,dc=example,dc=org Ou: Groups structuralObjectClass: organizationalUnit dn: ou=Users,dc=example,dc=org ou: Users structuralObjectClass: organizationalUnit dn: ou=marketing,ou=Groups,dc=example,dc=org cn: marketing gidNumber: 1554 structuralObjectClass: posixGroup memberUid: user1 memberUid: userN dn: ou=administration,ou=Groups,dc=example,dc=org cn: administration gidNumber: 1555 structuralObjectClass: posixGroup memberUid: user1 memberUid: userN Users Dn: uid=user1,ou=Users,dc=example,dc=org structuralObjectClass: inetOrgPerson givenName: displayName: cn: uidNumber: homeDirectory: sn: gidNumber: objectClass: person objectClass: organizationalPerson objectClass: posixAccount objectClass: shadowAccount 

我相信OpenLDAP会添加缺less的top objectClass 。 因为我已经有这些用户的数据库,我更喜欢RDBMSes,而不是LDAP中的模式我有一个问题,理解为什么当我尝试login时, ldapsearch实用程序通过所有对象类,我有在ldap_oc_mappings表中而不是仅仅searchobjectClass inetOrgPerson 。 这样就不会有任何不必要的疑问。 无论如何,这些是表格:

 ldap_attr_mappings +----+-----------+---------------+-----------------------------------------------------------+---------------+---------------------------------+-------------+ | id | oc_map_id | name | sel_expr | from_tbls | join_where | param_order | +----+-----------+---------------+-----------------------------------------------------------+---------------+---------------------------------+-------------+ | 3 | 1 | sn | users .lName | users | NULL | 3 | | 4 | 1 | userPassword | concat('{MD5}',BASE64_ENCODE(unhex(users .password))) | users | NOT ISNULL(users .password) | 3 | | 5 | 1 | displayName | concat(users .fName,' ',users .lName) | users | NULL | 3 | | 6 | 1 | homeDirectory | users .homeDirectory | users | NULL | 3 | | 7 | 1 | loginShell | users .loginShell | users | NULL | 3 | | 8 | 1 | uidNumber | users .uidNumber | users | NULL | 3 | | 9 | 1 | gidNumber | users .gidNumber | users | NULL | 3 | | 10 | 1 | cn | users .loginName | users | NULL | 3 | | 11 | 1 | uid | users .loginName | users | NULL | 3 | | 12 | 3 | ou | ldap_groups.name | ldap_groups | NULL | 3 | | 14 | 2 | o | ldap_org_unit.o | ldap_org_unit | NULL | 3 | | 16 | 2 | dc | ldap_org_unit.o | ldap_org_unit | NULL | 3 | | 17 | 2 | description | ldap_org_unit.Description | ldap_org_unit | NULL | 3 | | 18 | 4 | gidNumber | ldap_groups.gid | ldap_groups | NULL | 3 | | 19 | 4 | cn | ldap_groups.cn | ldap_groups | NULL | 3 | +----+-----------+---------------+-----------------------------------------------------------+---------------+---------------------------------+-------------+ ldap_oc_mappings +----+--------------------+---------------+--------------+ | id | name | keytbl | keycol | +----+--------------------+---------------+--------------+ | 1 | inetOrgperson | users | userID | | 2 | organization | ldap_org_unit | id | | 3 | organizationalUnit | ldap_groups | gid | | 4 | posixGroup | ldap_groups | gid | +----+--------------------+---------------+--------------+ ldap_entry_objclasses +----------+---------------+ | entry_id | oc_name | +----------+---------------+ | 12216 | inetOrgPerson | | 12216 | posixAccount | | 12216 | shadowAccount | +----------+---------------+ 

objclasses条目只适用于一个用户。 每个用户都有这些objectClasses分配给他们。 这不是一个表格

 ldap_org_unit +----+-------------+---------------------------------+--------+---------------------+-----------+ | id | o | dn | parent | Description | oc_map_id | +----+-------------+---------------------------------+--------+---------------------+-----------+ | 1 | Example | DC=Example,DC=org | 0 | Example Co | 2 | | 2 | Users | ou=Users,DC=example,DC=org | 1 | | 3 | | 3 | Groups | ou=Groups,DC=example,DC=org | 1 | | 3 | +----+-------------+---------------------------------+--------+---------------------+-----------+ 

我认为这里的父母价值可能不正确

 ldap_groups +------+----------------+----------------+-----------------------------------------------+ | gid | name | cn | dn | +------+----------------+----------------+-----------------------------------------------+ | 1554 | Marketing | marketing | cn=marketing,ou=Groups,dc=example,dc=org | | 1155 | administration | administration | cn=administration,ou=Groups,dc=example,dc=org | +------+----------------+----------------+-----------------------------------------------+ Lastly: ldap_entries +-------+-----------------------------------------------+-----------+--------+--------+ | id | dn | oc_map_id | parent | keyval | +-------+-----------------------------------------------+-----------+--------+--------+ | 1 | DC=EXAMPLE,DC=ORG | 2 | 0 | 1 | | 2 | OU=USERS,DC=EXAMPLE,DC=ORG | 3 | 1 | 2 | | 3 | OU=GROUPS,DC=EXAMPLE,DC=ORG | 3 | 1 | 3 | | 1554 | CN=MARKETING,OU=GROUPS,DC=EXAMPLE,DC=ORG | 4 | 3 | 1554 | | 1155 | CN=ADMINISTRATION,OU=GROUPS,DC=EXAMPLE,DC=ORG | 4 | 3 | 1155 | | 22963 | CN=ROOT,DC=EXAMPLE,DC=ORG | 1 | 1554 | 12963 | | 12216 | CN=USER1,OU=USERS,DC=EXAMPLE,DC=ORG | 1 | 1555 | 2216 | +-------+-----------------------------------------------+-----------+--------+--------+ 

父母的价值观是否正确?

正如我所说的这个工程和用户能够login。但是当我运行ldasearch -b "dc=example,dc=org" "(objectclass=*)"它需要很长的时间。 我已经阅读了大量文章,指出RDBMSes不能用于LDAP后端的原因,主要是因为这个问题。 但是令人沮丧的是,这使我相信有一些不必要的疑问,而我的表格“关系”是不正确的。 ldapsearch的第一个结果是:

 # ROOT, EXAMPLE.ORG dn: cn=ROOT,dc=EXAMPLE,dc=ORG objectClass: inetOrgPerson objectClass: inetOrgPerson objectClass: posixAccount objectClass: shadowAccount cn: root sn: Admin uid: root gidNumber: 1554 uidNumber: 0 loginShell: /bin/bash displayName: Domain Admin userPassword:: ******* homeDirectory: /ldaphomes/root # USER1, USERS, EXAMPLE.ORG dn: cn=USER1,ou=USERS,dc=EXAMPLE,dc=ORG objectClass: inetOrgPerson objectClass: inetOrgPerson objectClass: posixAccount objectClass: shadowAccount cn: user1 sn: User 1 uid: user1 gidNumber: 0 uidNumber: 0 displayName: User 1 userPassword:: ****** 

正如你在这里看到的,objectClass inetOrgPerson出现两次。 这是给所有用户的。

当我执行这个: ldapsearch -b "dc=example,dc=org" "(cn=user1)" ,结果以毫秒为单位返回,这使我相信应该有一种方式来告诉OpenLDAP服务器总是基于CN。

嗯,这是一个很长的post/问题。 因此,对模式,父值,或为什么objectClasses显示两次,或者可能是一些指导,以优化这个任何意见,欢迎。

谢谢