第一部分:理解LDAP的Attribute
LDAP之所以成功或之所以流行的原因是LDAP可以存储很多种类型的信息。而LDAP的Schema定义并控制了LDAP中可以存储什么样的数据。作者的这一系列文章包括4部分,这是第三部分。
1.什么是LDAP的Schema?
在LDAP目录中,Schema是定义的Attribute、定义的objectClass和控制什么样的数据被存到哪里的ACI的集合。
任何的数据库都有一个Schema,下一个简单的定义:Schema是一个数据模型,它被用来决定数据怎样被存储,被跟踪的数据的是什么类型,存储在不同的Entry下的数据之间的关系。
当你搭建好你的LDAP后,一些已经定义好的Entry的信息存储在一系列的Attribute中的值中。你也可以创建一个要存储在LDAP中的新的值类型。
所有的Attribute可能被放到一起用来组成一个叫做Object Class的类型。为了满足你的需要,你可以定义自己的Object Class,每一个Object Class中的属性都可以设计成reqired(必选的)或optional(可选的)。
如果你熟悉关系型数据库,那么下面的描述有助于你对Schema的理解:Attribute相当于字段(Field),而Object Calss相当于表。
你可以设计你的LDAP信息树(DIT),在同一个Entry存储许多相似的Object Class。
2.理解LDAP的Attribute
简单的说,Attribute是可以存放一个单一类型信息的容器。(采用Key/Value进行对应)。
定制Schema可以使你设计很多你需要的Attribute,如你喜欢的食物、生日、工作日期等等,但你也不得不为你的目录服务器的配置文件(Schema)添加正确的Attribute。
一个Attribute包括以下几个部分,我们稍后会详细介绍。
n Attribute名字
n 描述
n Attribute的对象标识符(OID)
n 用于进行类型检查和模式匹配的语法
n Attribute是否允许有多个值
(1)什么是Attribute的名字?
这在概念上已经很清晰了,但在你自己创建一个新属性类型之前,你应该检查一下LDAP规范中是否已经存在能够满足你的要求的Attribute。你可以从 下面这个站点查找已经定义好的object class的Attribute列表:http://www.ldapman.org/schema- references。
假设你需要的Attribute不存在,那么你要自己添加。首先你应该为自己将要添加的属性定义一个新的名字,需要注意的是你的Attribute的名字要避免与很可能成为“官方指定”的Attribute的名字冲突。
你可以用你的单位、公司甚至停车场的ID来作为你的Attribute的名字。当定义Schema时,Gizmo公司的LDAP的系统管理员很可能定义这 样的名字作为Attribute名:"gizmoParkingPassNumber”。我们可以看到这个Attribute名字可以很好避免同日后的官 方指定的Attribute名字冲突。
请注意“gizmoParkingPassNumber”作为Attribute看 起来很优美,你应该养成这样的习惯:Attribute的名字的第一个字母必须小写,其他单词的第一个字母必须大写,其他的字母必须小写,并且你的 Attribute名字应该足够长,这样可以根据你的Attribute的名字就可以知道它所存储的数据的意义。
Attribute的名字由a-z,0-9以及其他少量的字母构成,名字的第一个字符必须是字母,空格、下划线及一些特殊字符是不允许出现在Attribute的名字中的。
(2)描述
是一个描述Attribute的用途的注释。
(3)对象标识符(Object Identifiers)
对象标识符(OID)是被LDAP内部数据库引用的数字。Attribute的名字是让你和我看的,但计算机不喜欢,因为计算机处理数字是最有效率的。如 果你对DNS的概念很熟悉的话,那么你应该很容易理解这点。比如:www.sendmail.net 这个域名被计算机接收后会翻译成一个IP地址。
当计算机接收到Attribute的名字gizmoParkingPassNumber后,将这个名字转换为一个OID,这个例子中将转换为:1.3.6.1.4.1.1234。
在你定制自己的object class和Attribute之前,你需要为自己的OID注册吗?这要取决于你的目录服务器。很多目录服务器允许你指定一 个简单的字符串作为OID。如果Gizmo公司没有注册,1.3.6.1.4.1.1234可能已经分配给了 “gizmoParkingPassNumber”,但它仍然是唯一的,依然可以正常的工组。
你可以不注册你的OID,但它仍然是个好主意。LDAP的Attribute、语法定义和所有使用OID的object class及SNMP和其他的支持ANSI的统一标识Schema的协议都是这样做的。
得到自己的OID很容易,你可以向ANSI (American National Standards Institute)致富1000美元(注:这 是2000年的价格,现在什么行情就不知道了!^_^)得到自己的OID,你也可以从权威机构得到你的免费的OID:http: //www.iana.org/。
(4)语法(syntax)
当你创建Attribute时,下表列出了你要经常使用的语法。
code
syntax name
Description
Dn
Distinguished Name
Allows any alphanumeric string.
Pattern matching against fields of type DN
are normalized for DN equivalency. For example,
"uid=ratboy,ou=accounts,dc=ldapman,dc=com" is equivalent to
"uid=Ratboy, ou=Accounts, dc=LDAPman, dc=com"
Cis
Case
Ignore String
Allows any alphanumeric string. Information stored using cis is stored with the case preserved, but matches are performed with case ignored.
This is the most commonly used syntax type because of its versatility.
ces
Case Exact String
Allows any alphanumeric string. Matches against
attributes of format cis are case sensitive. Used for attributes like
passwords, where you only wish to match exact strings.
int
Integer
Allows only integers to be stored in this attribute.
tel
Telephone Number
Like cis, but when searching against attributes
of this type, the match ignores spaces and dashes. This allows "510-555-1212" to match "510 555 1212".
bin
binary
Used to store binary
data in a standardized format.
一些LDAP目录允许你添加定制的语法。具体怎样做超出了本文的范围,我只是顺便提醒你一下。当创建自己的语法时,你可以为自己的Attribute指定只允许指定的字符存储在Attribute中,并且你也可以指定匹配规则。
假如你想在目录中存储十六进制的代码,但你并不关心代码以什么格式存储(一些人可能输入00 A2 34 FF,另一些可能输入00a234ff,肯能还 有人输入00a2.34ff,你想匹配任何一种格式)。为了满足需要,你需要定义一个新的类型hex的语法,只允许字符串0-9,a-z和空格。匹配将是 大小写不敏感的,并删除所有的空格进行格式化。很快!任务完成了。
关于创建自定义的语法更详细的信息,你可以在你使用的LDAP的使用手册中找到。
(5)请恕我冒昧,你是单身吗?(作者有些调侃的味道!)
一些(不是所有)的LDAP服务器允许你为Attribute指定“single”,它的用处是保证你的目录中的属性只有一个值。我们举个例子:一个员工 叫Mike Jones,你可以为它的CN指定多个值(Michael Jones、Mike Jones),但存储它的邮箱时你希望只存储一个值。
好了,本文的第2部分将讨论object class和怎样使用Attribute构建自己的object class,第3部分我们将使用第1和第2部分学习到的知识创建一个新的object class,并设计你的LDAP目录的Schema。
文章出处:飞诺网(www.firnow.com):http://dev.firnow.com/course/3_program/java/javajs/20071226/95330.html
分享到:
相关推荐
总的来说,理解如何在Java中使用jLDAP库与LDAP服务器进行SSL连接,并执行各种操作,对于开发涉及目录服务的软件至关重要。这包括了熟悉LDAP的基本概念,如DN(Distinguished Name)、过滤器以及属性操作,以及在Java...
本篇文章将深入探讨IBM LDAP的基础知识,并结合"red book for LDAP"(通常指IBM的技术文档或指南)来提供更详细的理解。 首先,我们需要了解LDAP的主要概念。LDAP是一种应用层的协议,工作在TCP/IP协议栈上,使用...
**LDAP_NO_SUCH_ATTRIBUTE (16)** **描述:** 请求的属性不存在于目标对象中。 **处理方式:** 确认属性名称是否正确,并检查目标对象是否包含该属性。 ##### 12. **LDAP_UNDEFINED_TYPE (17)** **描述:** 属性...
综上所述,"用sql语句的方式操作ldap"涉及到理解 LDAP 的特性和结构,以及如何使用JNDI API在Java应用程序中执行这些操作。通过这样的方式,开发者可以利用熟悉的SQL概念来管理LDAP目录,从而简化开发流程。
此外,对于复杂查询,可能需要更深入理解LDAP的查询语法——过滤器(Filter),以及属性(Attribute)和对象类(Object Class)的概念。 总结来说,"jdbc连接 ldap jar 包"提供了一种使用Java和JDBC来操作LDAP目录...
* Entry:目录中最基本的信息单元,Entry 中所包含的信息描述了现实世界中的一个真实的对象,在目录系统中它可以理解为,目录树中的一个节点。 * Attribute:每个 Entry 都是由许多 Attribute 组成的。每一个属性...
LDAP增、删、改、查操作 LDAP(Lightweight Directory Access Protocol,轻量级目录访问协议)是用于管理...本文提供了LDAP增、删、改、查操作的详细说明和Java代码实现,旨在帮助读者更好地理解LDAP协议和Java编程。
通过对LDIF文件格式的理解,我们可以更好地管理和维护LDAP目录信息。正确地构建LDIF文件可以帮助我们高效地完成各种LDAP任务,如批量导入用户信息、更新用户属性等。了解这些基础知识对于进行LDAP目录服务的管理和...
**LDAP使用手册** LDAP(Lightweight Directory Access Protocol)是一种轻...通过理解和掌握LDAP,用户可以构建和利用目录服务来满足各种管理需求,特别是在大型企业环境中,它提供了一种有效组织和访问信息的手段。
尽管LDAP在协议上相对简单,但它仍然保留了X.500的基本结构和功能,如Distinguished Name(DN)和Attribute-Type/Value对。 **4. LDAP部署考虑** 在部署LDAP时,应考虑以下几点: - **数据适配性**:确认数据是否...
在了解了 LDAP 的基础概念之后,我们通过一个简单示例进一步理解!创建一个基础的 Spring Boot 项目,在 pom.xml 中引入两个重要依赖: ```xml <groupId>org.springframework.boot <artifactId>spring-boot-...
本篇文档详细介绍了C语言编写的LDAP API,旨在帮助开发者理解和使用这些API来实现与LDAP服务器的交互。 ### LDAP模型概述 LDAP模型基于客户端/服务器架构,其中客户端通过TCP/IP连接与服务器通信,发送请求并接收...
2. **LDAP目录结构**:LDAP 使用树形结构来组织数据,每个节点称为条目(Entry),条目由属性(Attribute)组成,每个属性包含一个或多个值。条目的DN(Distinguished Name)是其在整个目录树中的唯一标识。 3. **...
### LDAP Schema的概念与基本要素详解 #### 一、引言 在现代企业级应用中,LDAP(Lightweight Directory Access Protocol,轻量...希望本文能帮助读者更好地理解LDAP Schema的相关知识,并能够在实际工作中加以应用。
这个基础教程将带你深入理解LDAP的概念、结构以及如何在实际环境中应用它。 一、LDAP概述 LDAP最初设计的目标是提供一种简单、高效的方式来存储和检索组织信息,如用户账号、联系人信息、组成员关系等。相比于其他...
LDAP目录服务支持多级组织结构,每个节点称为条目(Entry),条目由属性(Attribute)组成,每个属性有零个或多个值。例如,一个用户条目可能包含uid、cn、mail等属性,用于表示用户的唯一标识、全名和电子邮件地址...
学习和理解这个`LdapUtils`类,不仅可以加深对LDAP协议的理解,还能提高在Java环境中进行目录服务操作的能力。如果你在实际使用中遇到问题,可以根据描述中的提示,修改配置参数并运行`main`方法进行测试。这将有助...
【LDAP中文学习手册】 LDAP(Lightweight Directory Access Protocol)是一种用于访问目录服务的协议,源自X.500标准但...通过理解其基本原理和模型,开发者能够更好地利用LDAP进行客户端编程和管理分布式目录服务。
本资源包含的RFC文档是LDAP的官方标准定义,对于理解、开发或维护与LDAP相关的系统和服务具有极高的价值。 在 LDAP 的 RFC 文档中,主要涵盖以下几个关键知识点: 1. **协议基础**:LDAP 使用客户端/服务器架构,...
该文档对于理解LDAP如何存储和检索数据至关重要。 #### 核心知识点 **1. 本备忘录的状态(Status of this Memo)** - **状态说明**:本文档定义了一个用于互联网通信的Internet标准追踪协议。它是为了发展的需要...