本文主要參考官方文檔: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 -d 1數據結構
用能夠看到控制檯下打印一片信息,openldap 默認是用的 Berkeley DB 數據庫存儲目錄數據的。
再開一個cmd,跳轉到OpenLDAP安裝目錄下。
測試OpenLDAP是否正常啓動:
ldapsearch
-
x
-
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
![](http://static.javashuo.com/static/loading.gif)
dn: cn
=
Manager,dc
=
example,dc
=
com
objectclass: organizationalRole
cn: Manager
注意:在文檔每一行的開頭和結尾不要有空格,文檔最後最好也別回車。建議不要拷貝,用手敲這幾行。
2.cmd在安裝目錄下,運行:
ldapadd
-
x
-
D cn
=
Manager,dc
=
example,dc
=
com
-
W
-
f example.ldif
可能會要求輸入密碼:secret (配置文件裏寫的這個密碼)dom
添加條目成功後,會有提示: adding new entry cn=Manager,dc=example,dc=com
簡單查詢:
ldapsearch
-
x
-
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的深刻管理