LDAP的英文全称是Lightweight Directory Access Protocol,一般都简称为LDAP。
LDAP目录服务是一种特殊的数据库系统,其专门针对读取,浏览和搜索操作进行了特定的优化。目录一般用来包含描述性的,基于属性的信息并支持精细复杂的过滤能力。目录一般不支持通用数据库针对大量更新操作操作需要的复杂的事务管理或回卷策略。而目录服务的更新则一般都非常简单。这种目录可以存储包括个人信息、web链结、jpeg图像等各种信息。为了访问存储在目录中的信息,就需要使用运行在TCP/IP之上的访问协议—LDAP。

LDAP目录中的信息是是按照树型结构组织,具体信息存储在条目(entry)的数据结构中。条目相当于关系数据库中表的记录。

LDAP是一个数据库,又不是一个数据库。说他是数据库,因为他是一个数据存储的东西。但是说他不是数据库,是因为他的作用没有数据库这么强大,而只是一个目录。
为了理解,给一个例子就是电话簿(黄页)。我们用电话簿的目的是为了查找某个公司的电话,在这个电话簿中附带了一些这个公司的基本信息,比如地址,经营范围,联系方式等。
这个例子是一个LDAP在现实生活中的表现。电话簿由一条一条的信息组成,信息按照行业,类比进行了分类。每条记录都分成了若干的区域,其中涵盖了我们要的信息。这就是一个Directory。一个树状的结构,每个叶子都是由一条一条的分成若干区域的记录。LDAP就是这么一个东西。
从概念上说,LDAP分成了DN, OU等。OU就是一个树,DN就可以理解为是叶子,叶子还可以有更小的叶子。
LDAP用途不是为了写,而是为了读。LDAP的用途不是针对并发写设计的,如果你有这样的需求,解决办法就应该是数据库,而不是LDAP。
另外一个例子,Access和SQL Server。Access就是一个数据库产品,但是主要用于家庭,功能和性能都比较弱。SQL Server就是一个专业的数据库系统,功能强大。
LDAP是一个轻量级的产品,主要目的是为了查,因此在架构和优化主要是针对读,而不是写。但并不是说LDAP不能满足,只是说强项不在这里。
LDAP作为一个统一认证的解决方案,主要的优点就在能够快速响应用户的查找需求。比如用户的认证,这可能会有大量的并发。如果用数据库来实现,由于数据库结构分成了各个表,要满足认证这个非常简单的需求,每次都需要去搜索数据库,合成过滤,效率慢也没有好处。虽然可以有Cache,但是还是有点浪费。LDAP就是一张表,只需要用户名和口令,加上一些其他的东西,非常简单。从效率和结构上都可以满足认证的需求。这就是为什么LDAP成为现在很人们的统一认证的解决方案的优势所在。
当然LDAP也有数据写入的接口,是满足录入要求的。
为了能对LDAP协议进行更好的理解,我们需要对以下概念有初步的认识:
目录信息树:DIT,Directory Information Tree,目录和条目的集合构成了目录信息树.
目录:Directory,存放对象的信息,这些信息以某种顺序组织,详细描述每个对象.
条目:Entry,目录信息树中的一个结点,是一个对象信息的集合,是目录信息中最基本的单位,包含该对象的一系列属性.
属性:Attribute,属性描述对象的特征.一个属性由属性类型(type)和一个或多个属性值(values)构成.
相对标识名:RDN,Relative Distinguished Name,条目的名字. 
唯一标识名:DN,Distinguished Name,在一个目录信息树中唯一标识一个条目的名字.相当于关系数据库表中的关键字(Primary Key)。
属性由类型(Type)和一个或多个值(Values)组成,相当于关系数据库中的字段(Field)由字段名和数据类型组成,只是为了方便检索的需要,LDAP中的Type可以有多个Value,而不是关系数据库中为降低数据的冗余性要求实现的各个域必须是不相关的。LDAP中条目的组织一般按照地理位置和组织关系进行组织,非常的直观。LDAP把数据存放在文件中,为提高效率可以使用基于索引的文件数据库,而不是关系数据库。Type的一个例子就是mail,其值将是一个电子邮件地址。

最新文章

  1. CSS3动画快速实现
  2. NPOI 单元格(cell) 格式参数
  3. webapp:移动端高清、多屏适配方案(zz)
  4. iOS获取窗口当前显示的控制器
  5. 字符集与字符编码 (charset & encoding)
  6. SQL日期(转)
  7. Master Nginx(3) - Using the Mail Module
  8. partial函数-python学习
  9. 使用IE滤镜实现css3中rgba让背景色透明的效果
  10. XHTML 是以 XML 格式编写的 HTML
  11. JavaScript(二)基本概念
  12. centos perl: symbol lookup error: /usr/local/lib64/perl5/auto/DBD/mysql/mysql.so: undefined symbol: mysql_init
  13. EF执行SQL返回动态类型
  14. python Drools
  15. keepalived实现高可用
  16. 大数据框架hadoop服务角色介绍
  17. kbmmw 中的日期时间操作
  18. python基础学习13----生成器&迭代器
  19. uva-10562-二叉树
  20. Eclipse c++ 编译调试

热门文章

  1. 记录使用微信小程序的NFC和蓝牙功能读取15693芯片的开发历程
  2. 8086的分段寻址技术学习总结(Segmented Addressing)
  3. python自动拉取备份压缩包并删除3天前的旧备份
  4. VM及centOS系统安装
  5. 实用的HTML优化技巧
  6. 一篇关于Maven项目的jar包Shell启动脚本
  7. 使用TensorFlow实现回归预测
  8. 【Linux】 linux的进程系统一点补充
  9. OpenGL学习笔记:第一个OpenGL程序
  10. New UWP Community Toolkit - XAML Brushes