2009-05-19 99 views
58

在我参与过的很多项目中,我都与LDAP保持联系,但事实是,我并不真正了解它。我认为这只是一个人目录,但在我发现它可以包含任何分层结构的对象之后。LDAP解决了什么问题?

我在盒安装OpenLDAP和我发现关于刚刚安装很多教程。

什么是LDAP? LDAP是正确的选择的情况是什么?我应该知道哪些LDAP概念与它一起工作? LDAP的优点是什么?仅仅因为旧的应用程序使用它而被使用?互联网上的任何地方都有好的文档解释所有这些问题吗?

UPDATE: 补充我发现this link其中包含LDAP新手像我这样的快速入门指南的答案。

回答

38

什么是LDAP? LDAP是正确的选择的情况是什么?

LDAP的核心是访问适合存储在目录中的对象的协议。是否“合适”是一种完全主观的决定,这是由实施者决定的,但通常这意味着许多对象的集合很少(或从不)更新数据,其中每个对象都有明显的或规范的方式来查看达:

  • 电话簿在图书馆(查找通过名称或电话号码)
  • 职称的建筑(查找由标题,作者等)
  • 租户(通过查找地板,套房,名称等)

等。

请注意,LDAP本身只是一个协议,并不提供任何实际的存储空间 - 就像同样的方式,HTTP并不意味着你是否使用Apache,Jetty,Tomcat,Mongrel等。作为一个Web服务器。 (与一般的LDAP的一个问题是名称的混乱重用意味着不同的事情。维基百科有a good section这一点。)

9

LDAP为O(1)的读取性能,以换取O(东西更糟)写性能。它非常适合频繁访问的数据,但很少更改 - 人员目录,机器名称和地址等等。 (因此缩写为:轻量级目录访问协议)

LDAP是一个正确的选择,使用非关系数据库(在降低开发人员的熟悉度和奇怪的性能特性方面)的痛苦低于盲目快速的阅读访问。

+5

请让你的O( )的权利。它们并不意味着你认为 – Javier 2009-05-19 19:53:02

+1

要说明的是:我的意思是检索时间不取决于数据存储中元素的数量(即查询不会越慢表格越大)。虽然插入在大多数LDAP实现中都有。 – 2009-05-19 21:24:22

+1

任何值得使用的ldap服务器都会保留dn(aka主键)上的索引,并允许您定义其他索引以优化常见查询。 – dwarring 2009-05-27 02:31:03

2

LDAP是一个接入协议;它只提供一个API给您正在尝试查找应用程序的底层技术 - directory service。 OpenLDAP是开源的目录服务之一; Sun有另一个名为OpenDS的实现。 Active Directory和Novell NDS是该领域常见的另外两种。

目录可用于存储任何类型的资源信息和资源之间的关系 - 例如,一个用户目录,打印机或网络接入设备的权利。

1

在我,我们使用LDAP作为我们主要的用户认证系统老的工作场所之一。

这反过来为我们的各种系统提供了信息。他们属于,他们应该在那里安装他们的主目录,联系信息,员工管理。

不一定受LDAP控制,但其他我们通过LDAP混合使用的东西是存在SQL用户,K4,samba和电子邮件帐户生成。

3

我在兼职和全职学生工作。我的课程鼓励(阅读需要)许多小组项目。

我已经使用openLdap和phpLdapAdmin来控制对Subversion和Mercurial Repos,Trac项目,Hudson等的访问。安装起来并不容易,但保存在管理中的时间是上帝发送的。

如果您有许多项目需要能够使用不同资源的人群,那么这是一个很好的工具。

13

DIT是一种层次化的描述方案,它非常适合B-Tree算法,因此在大多数情况下会产生巨大的搜索性能。像OpenDS这样的Directory Server在微秒内返回索引搜索,而RDBMS系统则要慢得多。目录服务器(通常称为LDAP服务器)交换资源(RAM,CPU)以实现快速读取响应。 RDBMS系统在管理有问题的数据方面提供了更多的功能。需要几乎或零更新,简单和小型网络协议的速度?使用目录服务器。需要数据管理和挖掘功能,和/或在数据之间定义关系方面的数据库的高速变化?使用RDBMS(MySQL是你最好的选择)。

5

我喜欢的一个观点是LDAP是一个在持久性存储之上的应用程序,而数据库是一个持久性存储。两者都可以用来存储用户信息。

LDAP为您提供了一个难以在数据库中执行的层次结构。您可以在数据库中创建层次结构,但执行诸如委派(这些行仅属于您)或ACL上的行很难。因此,如果您使用LDAP来存储用户身份,则将安全问题推送到数据库之外更容易。试图在数据库中解决它很奇怪。

与此同时,LDAP报告反对(将LDAP转换为用于报告的数据库)非常糟糕。要在需要快速搜索的树中深入存储属性可能会对性能造成影响(不要这样做,将数据库放在一边或尝试通过重新设计DIT来平滑查询)。在一个非常深的DIT中存储属性到处都是一个糟糕的LDAP或系统设计,但有时候,如果你绑定到供应商产品或传统应用程序,这是不可避免的。