LDAP课程内部培训魏明weiming8@chinaunicom.cn2009年11月24日大纲•什么是LDAP•LDAP概念•LDAP服务器及客户端•LDAPSchema•LDAP编程•LDAP应用什么是LDAP•LightweightDirectoryAccessProtocol•轻量级目录访问协议-LDAP是目录服务在TCP/IP上的实现,是对X500的目录协议的移植,是简化了的实现方法,所以称为轻量级的目录服务•定义了数据的存贮模式和访问协议•目录服务-用来存取目录式信息的协议•存储目录型/层次型数据的数据库•跨平台的、标准的Internet协议•基于X.500系列协议集LDAPvs.RMDB•概念–LDAP定义的是数据存储模式和访问协议,类似于RMDB的SQL语言–RMDB定义的是数据存储方式,对比与网格型DB、对象型DB•性能–LDAP查询性能很好,更新很慢。适应于读多写少(10:1)的情况下。–LDAP不支持事务,不能回滚,更新时只是基于简单锁策略•数据格式–LDAP存储目录型/树形数据–RMDB存储关系型/二维表型数据•操作方式–LDAP目录数据通过LDAP协议访问–RMDB通过SQL语句访问LDAPvs.RMDB•数据类型–LDAP存储的是具基于属性的记录集合,主要数据类型是字符型–LDAP为了便于检索添加了BIN(二进制数据)、CIS(忽略大小写)、CES(大小写敏感)、TEL(电话型)等语法(Syntax),对数据类型扩展了不同的比较规则–RMDB存储整数、浮点数、日期、货币等类型•其他–LDAP仅提供了基本的查询语法和各类操作API,无RMDB中的各类函数–LDAP中通过配置ACL,其访问控制粒度可以到属性级LDAP概念•Entry-条目vs.记录•DN-DistinguishedName,区别名vs.PrimaryKeyvs.文件绝对路径•基准DN-LDAP条目树的根•RDN-相对dnvs.文件名•Attribute-属性,可以有多个值vs.列•AttributeType-属性类型限定vs.列的数据类型•objectClass-条目的类型限定vs.java中的class•schema-objectClass和AttributeType的定义集•filter-ldap中的查询过滤器vs.sql中的where子句•LDIF-LDAPDataInterchangeFormat,ldap数据导入/出的标准格式LDAP服务OpenLdapldap服务器端的自由和开源的实现有linux版本和win32版本,包括如下组件:slapd-独立LDAP守护服务slurpd-独立的LDAP更新复制守护服务实现LDAP协议的库工具软件和示例客户端apachedsldap开源实现LDAP客户端ApacheDirectoryStudio基于eclipse实现,提供了LDAPbrowser、schemaeditor,可以维护ldap数据,编辑ldapschemasqldirectorybrowser可以sql语句形式语法访问ldap数据LdapBrowser浏览ldap数据ApacheDirectoryStudioApacheDirectoryStudio创建连接,配置服务器地址IP:10.49.252.165Port:6366oa项目:ApacheDirectoryStudio创建连接,配置认证信息User:cn=DirectoryManager,o=hlj.cuc.comoa项目:ApacheDirectoryStudio创建连接,配置显示信息BaseDN:cn=cordys,o=hlj.cuc.comoa项目:ApacheDirectoryStudio连接成功,查看、编辑数据ApacheDirectoryStudioschema编辑器ApacheDirectoryStudio创建或编辑schemaApacheDirectoryStudio连接成功,查看、编辑数据LDAP数据预览SCHEMA-objectClassSCHEMA-AttributeSCHEMAfilter•格式:(operatorfilter1filter2)filter=(attributeoperatorvalue)filterfilter示例查询齐齐哈尔综合部的部门经理(&(busextension=cn=hl-qqhr@zhb,cn=organizationaldepts,o=hl-cuc,cn=cordys,o=hlj.cuc.com)(role=cn=DS-BMJL,cn=organizationalroles,o=hl-cuc,cn=cordys,o=hlj.cuc.com))LDAPJava编程•jndi–利用jdk的jndi相关api操作ldap数据–javax.naming.ldap包•javax.naming.ldap.InitialLdapContext•novell-jldap-api–novell提供的ldap操作api–com.novell.ldap包•com.novell.ldap.LDAPConnectionLDAPJava编程•novell-jldap-api创建到目标ldap服务的连接ldapConn=newLDAPConnection().connect(ip,port);搜索数据etys=ldapConn.search(organizationaldepts,o=hl-cuc,cn=cordys,o=hlj.cuc.com,1,“(&(busextension=cn=hl-qqhr@zhb,cn=organizationaldepts,o=hl-cuc,cn=cordys,o=hlj.cuc.com)(role=cn=DS-BMJL,cn=organizationalroles,o=hl-cuc,cn=cordys,o=hlj.cuc.com))”,null,false);根据dn读取某一条目ldapConn.read(hl-qqhr@zhb,cn=organizationaldepts,o=hl-cuc,cn=cordys,o=hlj.cuc.com);添加一个条目ldapConn.add()修改一个条目ldapConn.modify();谢谢!!