# 三、LDAP 协议

## 通用定义

轻量级目录访问协议(LDAP)是一种行业标准应用协议，用于通过 IP 网络访问和维护分布式目录信息服务。就活动目录而言，LDAP 是我们用来与广告对话的协议。需要指出的一个重要事实是，LDAP 不能创建目录或指定目录服务如何运行。这些年来，LDAP 得到了改进，在撰写本文时，它已经达到了协议的第 3 版；有关此版本的更多信息，请参见 [RFC4511](http://tools.ietf.org/html/rfc4511) 。

## LDAP 数据交换格式

LDAP 数据交换格式(LDIF)是一种标准的纯文本数据交换格式，用于表示 LDAP(轻量级目录访问协议)目录内容和更新请求。LDIF 将目录内容表达为一组记录，每个对象(或条目)一条记录。它还将更新请求(如添加、修改、删除和重命名)表示为一组记录，每个更新请求一条记录。LDIF 定义了一组字段，用于标识我们想要处理的资源。这些字段是:

*   **dn:可分辨名称**:这是指唯一标识目录中某个条目的名称。它由 dc、ou 和 cn 组成。
*   **dc:域组件**:指域的各个组件。例如，www.google.com 可以写成 DC=www，DC=google，DC=com。
*   **ou:组织单位**:这是指用户所属的组织单位(或者有时是用户组)。如果用户属于多个组，您可以这样指定，例如，OU=律师，OU=法官。
*   **cn:通用名**:这是指个体对象(人的名字；会议室；食谱名称；职称；等等。)进行查询。

自 2003 年以来，微软提供了一个名为 LDIFDE 的实用程序来帮助构造 LDIF 查询。如果您安装了 AD DS 或 Active Directory 轻型目录服务(AD LDS)服务器角色，则此选项可用。要使用 LDIFDE，您必须从提升的命令提示符运行 LDIFDE 命令。您可以找到一个由 LDFIDE 生成的 LDIF 文件的例子，如下所示:

```cs
          1\. dn: cn=Peter Michaels, ou=Artists, l=San Francisco, c=US
          2\. changetype: modify
          3\. add: telephonenumber
          4\. telephonenumber: +1 415 555 0002

```

该脚本的第一行标识了我们想要与之交互的对象，在本例中是用户。为了避免同形异义的情况，我们试图通过指定其组织单位(OU)来尽可能精确。参数“l”和“c”分别代表地点和国家。这两个属性都在用户对象中指定。第二行指定了我们希望用这个脚本完成的操作类型；在这种情况下，我们希望通过添加(第 3 行)用户的电话号码(第 4 行)来修改用户。请注意，属性电话号码是用户对象支持的“标准”属性。

当然，正如我们之前所说的，LDIF 支持不止一个 ChangeType 操作。下面是支持的所有变更类型操作的列表。

| ChangeType(更改类型) | 描述 |
| 增加 | 指定新内容包含在导入文件中。 |
| 修改 | 指定导入文件中的现有内容已被修改。 |
| 删除 | 指定导入文件中的内容已被删除。 |

表 2:LDIF 可能发生的变化类型

## LDAP 2 和 LDAP 3 的区别

LDAP 3 定义了许多改进，允许更有效地实现互联网目录用户代理访问模型。这些变化包括:

*   对所有文本字符串属性使用 UTF-8 来支持扩展字符集。
*   目录为自己使用而维护的操作属性；例如，记录另一个属性被修改的日期和时间。
*   引用允许服务器将客户端指向另一台可能拥有客户端请求的数据的服务器。
*   使用目录发布模式，允许客户端发现服务器支持的对象类和属性。
*   扩展的搜索操作允许对结果进行分页和排序，以及客户端定义的搜索和排序控件。
*   通过基于 SASL 的身份验证机制增强安全性。
*   扩展操作，在不改变协议版本的情况下提供附加功能。

LDAP 3 与 LDAP 2 兼容。LDAP 2 客户端可以连接到 LDAP 3 服务器(这是 LDAP 3 服务器的要求)。但是，如果 LDAP 3 功能对其应用程序至关重要，LDAP 3 服务器可以选择不与 LDAP 2 客户端通话。