Schema是LDAP的一个重要组成部分,类似于数据库的模式定义,LDAP的Schema定义了LDAP目录所应遵循的结构和规则,比如一个 objectclass会有哪些属性,这些属性又是什么结构等等,schema给LDAP服务器提供了LDAP目录中类别,属性等信息的识别方式,让这些可以被LDAP服务器识别。
在LDAP的schema中,有四个重要的元素:
1. Objectclass
objectclass定义了一个类别,这个类别会被不同的目录(在LDAP中就是一个Entry)用到,它说明了该目录应该有哪些属性,哪些属性是必须的,哪些又是可选的。一个objectclass的定义包括名称(NAME),说明(DESC),类型(STRUCTURAL或AUXILARY ,表示是结构型的还是辅助型的),必须属性(MUST),可选属性(MAY)等信息。
2. Attribute
attribute就是一个上面objectclass中可能包含的属性,对其的定义包括名称,数据类型,单值还是多值以及匹配规则等。后面用具体的例子来说明。
3. Syntax
syntax是LDAP中的“语法”,其实就是LDAP中会用到的数据类型和数据约束,这个语法是遵从X.500中数据约束的定义的。其定义需要有一个ID(遵从X.500)以及说明(DESP)
4. Matching Rules
是用来指定某属性的匹配规则,实际上就是定义一个特殊的Syntax的别名,让LDAP服务器可以识别,并对定义的属性进行匹配。
LDAP的schema的主要元素就是这些了,下面列举出了一些LDAP规定好的或是现在比较通用的schema,一般的LDAP服务器都应该可以识别这些定义。
这就是一个名为subschema的objectclass的定义:
(2.5.20.1 NAME 'subschema' AUXILIARY
MAY ( dITStructureRules $ nameForms $ ditContentRules $
objectClasses $ attributeTypes $ matchingRules $ matchingRuleUse ) )
首先是ID,这里是2.5.20.1,接着是NAME,AUXILIARY说明是辅助型,之后是可选属性的定义,subschema中没有定义必须属性,如果需要定义,应该和MAY一样,将属性放在MUST()中并用$隔开
再来看一个属性定义:
( 2.5.4.3 NAME 'cn' SUP name EQUALITY caseIgnoreMatch )
可以看到cn属性的父属性是name,它相等性匹配于caseIgnoreMatch(匹配原则为EQUALITY,还有如SUBSTR是字符串匹配,ORDERING是顺序匹配)
syntax定义一般都比较简单,如:
( 1.3.6.1.4.1.1466.115.121.1.6 DESC 'String' )
这个定义说明,这一串数字1.3.6.1.4.1.1466.115.121.1.5就代表了LDAP中的字符串,这个数字串的定义和X.500相关,包括了它的存储方式,所占空间大小等。
最后看看Matching Rule的例子,前面提到了caseIgnoreMatch,就看他的吧
( 2.5.13.2 NAME 'caseIgnoreMatch'
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )
其实1.3.6.1.4.1.1466.115.121.1.15 就是LDAP数据类型Directory String的ID,说明前面的cn需要等于这个数据类型才有效。
还有很多常用schema的定义都在了RFC2252中,LDAP服务器都应该支持这些基本的schema。好了,现在基本对LDAP中的schema有个一个大致的说明,可能有不到位或不妥之处,还望大家指正。
schema类似关系数据库的字段说明,包括字段名,数据类型,数据长度等等。系统有一些默认的schema,我的默认schema文件
在/usr/local/openldap/etc/openldap/schema下面,最重要的是core.schema。它定义了一些最基本的字段。
为了适应我们的应用,我们要创建自己的schema文件。我创建的shema文件如下:(文件名:kunmail.schema)
#
# kunmail-ldap v3 directory schema
#
# written by MSN:zhoujianguo_leo@hotmail.com
#
# Attribute Type Definitions
attributetype ( 1.3.6.1.4.1.7914.1.2.1.1 NAME 'username'
DESC 'name of the user on the mailsystem'
EQUALITY caseIgnoreIA5Match
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26
SINGLE-value )
attributetype ( 1.3.6.1.4.1.7914.1.2.1.2 NAME 'vuid'
DESC 'UID of the user on the mailsystem'
EQUALITY integerMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.27
SINGLE-value )
attributetype ( 1.3.6.1.4.1.7914.1.2.1.3 NAME 'vgid'
DESC 'GID of the user on the mailsystem'
EQUALITY integerMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.27
SINGLE-value )
attributetype ( 1.3.6.1.4.1.7914.1.2.1.4 NAME 'maildir'
DESC 'Path to the maildir/mbox on the mail system'
EQUALITY caseExactMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
SINGLE-value )
attributetype ( 1.3.6.1.4.1.7914.1.2.1.5 NAME 'forwardAddr'
SUBSTR caseIgnoreSubstringsMatch
DESC 'Forward mail address'
EQUALITY caseIgnoreIA5Match
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
attributetype ( 1.3.6.1.4.1.7914.1.2.1.6 NAME 'quota'
DESC 'The amount of space the user can use until all further messages get bounced.'
SYNTAX 1.3.6.1.4.1.1466.115.121.1.44
SINGLE-value )
attributetype ( 1.3.6.1.4.1.7914.1.2.1.7 NAME 'storeHost'
DESC 'On which kunmail server the messagestore of this user is located.'
EQUALITY caseIgnoreIA5Match
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26
SINGLE-value )
attributetype ( 1.3.6.1.4.1.7914.1.2.1.8 NAME 'delivery'
DESC 'Program to execute for all incoming mails.'
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
SINGLE-value )
attributetype ( 1.3.6.1.4.1.7914.1.2.1.9 NAME 'clearpw'
DESC 'name of the user on the mailsystem'
EQUALITY caseIgnoreIA5Match
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26
SINGLE-value )
attributetype ( 1.3.6.1.4.1.7914.1.2.1.10 NAME 'home'
DESC 'Program to execute for all incoming mails.'
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
SINGLE-value )
attributetype ( 1.3.6.1.4.1.7914.1.2.1.11 NAME 'mailReplyText'
DESC 'A reply text for every incoming message'
SUBSTR caseIgnoreSubstringsMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.44{4096}
SINGLE-value )
attributetype ( 1.3.6.1.4.1.7914.1.2.1.12 NAME 'active'
DESC 'The status of a user account: active, nopop, disabled'
EQUALITY integerMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.27
SINGLE-value )
# Object Class Definitions
objectclass ( 1.3.6.1.4.1.7914.1.2.2.1 NAME 'kunmailUser'
DESC 'KunMail-LDAP User' SUP top STRUCTURAL
MUST ( username $ cn $ vuid $ vgid )
MAY ( maildir $ home $ clearpw $
forwardAddr $ quota $
storeHost $ delivery $
mailReplyText $ active ) )
现在来说说这个schema文件。
开始部分是attributeType的定义,相当于字段定义。最后的objectclass是定义数据所包含的属性。
这里kunmailUser这种数据,要包含maildir $ home $ clearpw $ forwardAddr $ quota $ storeHost $ delivery $ mailReplyText $ active
等可选项,还要包括username $ cn $ vuid $ vgid 必选项。可选项用MAY()来包含,必选项用MUST()来包含。DESC是说明项。SUP表示父类(
有点像面向对象编程啊)top表示没有父类,他自己是顶级。STRUCTURAL是存储方式,不管他(我也说不清楚)
接下来解释attributeType的说明项。
第一个数字是表示序号,至少我是怎么认为的,也许不对,不过。。。管他。
NAME是表示属性的名字
DESC是说明
下面表示的是匹配的方式,SUBSTR是字符串匹配,EQUALITY是相等性匹配,这些在openldap的admin guide里面有,不难看懂
SYNTAX是表示字段的数据类型。这个admin guide里面也有说明。
SINGLE-value表示这个属性只有一个值,有些属性可以有多个值,比如联系地址等。默认的话,是多值的。
schema准备好之后,我们要在配置文件中,把这个schema包含进去,让这个schema生效。
在配置文件slapd.conf中间的开始部分加入这样的一句:
include /usr/local/openldap/etc/openldap/schema/kunmail.schema
应该注意,上面这句话之前应确保有一句:
include /usr/local/openldap/etc/openldap/schema/core.schema
因为kunmail.schema里面有些东西是依赖core.schema的
分享到:
相关推荐
include /etc/ldap/schema/inetorgperson.schema pidfile /var/run/slapd/slapd.pid argsfile /var/run/slapd/slapd.args loglevel 256 modulepath /usr/lib/ldap moduleload back_bdb sizelimit 500 tool-threads 1...
这部分内容将深入讲解LDAP的客户端工具,如各种目录浏览器和命令行工具;探讨不同LDAP服务器的实现,如Sun One Directory Server和Active Directory Server的特性与配置;并提供丰富的LDAP技术资源,帮助学习者...
本篇将详细讲解如何在Linux环境下,通过Samba和LDAP搭建这种认证机制。 首先,我们需要在一台CentOS 5.5服务器上安装和配置LDAP服务,这台服务器将作为认证服务器。主要步骤包括: 1. **关闭SELinux**:SELinux是...
本文将详细讲解在Windows环境下安装并配置OpenLDAP的过程,以及安装JDK环境,以便进行LDAP操作。 一、安装准备 在开始安装OpenLDAP之前,你需要准备以下组件: 1. 下载openldap for windows,这是一个适用于Windows...
- **LDAP Editor**:讲解了LDAP编辑器的用法。 - **Oracle Homes**:解释了Oracle Homes的概念及其管理方法。 - **TNSNames Editor**:阐述了TNSNames编辑器的功能及使用方法。 #### 八、教程与调试 - **Tutorials...
此章节讲解了slapd配置文件的格式和各种指令的具体用法。 - **配置文件格式**:解释了配置文件的语法。 - **配置文件指令**:详细列举了全局指令、通用后端指令、通用数据库指令以及特定于BDB和HDB的指令。 - **...
这份7页的文档《olr的NestedDoc的详解及应用》将深入讲解NestedDoc的原理、使用方法和实战案例,对于理解和掌握OLR中的NestedDoc特性具有很高的参考价值。对于想要在OLR中处理复杂数据结构的IT从业者来说,这份资料...
还会涉及TCP/IP协议、命名方法(TNAMES.ORA, SQL*NET, LDAP)和网络故障排查。 4. **Less06_Storage.ppt - 存储管理** 包含Oracle的数据存储结构,如数据文件(Data Files)、重做日志文件(Redo Logs)和控制文件...
本文档将详细讲解如何在Linux环境中安装Zabbix Server 2.0.6,并进行基本的配置。 一、系统准备与依赖安装 首先,确保系统已经配置了YUM源,以便于安装所需的依赖包。执行以下命令安装必要的软件: ```bash # 安装...
2. **网络**:讲解网络基础,特别是TCP/IP协议,这是理解互联网通信的基础。 3. **Web技术**:涵盖HTTP协议、HTML/xHTML、CSS和JavaScript,这些是构建Web页面的基本元素,DHTML和AJAX则涉及到动态网页和异步数据...
本文将详细讲解如何在Linux环境下,对"zabbix-3.2.11.tar.gz"这个版本进行编译安装,并实现中文界面。 首先,我们需要了解Zabbix的基本架构。Zabbix由三个主要组件构成:Zabbix Server、Zabbix Proxy和Zabbix Agent...