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的深刻管理
相關文章
相關標籤/搜索