LDAP(轻量级目录访问协议,Lightweight Directory Access Protocol)是一种用于访问和维护分布式目录服务的开放标准协议。它最初是为在网络上访问和管理目录信息而设计的。
目录是一种层次结构的数据库,用于存储和组织各种类型的信息,如用户、组织、设备等。LDAP提供了一种标准的方式来搜索、读取、修改和维护这些目录数据。
LDAP的设计目标是简单、高效和可伸缩。它使用客户端-服务器模型,其中客户端发出请求并与LDAP服务器进行通信,而服务器则处理请求并返回相应的结果。
LDAP协议基于TCP/IP协议栈,并使用基于字符串的协议元素进行通信。它使用特定的端口(默认是389端口)来监听客户端请求。
LDAP协议支持各种操作,包括:
- 绑定(Bind):建立客户端与服务器之间的身份验证和安全关系。
- 搜索(Search):根据特定的搜索条件在目录中查找匹配的条目。
- 添加(Add):向目录中添加新的条目。
- 修改(Modify):修改现有目录条目的属性值。
- 删除(Delete):从目录中删除现有条目。
- 比较(Compare):比较给定条目的属性值是否与指定值匹配。
LDAP广泛用于企业网络中的身份认证、用户管理、权限控制等方面。它也被许多应用程序和服务(如电子邮件、文件共享和VPN)用作集中式的用户和权限管理系统。
需要注意的是,LDAP是一种协议而不是特定的实现。常见的LDAP服务器实现包括OpenLDAP、Microsoft Active Directory和Novell eDirectory等。
总之,LDAP是一种用于访问和管理分布式目录服务的协议,它提供了一种标准的方式来搜索、读取、修改和维护目录中的信息。
本文讨论了轻量级目录访问协议 (LDAP) 查询,它在排查 Microsoft Exchange Server 及它与其目录之间关系的故障时十分有用,但是它也经常令人困惑不解。本文介绍了有关 LDAP 查询的基本信息。
基本 LDAP 语法
何时使用 LDAP 查询?
- 使用“Active Directory 用户和计算机”执行搜索
- 使用 LDP 执行搜索
- 使用 LDIFDE 执行搜索
- 在 ADModify 中使用 LDAP 查询
基本 LDAP 语法
- =(等于)
此 LDAP 参数表明某个属性等于某个值的条件得到满足。例如,如果希望查找“名“属性为“John”的所有对象,可以使用:
(givenName=John)
这会返回“名”属性为“John”的所有对象。圆括号是必需的,以便强调 LDAP 语句的开始和结束。 - &(逻辑与)
如果具有多个条件并且希望全部条件都得到满足,则可使用此语法。例如,如果希望查找居住在 Dallas 并且“名”为“John”的所有人员,可以使用:
(&(givenName=John)(l=Dallas))
请注意,每个参数都被属于其自己的圆括号括起来。整个 LDAP 语句必须包括在一对主圆括号中。操作符 & 表明,只有每个参数都为真,才会将此筛选条件应用到要查询的对象。 - !(逻辑非)
此操作符用来排除具有特定属性的对象。假定您需要查找“名”为“John”的对象以外的所有对象。则应使用如下语句:
(!givenName=John)
此语句将查找“名”不为“John”的所有对象。请注意:! 操作符紧邻参数的前面,并且位于参数的圆括号内。由于本语句只有一个参数,因此使用圆括号将其括起以示说明。 - *(通配符)
可使用通配符表示值可以等于任何值。使用它的情况可能是:您希望查找具有职务头衔的所有对象。为此,可以使用:
(title=*)
这会返回“title”属性包含内容的所有对象。另一个例子是:您知道某个对象的“名”属性的开头两个字母是“Jo”。那么,可以使用如下语法进行查找:
(givenName=Jo*)
这会返回“名”以“Jo”开头的所有对象。
以下是 LDAP 语法的高级使用示例:
- 您需要一个筛选条件,用来查找居住在 Dallas 或 Austin,并且名为“John”的所有对象。使用的语法应当是:
(&(givenName=John)(|(l=Dallas)(l=Austin))) - 您发现应用程序日志中有 9,548 个事件,因此需要查找导致这些日志事件的所有对象。在此情况下,您需要查找所有被禁用的用户 (
msExchUserAccountControl=2
),这些用户的msExchMasterAccountSID
没有值。使用的语法应当是:
(&(msExchUserAccountControl=2)(!msExchMasterAccountSID=*))
注意:
! 操作符与通配符的结合使用可查找属性未设置为任何值的对象。