LDAP的基本概念

  |   0 评论   |   1,210 浏览

在使用LDAP之前,应该理解许多重要的概念。本页介绍了许多重要的LDAP结构和想法。

LDAP directory tree using domain-based naming

intro_dctree.png

Directory Servers

directory server(在技术上更称为directory server代理,目录系统代理或DSA)是一种网络数据库,其存储表示为entry树的信息。这与使用由行和列组成的表的关系数据库不同,因此directory server可以被认为是NoSQL数据库的一种类型(即使directory server已经比NoSQL术语长了很多)。

虽然几乎所有directory server都支持LDAP,但某些服务器支持可用于与数据交互的其他协议。其中一些协议包括X.500(原始目录访问协议,LDAP为更轻量级版本),命名服务协议(如DNS和NIS),基于HTTP的协议(如DSML和SCIM)以及专有协议(如Novell的NDS)。

请参阅directory server有关最流行的directory server的详细信息。

Entries

LDAP entry是有关实体的信息的集合。每个entry由三个主要组件组成:distinguished name,attribute集合和object classes集合。下面更详细地描述这些中的每一个。

DN和RDN

entry的distinguished name(通常称为DN)唯一地标识该entry及其在directory information tree(DIT)层次结构中的位置。LDAP entry的DN非常类似于文件系统上文件的路径。

LDAP DN由零个或多个称为相对distinguished name或RDN的元素组成。每个RDN由一个或多个(通常只有一个)attribute - 值对组成。例如,“uid = john.doe”表示由名为“uid”的attribute组成的RDN,其值为“john.doe”。如果RDN具有多个attribute - 值对,则它们用加号分隔,例如“givenName = John + sn = Doe”。

由零RDN组成的特殊distinguished name(因此具有仅为空字符串的字符串表示)有时称为“空DN”,并引用称为根DSE的特殊类型的entry,该entry提供有关内容和功能的信息。directory server。有关根DSEentry的详细信息,请参阅DIT和LDAP根DSE

对于具有多个RDN的DN,RDN的顺序指定DIT中相关entry的位置。RDN由逗号分隔,DN中的每个RDN以降序表示层次结构中的级别(即,更接近树的根,称为命名上下文)。也就是说,如果从DN中删除RDN,则会获得该entry的DN,该DN被视为前DN的父级。例如,DN“uid = john.doe,ou = People,dc = example,dc = com”具有四个RDN,父DN为“ou = People,dc = example,dc = com”。

有关DN,RDN及其字符串表示的更深入说明,请参阅LDAP DN和RDN页面。

Attributes

attribute保存entry的数据。每个attribute都有一个attribute类型,零个或多个attribute选项,以及一组包含实际数据的值。

attribute类型是架构元素,用于指定LDAP客户机和服务器应如何处理attribute。所有attribute类型必须具有对象标识符(OID)和零个或多个名称,可用于引用该类型的attribute。它们还必须具有attribute语法,该attribute语法指定可以存储在该类型的attribute中的数据类型,以及一组匹配规则,这些规则指示应如何对该类型的attribute值执行比较。attribute类型还可以指示是否允许attribute在同一entry中具有多个值,以及该attribute是用于保存用户数据(用户attribute)还是用于服务器的操作(操作attribute)。操作attribute通常用于配置和/或状态信息。

attribute选项并非经常使用,但可用于提供有关attribute的一些元数据。例如,attribute选项可用于提供不同语言的值的不同版本。

有关attribute类型,语法,匹配规则和其他类型的架构元素的更多信息,请参阅了解LDAP架构

LDAP为人员组织机构中常见的对象都设计了属性(比如commonName,surname)。下面有一些常用的别名:

属性别名语法描述值(举例)
commonNamecnDirectory String姓名sean
surnamesnDirectory StringChow
organizationalUnitNameouDirectory String单位(部门)名称IT_SECTION
organization oDirectory String组织(公司)名称example
telephoneNumber
Telephone Number电话号码110
objectClass

内置属性organizationalPerson

Object Classes

object classes是模式元素,它指定可能与特定类型的对象,进程或其他实体相关的attribute类型的集合。每个entry都有一个结构object classes,它指示entry表示的object classes型(例如,它是否是关于人,组,设备,服务等的信息),并且还可以具有零个或多个辅助对象为该entry提供其他特征的类。

与attribute类型一样,object classes必须具有对象标识符,但它们也可以具有零个或多个名称。object classes还可以列出一组必需的attribute类型(以便具有该object classes的任何entry也必须包括这些attribute)和/或一组可选的attribute类型(以便具有该object classes的任何entry可以选择性地包括这些attribute) 。

有关object classes和其他类型的架构元素的更多信息,请参阅了解LDAP架构

Object Identifiers (OIDs)

对象标识符(OID)是一个字符串,用于唯一地标识LDAP协议中的各种元素,以及整个计算中的其他区域。OID由一系列由句点分隔的数字组成(例如,“1.2.840.113556.1.4.473”是表示服务器端排序请求控件的OID)。在LDAP中,OID用于标识诸如模式元素(如attribute类型,object classes,语法,匹配规则等),控件以及扩展请求和响应之类的内容。在模式元素的情况下,可能还有用户友好的名称可用于代替OID。

有关在架构中使用OID的讨论,请参阅了解LDAP架构。有关LDAP中使用的许多OID的列表,请参阅“ LDAP OID参考指南”

Search Filters

搜索过滤器用于定义标识包含某些类型信息的entry的标准。有许多不同类型的搜索过滤器:

  • 存在过滤器可用于识别指定attribute具有至少一个值的entry。

  • 等式过滤器可用于标识指定attribute具有特定值的entry。

  • 子字符串过滤器可用于标识其中指定attribute具有至少一个与给定子字符串匹配的值的entry。

  • 可以使用大于或等于滤波器来识别其中指定attribute具有被认为大于或等于给定值的至少一个值的entry。

  • 可以使用较小或相等的过滤器来标识其中指定attribute具有至少一个被认为小于或等于给定值的值的entry。

  • 近似匹配过滤器可用于标识其中指定attribute具有近似等于给定值的值的entry。请注意,没有“近似等于”的官方定义,因此这种行为可能因服务器而异。有些服务器使用“听起来像”算法,如Soundex或Metaphone变体之一。

  • 可扩展匹配过滤器可用于提供更高级的匹配类型,包括在entry的DN内使用自定义匹配规则和/或匹配attribute。

  • AND过滤器可用于标识与AND内封装的所有过滤器匹配的entry。

  • OR过滤器可用于标识与OR中封装的至少一个过滤器匹配的entry。

  • NOT过滤器可用于否定封装过滤器的结果(即,如果过滤器匹配entry,则封装匹配过滤器的NOT过滤器将不匹配entry,如果过滤器与entry不匹配,则为NOT封装非匹配过滤器的过滤器将与entry匹配)。

用于执行匹配的逻辑封装在匹配规则中,这些规则在attribute类型定义中指定。不同的匹配规则可以使用不同的逻辑来进行确定。例如,caseIgnoreMatch匹配规则在比较两个字符串时将忽略大小写的差异,而caseExactMatch匹配规则则不会。许多匹配规则特定于某些数据类型(例如,distinguishedNameMatch匹配规则期望仅对DN的值进行操作,并且可以执行忽略DN和RDN组件之间无关紧要的空间,忽略多值RDN中元素顺序的差异等)。

有关LDAP过滤器及其字符串表示的更完整讨论,请参阅LDAP过滤器页面。有关搜索操作的详细信息,请参阅LDAP搜索操作页面。有关匹配规则和其他架构元素的详细信息,请参阅“ 了解LDAP架构”页面。

Search Base DNs and Scopes

所有搜索请求都包括一个基本DN元素,它指定要在其中查找匹配entry的DIT部分,以及一个范围,它指定应该考虑多少子树。定义的搜索范围包括:

  • baseObject范围(通常简称为“base”)表示只应考虑搜索库DN指定的entry。

  • singleLevel作用域(通常称为“one”或“onelevel”)表示只应考虑搜索基本DN正下方的entry(而不是基本entry本身)。

  • 整个子树范围(通常称为“子”)表示应该考虑指定为搜索基DN的entry以及它下面的所有entry(到任何深度)。

  • subordinateSubtree范围指示应考虑搜索基础DN(任何深度)下方的所有entry,但不考虑搜索库entry本身。

有关LDAP搜索操作的组件和行为的详细信息,请参阅LDAP搜索操作。

Modifications and Modification Types

LDAP客户端可以使用修改请求来更改entry中存储的数据。修改请求指定要更新的entry的DN以及要应用于该entry的修改列表。每个修改都有一个修改类型,一个attribute名称和一组可选的attribute值。

定义的修改类型包括:

  • 添加修改类型指示应将一个或多个attribute值添加到entry中。这可用于添加全新attribute,或向现有attribute添加新值。始终需要为添加修改类型指定至少一个attribute值。

  • 删除修改类型指示应从entry中删除一个或多个attribute值或整个attribute。如果删除修改包含一个或多个attribute值,则仅删除这些值。如果删除修改不包含任何值,则将删除整个attribute。

  • 替换修改类型指示应该用新集替换指定attribute的值集(其可能包括或可能不包括entry中已存在的值)。如果替换修改具有一个或多个attribute值,则这些值将用于关联attribute。如果替换修改没有任何值,则相关attribute将从entry中删除(如果存在)。

  • 增量修改类型表示指定attribute的整数值应增加指定的量(如果增量值为负,则减少)。

有关LDAP修改操作的组件和行为的更多信息,请参阅LDAP修改操作。

LDAP URL

LDAP URL封装了许多信息,这些信息可用于引用directory server,directory server中的特定entry或用于标识directory server中的匹配entry的搜索条件。LDAP URL最常用于引用(如下所述),在某些客户端API中,它们可用于指定用于建立连接的某些attribute。

有关LDAP URL的内容和字符串表示形式的详细信息,请参阅LDAP URL页面。

Controls

控件是一条信息,可以包含在LDAP请求或响应中,以提供有关该请求或响应的其他信息,或更改服务器应该解释的方式(如果是请求)或客户端(在回复的情况下)。例如,服务器端排序请求控件可以包括在搜索请求中,以指示服务器应该在将匹配entry发送到客户端之前以特定方式对匹配entry进行排序。

LDAP控件有三个元素:

  • 唯一标识控件类型的对象标识符(OID)。这是必需的元素。

  • 关键性。这是一个标志,指示服务器如果无法识别提供的请求控件,或者如果它不能在请求它的上下文中支持该控件,则应该如何操作。“true”的关键性表示控件是请求的关键部分,如果请求不支持控制,则服务器应拒绝该请求。“false”的关键性表示控件更像是一个“很好”的部分请求,并且如果服务器不能支持控制,那么它应该继续并处理操作,就好像没有包含控件一样。如果服务器在请求的上下文中支持控件,则不会发挥关键性。

  • 一个可选值,可以提供用于处理控件的附加信息。例如,对于服务器端排序请求控件,控件值应指定所需的排序顺序。控件的编码根据控件的类型而变化。

Referrals

引用是一种LDAP响应,表示服务器无法处理所请求的操作,但建议如果您在其他地方(例如,在不同的服务器中,和/或在其他位置)尝试该请求,该请求可能会成功DIT)。转介可能会因多种原因退回,包括:

  • 客户端请求了一个操作,该操作针对的是在建立连接的服务器中不存在的entry,但服务器能够建议该entry的位置。

  • 客户端请求针对服务器中存在的entry的操作,但服务器当前由于某种原因无法处理该请求。例如,客户端向只读副本发送写请求,副本能够将请求重定向到可写服务器。

  • 数据包括一种特殊类型的引用entry(有时称为“智能引用”),当客户端请求或低于该entry时,服务器会根据该entry的内容生成引用。

除了引用操作结果之外,还存在称为搜索结果引用的搜索操作的相关类型的响应,其可以用于指示搜索的一部分可以在不同的服务器中进行。这在数据集太大而不适合一台服务器的情况下特别有用,并且DIT的不同部分在不同服务器之间被分解。

Alias Entries

别名entry是一种特殊类型的entry,指向DIT中的另一个entry,与符号链接指向文件系统上的另一个文件的方式非常相似。

别名entry主要对搜索操作有益,因为它可用于在DIT的一个位置创建一个entry,使其看起来位于另一个位置。例如,在使用特定子树中的entry的存在来进行诸如组成员资格之类的确定或作为为某种目的表示授权的手段的情况下,这可能是有用的。搜索请求包含一个元素,指示应如何处理搜索期间遇到的任何别名。

以别名entry为目标的非搜索操作不会遵循别名。别名不能用作绑定操作的目标标识。别名必须是叶entry,因为无法在别名entry下添加entry。

请注意,并非所有directory server都支持别名。如果应用程序旨在与各种directory server兼容,则应避免使用别名。

参考


读后有收获可以支付宝请作者喝咖啡