如何在ldap目录中存储简单的名称-值对

如何在ldap目录中存储简单的名称-值对,ldap,preferences,openldap,Ldap,Preferences,Openldap,我正在为一系列共享相同用户的web应用程序创建一个用户存储库ldap后端。我想在此ldap位置存储首选项信息。这样,与用户相关的所有内容都可以在同一个地方维护,并且可以在所有应用程序之间共享 我想到的是这样一个总体结构: ou=People,dc=domain,dc=com uid=jdoe,ou=People,dc=domain,dc=com ou=Preferences,uid=jdoe,dc=domain,dc=com ou=firstpreference,ou=P

我正在为一系列共享相同用户的web应用程序创建一个用户存储库ldap后端。我想在此ldap位置存储首选项信息。这样,与用户相关的所有内容都可以在同一个地方维护,并且可以在所有应用程序之间共享

我想到的是这样一个总体结构:

ou=People,dc=domain,dc=com uid=jdoe,ou=People,dc=domain,dc=com ou=Preferences,uid=jdoe,dc=domain,dc=com ou=firstpreference,ou=Preferences,uid=jdoe,dc=domain,dc=com value : 123 value : 456 ou=人,dc=域,dc=com uid=jdoe,ou=People,dc=domain,dc=com ou=Preferences,uid=jdoe,dc=domain,dc=com ou=firstpreference,ou=Preferences,uid=jdoe,dc=domain,dc=com 价值:123 价值:456 我有几个问题:

  • 用户条目下面的jsut是开始存储首选项的正确位置吗?此条目应该是什么对象类?我正在试验organizationalUnit,但它似乎不正确

  • 存储首选项的名称-值对的最佳方法是什么?在这里,我的最佳嘉宾是在首选项下方创建一个条目,并在其下方创建一个值。这样我就可以解释多个值。这些条目的正确对象类应该是什么


  • 我正在使用OpenLDAP,不想更改它附带的模式。有没有一种方法可以使用可用的模式来设置它?

    我真的不认为LDAP目录是存储它的最佳位置。如果是web应用程序首选项,则应将它们与web应用程序一起存储,并以共享方式存储在web应用程序中

    LDAP目录与您的用户帐户、权限、组织结构有关—我不建议将特定于应用程序的设置放在LDAP目录中

    马克

  • 您当然可以将首选项存储为用户节点的子级。备选方案将在用户节点本身或完全独立的分支中。取决于您将如何维护它(谁将拥有权限、权限的粒度、添加新首选项和应用程序的频率等)

    OU是错误的对象类型。您应该定义自己的模式以适合您的应用程序。通常,您希望将架构更改保持在最低限度,因此您定义的架构应设计为在需要新的首选项/应用时可扩展

  • 您可以为每个首选项定义一个属性,并使用LDAP服务器内置的名称-值对支持。或者,您可以定义一个通用的“首选项”属性,并将名称和值存储在数据中。同样,您如何做取决于有多少首选项、更改频率、搜索和索引字段的能力等


  • 没有什么能阻止你在所有事情上使用内置类型。就像没有什么可以阻止您调用所有变量v1、v2和文件stuff.txt一样。但是当没有任何内置类型符合您的需求时,现在是添加您自己的类型的时候了。这是一件非常简单的事情。

    而LDAP是一个版本化的读优化数据库,就像SQL是读/写优化的,NoSQL db是键值数据存储一样。LDAP非常适合大规模部署,因为集群已经考虑到了一次写入多次读取。但是,如果一个用例对键值有很多读/写操作,那么像redis或memcached这样的NoSQL数据库更适合于基本键值数据存储。

    RADIUS就是这样做的,在一定程度上Kerberos就是这样做的。如果您阅读了LDAP的RFC,那么您会发现LDAP与用户身份验证没有任何关系,除了microsoft的Active Directory、unix PAM、cisco、kerberos、sun和其他几个“企业”软件供应商将LDAP用作主要的分布式数据存储,而不是SQL server或网络共享上的平面文件。