一、LDAP信息模型


    LDAP信息模型定义了在目录中保存信息的最基本的单位和数据类型。目录中的最基本的信息单位是条目(Entry)。条目由一系列的属性(Attribute)构成,一个属性可以有多个值(Value)。条目的结构在Schema中定义。Schema可以定义一类条目必须属性和可选属性,以及各个属性的类型和比较方法。


二、LDAP命名模型


    LDAP命名模型定义了如果组织和查询目录中的数据。命名模型为每一个Entry指定了唯一的识别名(DN/Distinguished Name),如:uid=name,ou=people,dc=example,dc=com(','后可以跟空格,不影响DN的值)。DN中最左边的值为相对识别名(RDN/Relative Distinguished Name)。虽然DN在目录中必须是唯一的,但是在不同的目录中可以有相同RDN的Entry。


    别名,通过建立Object Class为alias的Entry,可以为目录建别名。但不建议使用。


    DN中的特殊字符(,)应该在之前加反斜杠(/)。


特殊字符表

特殊字符

ASII码

使用值

DN、RDN前后的空格

32

/<space>

DN、RDN前后的井号(#)

35

/#

逗号(,)

44

/,

加号(+)

43

/+

双引号(")

34

/"

反斜杠(/)

92

//

小于号(<)

60

/<

大于号(>)

62

/>

分号(;)

59

/;


三、LDAP功能模型


    功能模型中定义了一系列利用LDAP协议的操作。它包含了三个部分:


        1)、查询操作(Interrogation Operations):容许查询目录和取得数据。它包含Search Operating和Compare Operation。


        2)、更新操作(Update Operations):容许添加(ADD)、删除(Delete)、重命名(Rename)和改变目录(Modify)。


        3)、认证和管理操作(Authentication And Control Operations)容许客户端在目录中识别自己,并且能够控制一个Session的性质。


    1、The LDAP Search Operation


        The LDAP Search Operation被用来查询目录中的Entry和取得目录中的Entry。它需要8个参数:


            1)、Base Object for the Search:包含指定需要查询目录的根Entry的DN。


            2)、Search Scope:指定查询的范围,可能包含sub,onelevel和base。sub指查询Base Object指定的所有子目录,包括根目录;onelevel指仅仅查询根目录的下一层目录;base只查询根目录本身。


            3)、Alias Dereferencing Options:指定查询时如何处理别名,可能包含neverDerefAliases,derefInSearching,derefFindingBaseObject,derefAlways。neverDerefAliases指在查询和定位中考虑别名;derefInSearching指定位Base Object时考虑别名,但查询子目录时不考虑;derefFindingBaseObject指定位Base Object时不考虑别名,但查询子目录时考虑;derefAlways指在查询和定位中都不考虑别名。


            4)、Size Limit:返回Entry的最大个数。如实际检索结果多于Size Limit,就只返回前Size Limit个Entry,并返回LDAP_SIZELIMIT_EXCEEDED。如Size Limit值为0,表示接受所有检索结果。但服务器设定的上限,不能通过这个属性修改。


            5)、Time Limit:应答查询消息的最大秒数。如超时应返回LDAP_TIMELIMIT_EXCEEDED。值为0表示没有限制。


            6)、Attributes-only Parameter:如这个字段被设置为TRUE,那么仅返回属性的类型,而不返回值。如为False,则类型和值都返回。


            7)、Search Filter:返回的Entry的类型。


            8)、List of Attributes to Return:返回属性的类型,如为空或*,则返回所有属性。


    2、The Compare Operation


        这个操作被用来验证一个Entry是否存在。如果客户端提供的DN,和属性值存在就返回一个肯定的回复,否则返回一个否定的回复。这个操作只有在以下的情况下和Search Operation反映不一样。当提供的Comparison中的一个属性,在这个Entry中存在时,Compare Operation会返回一个特定的回复表示这个属性不存在,而Search Operation不会做特殊的处理。


    3、The Add Operation


        添加错误容许创建一个新的Directory Entry。它有两个参数:DN和属性集。添加一个Entry时必须满足以下四个条件:


            1)、新Entry的父Entry必须已经在目录中存在。


            2)、提供的DN必须唯一。


            3)、新Entry必须符合有效的Schema。


            4)、访问控制必须容许这个操作。


    4、The Delete Operation


        删除操作容许从目录中删除一个Entry。它只有一个参数:DN。删除一个Entry必须满足以下三个条件:


            1)、被删除的Entry必须已经存在。


            2)、被删除的Entry必须没有子对象。


            3)、访问控制必须容许这个操作。


    5、The Rename(Modify DN) Operation


        重命名操作容许修改Entry的名字,或在目录中移动Entry。它有四个参数:被操作Entry的DN,新的RDN,可选新父Entry的DN,Delete-Old-RDN标志。重命名一个Entry必须满足以下三个条件:


            1)、被操作的Entry必须存在。


            2)、新的DN必须唯一。


            3)、访问控制必须容许这个操作。


        如果只是重命名,不改变目录,就将new-parent空着。delete-old-RDN是一个boolean型的标志,表示重命名后旧的RDN是否需要继续保存在Entry中。


        LDAPv2只有修改RDN的操作,没有修改DN的操作。


    6、The Modify Operation


        修改操作容许更新一个已存在的Entry。它有两个参数:被修改Entry的DN和修改的属性集。修改操作能够给Entry的属性添加新的属性值,删除一个属性的值,将一些属性的值更新为新的值。修改一个Entry必须满足以下两个条件:


            1)、被修改的Entry必须存在。


            2)、所有属性的修改操作必须全部成功。


            3)、修改后的Entry必须符合Schema。


            4)、访问控制必须容许这个操作。


        所有的属性的修改必须全部成功,否则整个Entry都不会被修改。


    7、The Bind Operation


        通过提供DN和证书,一个客户端可以使用Bind操作认证自己。服务器判断客户端提供的DN和证书是否正确,如正确服务器就提供给客户端一定的权限。


    8、The Unbind Operation


        当客户端调用Unbind操作时,服务器会丢弃所有客户端的证书,停止与客户端的连接,中止所有操作。


    9、The Abandon Operation


        Abandon操作只有一个参数:将被丢弃的LDAP操作的Message ID。当客户端不再希望取得指定操作的结果时,调用Abandon操作。


四、LDAP安全模型