LDAP基础概念
数据库
1.一、LDAP目录结构
数据结构
此图为树形目录结构,我将此跳过去了,由于这个是按照“国家这种结构来划分的”。若是你喜欢这样看更好,以下还有一种:ide
树也能够根据互联网域名组主。这种命名方式正愈来愈受欢迎,由于它容许使用DNS为目录服务定位 。这个LDAP目录树中使用基于域的命名。比较适合个人应用场景(从域名-->部门-->我的)。post
1.二、条目(Entry)ui
条目(Entry)就是目录管理的对象,他是LDAP中最基本的颗粒,就像字典中的词条,或者是数据库中的记录。一般对LDAP的添加、删除、更改、检索都是以条目为基本对象的。
编码
每个条目都有一个惟一的标识名(distinguished Name ,DN),好比(1.1中图2互联网域名树形图):cn=doubao,ou=Ops,dc=shuyun,dc=com。DN在语法上是由多个相对的标识名(distinguished Name ,DN)组成的,他们之间由逗号分隔。若是把DN看作对象的全路径,那么RDN就是其中的每一段路径。经过DN的层次型语法结构,能够方便地表示出条目在LDAP树中的位置。有时在不一致引发歧义的状况下,RDN也特指DN中最靠前的一段,而剩余的部分称为父标识(Parent DN,PDN)。此处再也不举例。RDN自己也能够由多个值构成,好比OU=Tech+CN=doubao,dc=shuyun,dc=com中的RDN为OU=Tech+CN=doubao,由2个值OU=Tech和CN=doubao组成,他们之间由加好隔开。spa
若是DN中含有一些特殊字符,好比:,=+<>;\",他们须要转转义符(\)来帮助表述。设计
1.三、属性(Attribute)3d
每一个条目均可以有不少属性(Attribute),好比常见的人都有姓名、地址、电话等属性。每一个属性都有名称及对应的值,属性值能够有单个、多个。好比你有多个电话。orm
LDAP为人员组织机构中常见的对象都设计了属性(好比commonName,surname)。下面有一些经常使用的别名(表1-3-1)
属性 | 别名 | 语法 | 描述 | 值(举例) |
commonName | cn | Directory String | 姓名 | doubao |
surname | sn | Directory String | 姓 | Chen |
organizationalUnitName | ou | Directory String | 单位(部门)名称 | Tech |
organization | o | Directory String | 组织(公司)名称 | shuyun |
telephoneNumber | Telephone Number | 电话号码 | 110 | |
owner |
DN | 该条目的拥有者 | cn=doubao,ou=ops,dc=shuyun | |
jpegPhoto | Binary | JPEG照片 | .. |
1.四、属性类型(AttributeType)
每一个属性都有惟一的属性类型(AttributeType),属性类型约定属性值的数据格式和语法类型(Syntax)。好比,属性cellPhone的类型为telephoneNumber,它规定了电话号码是由数字组成的,其中容许插入一些分隔符,如链接符、括号、空格等。
属性类型也约定了属性值是否能够有多少个,多值属性类型也可使人员信息的组织变得更加灵活并接近现实状况,好比:人员的手机、地址、邮箱等属性均可以有多个值。这样,用ldap组织的信息会比简单的表结构更加理想。
类型也规定了属性查询时的匹配规则、排序顺序、大小写敏感等。
1.五、对象类(ObjectClass)
对象类(ObjectClass)是属性的集合,LDAP预想了不少人员组织机构中常见的对象,并将其封装成对象类。好比人员(person)含有姓(sn)、名(cn)、电话(telephoneNumber)、密码(userPassword)等属性,单位职工(organizationalPerson)是人员(person)的继承类,除了上述属性以外还含有职务(title)、邮政编码(postalCode)、通讯地址(postalAddress)等属性。
经过对象类能够方便的定义条目类型。每一个条目能够直接继承多个对象类,这样就继承了各类属性。若是2个对象类中有相同的属性,则条目继承后只会保留1个属性。对象类同时也规定了那些属性是基本信息,必须含有(Must 活Required,必要属性):哪些属性是扩展信息,能够含有(May或Optional,可选属性)。
对象类有三种类型:结构类型(Structural)、抽象类型(Abstract)和辅助类型(Auxiliary)。结构类型是最基本的类型,它规定了对象尸体的基本属性,每一个条目属于且仅属于一个结构型对象类。抽象类型能够是结构类型或其余抽象类型父类,它公国将对象属性中共性的部分组织在一块儿,称为其余类的模板,条目不能直接集成抽象型对象类。辅助类型规定了对象实体的扩展属性。虽然每一个条米只属于一个结构型对象类,但能够同时属于多个辅助型对象类。
对象类自己是能够相互继承的,因此对象类的根类是top抽象型对象类。以经常使用的人员类型为例,他们的继承关系如图1-5-1:
图1-5-1
若是将其中一支 top-->person-->organizationalPerson-->inetOrgPerson的必要属性和可选属性列表(表1-5-2),就会发现这种设计仍是很是合理的。咱们能够从任何一个对象派生出本身的对象类,好比organizationalPerson派生出职工(employee)对象类,那么它能够含有工号(employeeNumber)、工种(employeeType)等属性。注意,对象类继承的时候会把属性是必须(Must)仍是可选(May)的特性也一并继承。也就是说person有cn和sn两个Must属性,organizationalPerson和inetOrgPerson因为直接或间接继承了person,也会有这两个Must属性。
表1-5-2
对象类 | 必要属性(Required) | 可选属性(Optional) | ||
top | objectClass | 无 |
||
person |
cn | description | seeAlso | telephoneNumber |
sn | userPassword | |||
organizationalPerson |
无 | destinationIndicator | facsimileTelephoneNumber | internationalISDNNumber |
1 | ou | physicalDeliveryOfficeName | ||
postalAddress | postalCode | postOfficeBox | ||
preferredDeliveryMethod | registeredAddress | st | ||
street | teletexTerminalIdentifier | telexNumber | ||
title | x121Address |
对象类 | 必要属性(Required) | 可选属性(Optional) | ||
inetOrgPerson | audio | businessCategory | carLicense | |
departmentNumber | displayName | employNumber | ||
employeeType | givenName | homePhone | ||
homePostalAddress | initals | jpegPhoto | ||
labeledURL | manager | |||
mobile | o | pager | ||
photo | preferredLanguage | roomNumber | ||
secretary | uid | userCertificate | ||
userOKCS12 | userSMIMECertificate | x500UniqueIdentifier |
1.六、模式(Schema)
对象类(ObjectClass)、属性类型(AttributeType)、语法(Syntax)分别约定了条目、属性、值,他们之间的关系以下图所示。因此这些构成了模式(Schema),模式中的每个元素都有惟一的OID编号,如2.5.4.41.条目数据在导入时一般须要接受模式检查,它确保了目录中全部的条目数据结构都是一致的。