LDAP协议简介

LDAP协议简介轻量级目录访问协议什么是 LDAP LDAP 全称是 LightweightD 轻量级目录访问协议 LDAP 是一个协议 约定了 Client 与 Server 之间的信息交互格式使用的端口号认证方式等内容 而 LDAP 协议的实现有着众多的版本 例如微软的 ActiveDirect 是 LDAP 在 Windows 上的实现 AD 实现了 LDAP 所需的树形数据库 解析请求数据并到数据库查询然后返回结果等功能 再例如 OpenLDAP 是可以运行再 Linux 上的 L

LDAP协议简介

轻量级目录访问协议

什么是LDAP?

LDAP全称是Lightweight Directory Access Protocol, [轻量级目录访问协议]

LDAP是一个协议, 约定了Client 与Server之间的信息交互格式使用的端口号认证方式等内容。
LDAP协议的实现有着众多的版本, 例如微软的Active Directory是LDAP在Windows上的实现, AD实现了LDAP所需的树形数据库, 解析请求数据并到数据库查询然后返回结果等功能。再例如OpenLDAP是可以运行再Linux上的LDAP协议的开源实现。
而我们平时所说的LDAP Server, 一般指的是安装并配置了Active Directory和OpenLDAP这些程序的服务器。

LDAP协议能解决什么问题

用户服务

计算机管理

管理服务器及客户端计算机账户, 所有服务器及客户端计算机加入域管理并按需实施组策略, 甚至可以控制计算机禁止修改壁纸

资源管理

管理打印机, 文件共享服务, 网络资源等实施组策略

应用系统的支持

对于电子邮件, 在线及时通讯, 企业信息管理等业务系统提供数据认证(身份认证, 数据集成, 组织规则等等)

为什么要用LDAP协议

LDAP协议拆而析之

轻量级

LDAP协议之前有一个 X.500 DAP协议规范, 该协议十分复杂, 是一个重量级协议。后来对X.500进行了简化, 诞生了LDAP协议, 与 X.500相比变得较为轻量

目录

目录服务就是按照树状存储信息的模式。目录服务的数据类型主要是字符型, 而不是关系型数据库提供的整型, 浮点型, 日期, 货币等类型。同样也不提供关系型数据库中普遍包含的大量的函数
目录具有很强的查询(读)功能, 适合于进行大量数据的检索。但目录只执行简单的更新(写)操作, 不支持批量更新所需要的事务处理功能, 它主要面向数据的查询服务, 不提供事务的回滚(rollback)机制
目录具有广泛的复制信息的能力, 适合于多个目录服务器同步/更新

LDAP数据库的信息组织形式

目录服务的数据库以树形方式存储数据, 也是一种NoSQL, 需要注意的是这是推荐的底层数据存储方式, 因为目录服务查询比写入操作要多得多, 所以使用树形数据库存储要有优势
但其实也可以使用MySQL或MongoDB这样的数据库当做LDAP数据源, LDAP只是一个协议, 约定的是客户端/服务器的通信方式, 理论上服务器只要能够处理所有LDAP协议规定的操作, 并返回正确的结果就可以

专有名字解释

在上面的用户目录中, 有许多英文缩写。其实并不神秘, 只是一些单词的缩写, 在与LDAP打交道的过程中, 这些名词一定会频繁遇到

DIT(Directory Information Tree) 目录信息树

Entry项

Root DSE (Root DSA-specific entry) 根节点项

每个LDAP服务器必须对外暴露一个特殊的, 叫做 Root DSE, 这个项的DN是空字符串, 这个项是根节点, 描述了LDAP服务器自身的信息和能力, 例如可以在下图看到LDAP服务器支持的功能, LDAP协议版本等信息
LDAP协议简介

dn(Distinguished Name) 分辨名

dn 如下图白色方框中的内容, 分辨名用于唯一标识一个, 以及它在目录树中的位置, 可以和文件系统中文件路径类比, 类似于关系型数据库中的主键
dn 字符串从左至右, 各组成部分依次向树根靠近
LDAP协议简介

rdn (Relative Distinguished Name) 相对分辨名

rdn就是键值对, 如下图黄色方框中的内容, dn由若干个rdn组成, 以逗号分隔
LDAP协议简介

dc (Distinguished Name) 域名组成

将 example.com 这样的域名, 拆成 dc=example,dc=com这样的形式

o (Organization) 组织机构,公司

在dn中可能会包含 o=公司 这样的组成部分, 这里的o指代组织机构

ou (Organization Unit) 组织单元, 部门

在dn中可能会包含 ou=某某部门 这样的组成部分, 这里的ou指代组织单元

Object Class

每个里面包含了若干个Object Class, Object Class指定了本项中必须, 可能包含的属性, 相当于MySQL中的建表语句。包含某个Object Class的项, 必须满足Object Class中约定的规范
如下图, person objectClass中规定了 cn 和 sn属性必须存在, 在这一的属性中, 你可以看到 cn 和 sn 被加粗显示了
LDAP协议简介

下图是 person object class 的定义, 规定了拥有此Object Class 的需要拥有的属性
LDAP协议简介

总结

LDAP 协议是一个历史悠久的协议, 诞生时间早于万维网, 在当时商业数据库并不发达, 而且当时商业数据库的驱动在多语言的支持上也不友好(有可能这个数据库在你使用的编程语言上根本没有相应的开发包)

LDAP是开放的Internet标准, 支持跨平台的Internet协议, 在业界中得到广泛认可, 并且市场上或者开源社区上的大多产品都加入了对LDAP的支持, 因此对于这类系统, 不需要单独定制, 只需要通过LDAP做简单的配置就可以与服务器做认证交互,”简单粗暴”可以大大降低重复开发和对接的成本

LDAP协议的用户目录是树形结构, 天然与组织机构契合, 而且在查询上速度非常快, 比其他任何数据库都要快

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/216860.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 上午10:53
下一篇 2026年3月18日 上午10:54


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号