`
hugang357
  • 浏览: 188445 次
  • 性别: Icon_minigender_2
  • 来自: 深圳
社区版块
存档分类
最新评论

OpenLDAP中 Schema的详细介绍

    博客分类:
  • java
阅读更多

本章讲述了如何扩展用户使用的schema。本章假设阅读者已经熟悉LDAP/X.500 信息模型。


一、schema文件




二、扩展schema

slapd使用的schema,可以扩展其他的语法,匹配规则,属性类型和对象类。本章将详细描述如何使用slapd定义好的语法和匹配规则为你的应用增加属性类型和类。slapd也可以支持附加的语法,匹配规则和系统schema,但这些需要一写编程,不在此讨论。

定义一个新的schema:
1、获得对象识别码obtain Object Identifer
2、选择一个命名前缀choose a name prefix
3、创建一个本地的schema文件
4、自定义属性类型
5、自定义对象类

1、对象识别码

每一个schema元素,有一个全局唯一的Object Identifier (OID)。OID也被用于标识其他对象。(They are commonly found in protocols described by ASN.1)。在项目中他们承担重要的角色。OIDs是分等级的。你的项目可以获得一个OID,然后进行细分。比如你的项目的OID是1.1,你可以这位样划分目录树:

Table 8.2: OID 层次举例
OID Assignment
1.1 Organization's OID
1.1.1 SNMP Elements
1.1.2 LDAP Elements
1.1.2.1 AttributeTypes
1.1.2.1.1 myAttribute
1.1.2.2 ObjectClasses
1.1.2.2.1 myObjectClass



根据你的OID,你可以为你的项目任意的设计OID结构树。不管你选择怎样的层次,都应该有一份分配等级。这可以是一个文本,或者像OpenLDAP OID Registry。(http://www.openldap.org/faq/index.cgi?file=197

更多关于OID识别码(和列表服务,)可以查看http://www.alvestrand.no/harald/objectid/

你可以免费的获得OID, apply for an OID under the Internet Assigned Numbers Authority (IANA) maintained Private Enterprise arc. Any private enterprise (organization) may request an OID to be assigned under this arc. Just fill out the IANA form at http://www.iana.org/cgi-bin/enterprise.pl and your official OID will be sent to you usually within a few days. Your base OID will be something like 1.3.6.1.4.1.X where X is an integer.

Note:不用对IANA上的"MIB/SNMP"感到迷惑,这个表单提供了很多用途,包括识别LDAP schema元素。

当然,OID命名空间可以从国际权威那里得到。(比如 ANSI, BSI

2、名称前缀

为了给每一个schema元素添加识别码,你看需要给schema的元素至少起一个名字(textual name)。这个名字尽量是一个描述,而且不要和其他的名字重复。而且你选用的名字不能和present or future Standard Track names冲突。

为了减少(但是不能避免)潜在的名称冲突,方便的方法是用non-Standard Track来加名称前缀,比如可以描述你当前改动的字母(with a few letters to localize the changes to your organization)。organization, 越小,你的前缀相应的就要长一些。

在下面的例子中,我们选择了“my”作为名称前缀(为了节省空间),这样简短的名字适合非常大型,全球性的组织。通常,我们使用'deFirm' (German company) ,或者 'comExample' (elements associated with organization associated with example.com)。

3、本地schema文件

objectclass 和 attributeTypes 可以用来定义目录中实例的规则。通常我们创建一个包含自定义schema元素的文件。我们在/usr/local/etc/openldap/schema/local.schema创建一个名为local.schema的文件,然后在slapd.conf文件中加上这个文件:

        # include schema
        include /usr/local/etc/openldap/schema/core.schema
        include /usr/local/etc/openldap/schema/cosine.schema
        include /usr/local/etc/openldap/schema/inetorgperson.schema
        # include local schema
        include /usr/local/etc/openldap/schema/local.schema

(译者:ubuntu中的ldap安装位置稍有不一样,不可完全按照这个例子粘贴。)

4、属性类型说明Attribute Type Specification

attributetype 用于定义新的属性类型。比如,The directive uses the same Attribute Type Description (as defined in RFC2252) used by the attributeTypes attribute found in the subschema subentry。

属性类型描述Attribute Type Description的定义如下:

          AttributeTypeDescription = "(" whsp
            numericoid whsp              ; AttributeType identifier
          [ "NAME" qdescrs ]             ; name used in AttributeType
          [ "DESC" qdstring ]            ; description
          [ "OBSOLETE" whsp ]
          [ "SUP" woid ]                 ; derived from this other
                                         ; AttributeType
          [ "EQUALITY" woid              ; Matching Rule name
          [ "ORDERING" woid              ; Matching Rule name
          [ "SUBSTR" woid ]              ; Matching Rule name
          [ "SYNTAX" whsp noidlen whsp ] ; Syntax OID
          [ "SINGLE-VALUE" whsp ]        ; default multi-valued
          [ "COLLECTIVE" whsp ]          ; default not collective
          [ "NO-USER-MODIFICATION" whsp ]; default user modifiable
          [ "USAGE" whsp AttributeUsage ]; default userApplications
          whsp ")"

      AttributeUsage =
          "userApplications"     /
          "directoryOperation"   /
          "distributedOperation" / ; DSA-shared
          "dSAOperation"          ; DSA-specific, value depends on server

whsp是空格的意思(' ')。numericoid 是全局唯一的 OID,是带.的十进制形式 (e.g. 1.1.0), qdescrs有一个或几个意思, woid 可以使名称或者是 OID 可选择的一定长度的后缀(e.g {10})。

下面的例子,属性类型(attribute types) name 和 cn 是由core.schema中定义的。

        attributeType ( 2.5.4.41 NAME 'name'
                DESC 'name(s) associated with the object'
                EQUALITY caseIgnoreMatch
                SUBSTR caseIgnoreSubstringsMatch
                SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{32768} )
        attributeType ( 2.5.4.3 NAME ( 'cn' 'commonName' )
                DESC 'common name(s) assciated with the object'
                SUP name )


注意:每一个定义的属性的OID,都提供一个短的名字,和一个简短的介绍,每一个名字都是OID的别名。当slapd返回记录的时候,返回的是第一个名字的类表。

第一个属性,name,holds values of directoryString (UTF-8 encoded Unicode) syntax。这个结构syntax 由OID定义。(1.3.6.1.4.1.1466.115.121.1.15 identifies the directoryString syntax)。

A length recommendation of 32768 is specified. Servers should support values of this length, but may support longer values The field does NOT specify a size constraint, so is ignored on servers (such as slapd) which don't impose such size limits. In addition, the equality and substring matching uses case ignore rules. Below are tables listing commonly used syntax and matching rules (OpenLDAP supports these and many more).

Table 8.3: Commonly Used Syntaxes
Name OID Description
boolean 1.3.6.1.4.1.1466.115.121.1.7 boolean value
directoryString 1.3.6.1.4.1.1466.115.121.1.15 Unicode (UTF-8) string
distinguishedName 1.3.6.1.4.1.1466.115.121.1.12 LDAP DN
integer 1.3.6.1.4.1.1466.115.121.1.27 integer
numericString 1.3.6.1.4.1.1466.115.121.1.36 numeric string
OID 1.3.6.1.4.1.1466.115.121.1.38 object identifier
octetString 1.3.6.1.4.1.1466.115.121.1.40 arbitary octets

Table 8.4: Commonly Used Matching Rules
Name Type Description
booleanMatch equality boolean
caseIgnoreMatch equality case insensitive, space insensitive
caseIgnoreOrderingMatch ordering case insensitive, space insensitive
caseIgnoreSubstringsMatch substrings case insensitive, space insensitive
caseExactMatch equality case sensitive, space insensitive
caseExactOrderingMatch ordering case sensitive, space insensitive
caseExactSubstringsMatch substrings case sensitive, space insensitive
distinguishedNameMatch equality distinguished name
integerMatch equality integer
integerOrderingMatch ordering integer
numericStringMatch equality numerical
numericStringOrderingMatch ordering numerical
numericStringSubstringsMatch substrings numerical
octetStringMatch equality octet string
octetStringOrderingStringMatch ordering octet string
octetStringSubstringsStringMatch ordering octet string
objectIdentiferMatch equality object identifier


第二个属性,cn,是name的子类型,集成了语法,匹配规则和name的用法。commonName 是另一个名字。

Neither attribute is restricted to a single value. Both are meant for usage by user applications. Neither is obsolete nor collective.


下面的部分定义两个例子

(1)myUniqueName

很多组织为用户保留唯一的名字(unique name),虽然用户可以使用displayName,但是这个属性(name)依旧由用户控制。而不是organization。我们可以从 inetorgperson.schema 拷贝displayName ,替换OID,name,和描述(description)。

attributetype ( 1.1.2.1.1 NAME 'myUniqueName'
                DESC 'unique name with my organization'
                EQUALITY caseIgnoreMatch
                SUBSTR caseIgnoreSubstringsMatch
                SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
                SINGLE-VALUE )

但是,如果我们要使name属性包含一个断言,这个属性可以被定义为name的子属性。

attributetype ( 1.1.2.1.1 NAME 'myUniqueName'
                DESC 'unique name with my organization'
                SUP name )

(2)myPhoto

很多的组织为每一个用户保留一个头像。myPhoto属性类型的定义可以用来保存用户的头像。当然用户可以选择jpegPhoto属性类型(RFC2798)(或其子类型)来保存头像。当然你只能在图片符合JPEG File Interchange Format时使用。
当然,一个使用八进制语法的属性类型可以这样的定义:

attributetype ( 1.1.2.1.2 NAME 'myPhoto'
                DESC 'a photo (application defined format)'
                SYNTAX 1.3.6.1.4.1.1466.115.121.1.40
                SINGLE-VALUE )

在这,语法中并没有置顶photo的格式(format),这里假设访问属性的应用可以对其值进行处理。

如果你想支持多种图片格式,你需要为每一个格式定义属性类型。为图片添加类型信息的前缀。或者使用ASN.1描述值,和use the ;binary transfer option

可以使图片属性能够保存URI,你可以在labeledURI(RFC2079)后创建一个属性,或者创建一个子类型。

attributetype ( 1.1.2.1.3 NAME 'myPhotoURI'
                DESC 'URI and optional label referring to a photo'
                SUP labeledURI )


5、Object Class描述

objectclasses 用来定义一个新的object class,The directive uses the same Object Class Description (as defined in RFC2252) used by the objectClasses attribute found in the subschema subentry。

objectclass <RFC2252 Object Class Description>

Object Class Description由下面的BNF定义:

ObjectClassDescription = "(" whsp
                numericoid whsp      ; ObjectClass identifier
                [ "NAME" qdescrs ]
                [ "DESC" qdstring ]
                [ "OBSOLETE" whsp ]
                [ "SUP" oids ]       ; Superior ObjectClasses
                [ ( "ABSTRACT" / "STRUCTURAL" / "AUXILIARY" ) whsp ]
                        ; default structural
                [ "MUST" oids ]      ; AttributeTypes
                [ "MAY" oids ]       ; AttributeTypes
                whsp ")"

(1)myPhotoObject

To define an auxiliary object class which allows myPhoto to be added to any existing entry。

objectclass ( 1.1.2.2.1 NAME 'myPhotoObject'
                DESC 'mixin myPhoto'
                AUXILIARY
                MAY myPhoto )


(2)myPerson

如果你的组织想为每一个用户建立一个私有结构的对象类,你可以为已经存在的person类创建一个子类。比如inetOrgPerson类,然后添加你需要的属性。

objectclass ( 1.1.2.2.2 NAME 'myPerson'
                DESC 'my person'
                SUP inetOrgPerson
                MUST ( myUniqueName $ givenName )
                MAY myPhoto )

对象类集成了inetOrgPerson 的required/allowed属性类型。但是需要 (requires) myUniqueName,givenName和allows myPhoto。


6、OID宏

为了方便管理oids的使用,slapd支持对象识别码宏定义。objectIdentifier直接使用宏(name)和OID
。这个OID很可能就是从前面的OID宏派生来的。 slapd.conf语法:

objectIdentifier <name> { <oid> | <name>[:<suffix>] }


下面的例子定义了一组OID宏,和他们使用的schema元素:

objectIdentifier myOID  1.1
        objectIdentifier mySNMP myOID:1
        objectIdentifier myLDAP myOID:2
        objectIdentifier myAttributeType        myLDAP:1
        objectIdentifier myObjectClass  myLDAP:2
        attributetype ( myAttributeType:3 NAME 'myPhotoURI'
                DESC 'URI and optional label referring to a photo'
                SUP labeledURI )
        objectclass ( myObjectClass:1 NAME 'myPhotoObject'
                DESC 'mixin myPhoto'
                AUXILIARY
                MAY myPhoto )


分享到:
评论

相关推荐

    openssh-lpk_openldap.schema

    openssh-lpk_openldap.schema

    OpenLdap安装及配置

    include /usr/local/openldap/etc/openldap/schema/inetorgperson.schema ``` OpenLDAP 的安装和配置是一个复杂的过程,需要注意 BerkeleyDB 的安装和配置,以及 OpenLDAP 服务器的配置。 总结来说,OpenLDAP 安装...

    openldap,ldapbrowser,mozillaOrgPerson.schema

    标题中的"openldap, ldapbrowser, mozillaOrgPerson.schema"提到了三个关键概念,分别是OpenLDAP、LdapBrowser和MozillaOrgPerson的Schema。这些是IT领域中与目录服务、LDAP(轻量级目录访问协议)以及特定的数据...

    schema2ldif:模式2 ldif:用于将.schema转换为.ldif文件并将其管理到openldap服务器中的工具

    这里我们将详细探讨schema2ldif,一个专门用于将模式转换为LDIF(Lightweight Directory Access Protocol Data Interchange Format)文件,并帮助管理OpenLDAP服务器中模式的工具。 schema2ldif是一款由Perl语言...

    Centos7OpenLDAP主从配置

    下面详细介绍 CentOS 7 环境下 OpenLDAP 的主从配置。 OpenLDAP 主从配置环境 在 CentOS 7 环境下,部署 OpenLDAP 主从配置需要两台虚拟机,分别作为主服务器(192.168.56.147)和从服务器(192.168.56.148)。 ...

    OpenLDAP安装与配置(ubuntu-12.04).docx

    本文将详细介绍如何在Ubuntu 12.04上安装和配置OpenLDAP服务器。 #### 二、安装BerkeleyDB数据库 BerkeleyDB(BDB)是OpenLDAP服务器依赖的一个关键组件,主要用于存储LDAP的数据。在安装OpenLDAP之前,必须先安装...

    windows 下安装和使用OpenLDAP。

    1. 打开 D:/openldap/slapd.conf,找到 ucdata-path ./ucdatainclude ./schema/core.schema,在它后面添加: include ./schema/cosine.schema include ./schema/inetorgperson.schema 这三个 schema 是我们后续...

    基于LDAP认证的大数据权限解决方案.docx

    include /etc/openldap/schema/collective.schema" &gt; /etc/openldap/slapd.conf echo "-e \"pidfile /var/run/openldap/slapd.pid argsfile /var/run/openldap/slapd.args\"" &gt;&gt; /etc/openldap/slapd.conf ``` ...

    centos6.7OpenLDAP主从配置

    本文详细介绍了如何在 CentOS 6.7 上部署 OpenLDAP 的主从配置。通过以上步骤, 用户可以轻松地实现 OpenLDAP 服务器的高可用性和负载均衡, 进而提高系统的稳定性和可靠性。在实际部署过程中, 用户还需要注意根据自身...

    OpenLDAP yum安装配置

    下面将详细介绍如何使用YUM在CentOS8上安装配置OpenLDAP2.4。 **1. 安装前准备** 在开始安装之前,确保系统是最新的,执行以下命令更新系统: ``` sudo yum update -y ``` **2. 安装依赖** OpenLDAP需要一些依赖包...

    Openldap在Ubuntu中的安装部署

    本文将深入探讨如何在Ubuntu系统中安装并部署OpenLDAP,包括详细的步骤和配置过程,特别适用于Ubuntu 9.10版本。 #### 第一部分:OpenLDAP安装 **步骤一:基础安装** 在Ubuntu系统中安装OpenLDAP,首先通过以下...

    openldap详解

    在 OpenLDAP 的配置文件 `slapd.conf` 中,可以包含多个 Schema 文件,如 `core.schema`、`cosine.schema` 等,它们定义了目录服务所能处理的各种对象类和属性。每个条目必须包含至少一个 `objectClass`,并为其分配...

    openldap-for-windows

    在实际应用中,OpenLDAP的X500 schema通常会包含一系列预定义的属性,如cn(Common Name)、sn(Surname)、uid(User ID)等。这些属性提供了描述用户和其他对象的基本框架。管理员可以根据需求扩展或自定义schema...

    openldap在windows安装配置.pdf

    下面将介绍 OpenLDAP 在 Windows 平台下的安装配置过程。 安装 OpenLDAP 由于 OpenLDAP 官网只提供了 Linux 平台相关的安装文件,因此需要从第三方网站下载 Windows 平台的安装包。例如可以从以下网站下载:...

    OpenLDAP文档.pptx

    OpenLDAP schema 概念类似关系数据库的字段说明,包括字段名,数据类型,数据长度等等。例如: * 属性:attributetype ( 1.3.6.1.4.1.7914.1.2.1.1 NAME 'username' DESC 'name of the user on the mailsystem' ...

    schema.doc

    在IT行业中,Schema是数据库或目录服务(如OpenLDAP)中的一个重要概念,它定义了数据模型,即系统能够存储和管理的数据类型、属性以及这些数据之间的关系。在OpenLDAP中,Schema规范了如何组织和存储用户、组、...

Global site tag (gtag.js) - Google Analytics