本文原创作品,如需转载请注明来源,作者:姜涛, towerjt@gmail.com
信息模型
信息指存储在 Directory 中的内容。 LDAP 中最基础的信息单元是条目,存储的结构是一个树形的结构。
LDAP 中的信息可以归纳为“条目、属性、值”三类
<!-- --><!-- --><!-- -->
每一个 条目都有一个标示名( DN ),这是根节点,上图的 DN 是 dc=example,dc=com 。每一个条目由一个属性和值组成。dc类似于表名?
属性有语法和匹配规则,语法标明对应与属性的值是什么类型,( INTEGER 、 DirectoryString 、 OID 、 GeneralizedTime 等)。匹配规则指的是这个属性如何比较和排序规则,比方说 caseIgnoreMatch 就是大小写无关比较、排序,integerMatch 就是按整数形式比较、排序等。
属性分两类,用户态属性和操作态属性。用户态属性是用户能修改的属性,而操作态属性一般是 Directory 自己管理的。
属性可以加上一个限制就是这个属性允不允许唯一性,一般是通过设定这个属性是否允许 Multi 来设置。有些 Directory 甚至允许管理员设定属性对应的值的最大长度。
Directory 的 schema 和数据库的 schema 不一样,没有数据库的 schema 要求的那么严格,有一个 Required Attributes 和 Allowed Attributes 的限制, Required Attributes 是要求对象必须有个属性。
命名模型
1 、 dn:dc=example,dc=com
2 、 dn:ou=people, dc=example,dc=com
3 、 dn:uid=jtower, ou=people, dc=example,dc=com
可以通过多个属性值对来唯一确定一个条目:
cn=John Smith + mail=jsmith@example.com
如果值里面还有特殊字符,如( space ; # ; , ; + ; ” ; \ ; < ; > ; ; )都需要加转义符 \
LDAP 支持别名( alias ),类似于链接
功能模型
<!-- [if gte mso 9]><xml> <w:WordDocument> <w:View>Normal</w:View> <w:Zoom>0</w:Zoom> <w:PunctuationKerning/> <w:DrawingGridVerticalSpacing>7.8 磅</w:DrawingGridVerticalSpacing> <w:DisplayHorizontalDrawingGridEvery>0</w:DisplayHorizontalDrawingGridEvery> <w:DisplayVerticalDrawingGridEvery>2</w:DisplayVerticalDrawingGridEvery> <w:ValidateAgainstSchemas/> <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> <w:IgnoreMixedContent>false</w:IgnoreMixedContent> <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> <w:Compatibility> <w:SpaceForUL/> <w:BalanceSingleByteDoubleByteWidth/> <w:DoNotLeaveBackslashAlone/> <w:ULTrailSpace/> <w:DoNotExpandShiftReturn/> <w:AdjustLineHeightInTable/> <w:BreakWrappedTables/> <w:SnapToGridInCell/> <w:WrapTextWithPunct/> <w:UseAsianBreakRules/> <w:DontGrowAutofit/> <w:UseFELayout/> </w:Compatibility> <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel> </w:WordDocument> </xml><![endif]--><!-- [if gte mso 9]><xml> <w:LatentStyles DefLockedState="false" LatentStyleCount="156"> </w:LatentStyles> </xml><![endif]--> <!-- [if gte mso 10]> <style> /* Style Definitions */ table.MsoNormalTable {mso-style-name:普通表格; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-parent:""; mso-padding-alt:0cm 5.4pt 0cm 5.4pt; mso-para-margin:0cm; mso-para-margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:10.0pt; font-family:"Times New Roman"; mso-ansi-language:#0400; mso-fareast-language:#0400; mso-bidi-language:#0400;} </style> <![endif]-->
- 查询操作
查询操作包含 8 个参数
<!-- [if !supportLists]-->1、 <!-- [endif]-->Base object 基础对象(从那棵树的那个节点开始查)
<!-- [if !supportLists]-->2、 <!-- [endif]-->scope 查询范围
base 就查询本节点
onelevel 就查询本节点的下一级节点
sub 查询本节点一下含本节点
<!-- [if !supportLists]-->3、 <!-- [endif]-->Alias Dereferencing Options 别名废弃
<!-- [if !supportLists]-->4、 <!-- [endif]-->Size Limit ,返回多少条记录
<!-- [if !supportLists]-->5、 <!-- [endif]-->Time Limit ,返回记录的 timeout
<!-- [if !supportLists]-->6、 <!-- [endif]-->Attributes-Only Parameter ,只返回属性,不返回值
<!-- [if !supportLists]-->7、 <!-- [endif]-->Search Filter ,过滤条件
相等操作: sn=smith
部分字符串操作: sn=smith* 、 sn=*smith 、 sn=smi*th 、 sn=*smith*
近似操作: sn~=jensen ,有可能返回 jenson 等,不同的系统支持可能不一样
大于等于和小于等于: sn<=Smith 、 age>=21 、 age>21
存在操作: telephoneNumber=* ,返回存在 telephoneNumber 的记录
扩展操作
否定操作: (!(sn=smith)) , sn 不等于 smith
组合操作: (&(sn=smith)(L=MountainView)) 、 (|(sn=Smith) (sn=Jones)) 、 (&(mail=*)(!(telephoneNumber=*)))
<!-- [if !supportLists]-->8、 <!-- [endif]-->List of Attributes to Return ,返回哪些属性
cn, sn, givenName
*
*, modifiersName
- 更新操作
增加、删除、改名、修改
- 认证控制操作
Bind 、 unbind 、 abandon (取消操作,当一个大的查询发起的时候,可以会发起一个 abandon 操作中断查询)
安全模型
访问控制模型