windows下OpenLDAP的安装与配置

本文主要参考官方文档:http://www.openldap.org/doc/admin24/quickstart.html
和网上流传的教程: http://www.lifv.cn/?p=462

OpenLDAP下载地址: http://download.bergmans.us/openldap/openldap-2.2.29/openldap-2.2.29-db-4.3.29-openssl-0.9.8a-win32_Setup.exe  下载后点击安装便可。

配置sldap.conf :在安装目录下找到sldap.conf ,修改配置以下:

ucdata-path ./ucdata
include  ./schema/core.schema
# add
include  ./schema/cosine.schema
include  ./schema/inetorgperson.schema
include  ./schema/corba.schema
include  ./schema/dyngroup.schema
include  ./schema/java.schema
include  ./schema/misc.schema
include  ./schema/nis.schema
include  ./schema/openldap.schemahtml

  suffix "dc=example,dc=com" 
rootdn 
"cn=Manager,dc=example,dc=com" 
rootpw secret 
java


启动OpenLDAP:进入cmd命令行,跳转到OpenLDAP安装目录下,运行:

启动ldap服务:net start OpenLDAP-slapd数据库

slapd -1数据结构

用能够看到控制台下打印一片信息,openldap 默认是用的 Berkeley DB 数据库存储目录数据的。

再开一个cmd,跳转到OpenLDAP安装目录下。

测试OpenLDAP是否正常启动:
ldapsearch  - - s base (objectclass =* ) namingContexts
官方文档里,这一条命令加了些单引号,但带单引号的命令在Windows环境下跑不通。后面的命令也都避免
使用引号。
若是返回:
dn: 
namingContexts: dc
= example,dc = com
则说明OpenLDAP成功启动

增长一个条目:
1.作一个LDIF文件
2.使用ldapadd命令

1.在安装目录下,新建文件example.ldif,输入以下内容:
dn: dc = example,dc = com 
objectclass: dcObject 
objectclass: organization 
o: Example Company 
dc: example 

dn: cn
= Manager,dc = example,dc = com 
objectclass: organizationalRole 
cn: Manager
注意:在文档每一行的开头和结尾不要有空格,文档最后最好也别回车。建议不要拷贝,用手敲这几行。

2.cmd在安装目录下,运行:
ldapadd  - - D cn = Manager,dc = example,dc = com  - - f example.ldif

可能会要求输入密码:secret (配置文件里写的这个密码)dom

添加条目成功后,会有提示: adding new entry cn=Manager,dc=example,dc=com

简单查询:
ldapsearch  - - b dc = example,dc = com (objectclass =* )

查询成功后,会返回刚才插入的条目。

JNDI链接OpenLDAP
Java的JNDI接口很强大,能够链接LDAP服务。
import  java.util.Hashtable;
import  javax.naming.Context;
import  javax.naming.NamingException;
import  javax.naming.directory.DirContext;
import  javax.naming.directory.InitialDirContext; 
public   class  TestOpenLDAP {

    
/**
     * 
@param  args
     
*/
    
public   static   void  main(String[] args) {
        
//  TODO Auto-generated method stub
        TestOpenLDAP LDAPTest1  =   new  TestOpenLDAP();
        String root 
=   " dc=example,dc=com " // root
        Hashtable env  =   new  Hashtable();
        env.put(Context.INITIAL_CONTEXT_FACTORY, 
" com.sun.jndi.ldap.LdapCtxFactory "  );
        env.put(Context.PROVIDER_URL, 
" ldap://localhost/ "   +  root);
        env.put(Context.SECURITY_AUTHENTICATION, 
" simple "  );
        env.put(Context.SECURITY_PRINCIPAL, 
" cn=Manager,dc=example,dc=com "  );
        env.put(Context.SECURITY_CREDENTIALS, 
" secret "  );
        DirContext ctx 
=   null  ;
        
try  {
        ctx 
=   new  InitialDirContext(env);
        System.out.println( 
" 认证成功 "  );
        }
        
catch  (javax.naming.AuthenticationException e) {
        e.printStackTrace();
        System.out.println( 
" 认证失败 "  );
        }
        
catch  (Exception e) {
        System.out.println( 
" 认证出错: "  );
        e.printStackTrace();
        }
if  (ctx  !=   null  ) {
        
try  {
        ctx.close();
        }
        
catch  (NamingException e) {
        
// ignore
        }
        }

    }

}

问题:
1. 图形化界面LDAPBrowser的配置
下载地址:  http://files.blogjava.net/Unmi/LdapBrowser282.rar
解压后进入LdapBrowser282目录,打开配置文件OpenLdap_Localhost.cfg
修改配置:
basedn = dc = example,dc = com
managerdn
= cn = Manager,dc = example,dc = com
运行lbe.bat进入图形界面后选择链接OpenLdap_Localhost便可。

2. OpenLDAP的语法,内置ObjectClass

LDAP学习ide

entry(record,directory object)  条目 一条数据 至关于数据表的一条记录工具

entry由若干个attribute组成,objectclass是必须的attribute,用于描述entry的schemapost

attribute是name/value对形式,例如cn = liuxuanyu cn = mengke 一个name 能够对应多个值性能

container是一种特殊的entry,为数据的组织和管理提供一个继承体系结构,例如ou
任何entry均可以在特定的状况下变成container学习

与关系数据库的比较:
LDAP读操做性能高,写操做性能不如DB,DB 读写都可,读操做性能不如LDAP
数据结构不一样
LDAP适合于存储继承结构的数据


namespace
DN (distinguish name) DN是entry的名字,entry的惟一标识
RDN (relative distinguish name) entry在某个容器范围内的标识
CN (common name) 经常使用名称 习惯上被用做RDN
DC (domain component) 域名

LDAP只容许树形结构

object identifier (OID) 例如:2.5.4.3 它是属性类型的标识符

schema
object class 定义了entry的类型
有三种类型的object Class: 抽象类、辅助类和结构化类。

构造schema的方式 :
1. 组合现有的object class
2. 扩展示有的object class 继承 使用辅助类(其实是一种聚合关系)

The subschema publishes the schema to clients

inetOrgPerson is a contemporary definition for a person entry RFC 2798


3. JLDAP与JNDI的比较
 JLDAP是由novel开发的,原是针对Novel的NDS目录设计的JAVA访问工具。NOVEL的NDS和网景(NETSCAPE)的目录是工具界最先的目录产品。JLDAP并不是JNDI的服务供应者,而是同一抽象层次下的访问工具集。与JNDI-LDAP相比,JLDAP更接近于类关系数据库的访问方式。

   NDS是遵照LDAP协议的并进行了扩展的类MAD产品。而NOVEL也已把JLDAP捐献给了OPENLDAP开源项目,能够世界范围内自由使用。与 JNDI相比,JLDAP无须继承DirContext才能实现添加,也无需预先生成添加的类,能够象普通数据访问那样,生成链接,而后使用::add方法添加。这样,添加的灵活性要强于JNDI。 但因为JLDAP目前是访问NDS,所以,它不具有JNDI彻底面向对象存储的能力,对于高级的LDAP应用,JLDAP不是合适的选择。

4. OpenLDAP的深刻管理
相关文章
相关标签/搜索