LDAP入門
まず、あなたは、私が説明するために多くのことを読んで、LDAPが何であるかを理解するために持っているだけでなく、霧、明確ではありません。ここではあなたのストロークの小さなストロークを指示します。
まず、LDAPプロトコルで、LDAPは、TCP / IPをサポートしています。本契約は、標準、および抽象的です。この規格では、AD(アクティブディレクトリ)は、Microsoftが達成するために着手しています。
ADそれは何ですか?時間のために、データベースとして理解されます。多くの人々は、LDAPデータベース(LDAPは、データを格納するためのデータベースとして理解することができる)に直接言います。他のデータベースと同様に、のような、LDAPは、クライアント側とサーバ側を持っています。サーバ側のリソースは、クライアントCRUD操作を動作させるために、格納するために使用されています。
そして、我々は通常、LDAPサーバは、データベースの実行を参照していることを言います。
AD = LDAPは単に+ LDAPサーバーアプリケーションを理解することができます。
LDAPデータベース何それ、それ、この特別な?
私たちは、レコードがテーブルに存在することにより、MySQLデータベースのように、データが記録されている、ということを知っています。LDAPデータベース、ツリー構造、リーフノードに格納されたデータ。以下のアナロジーを考えてみます。
どのようにあなたが庭師にその場所を教えてください、あなたはリンゴの木(記録)したいと仮定?もちろん、我々は最初のリンゴへのルートから、その後、(MYSQL DBに相当DC)の木が何であるかを説明しなければならない、これはと同等のAppleの姓(UID、であるすべての「フォーク」(OU)を介して、 MySQLのテーブルの主キーID)。まあ!この時点で、私たちは木の北のフォークに......赤と緑の分岐部の西側であり、その後によるりんごの位置を、明示することができ、分岐の「ワイボーツリー」東、めまい!あなたは登るために直接行きます!
だから、レコードは明確に「木」に記述することができます。
それの記録位置を定義する方法についてLDAPの話。
ツリー(DC = ljheee)
分岐(OU = BEI、OU = XI 、OU =ドン)
、アップル(CN = redApple)
さて、redApple位置アウト:
DN:CN = honglv、BEI OU =、OU = XI、OU =ドン、DC = ljheee
レコード、詳細に記述されたデータ・パスを識別するDNを特徴とします。
OUは複数の値を持っている理由ねえ!一部の人々が疑問?すべてのOUには複数の値を持つことができ、それはいくつかの枝を取ることが、Appleの位置に到達すること根から、それについて考えてみよう。コンマで区切られ; DNの長いリストの背面に、それぞれDC、OU、CN。
次のようにLDAPツリーデータベースの要約:
DNは:レコードの位置の詳細
DCは:記録領域が(ツリーれる)属する
レコードが(どのブランチ)組織に属している:OUは
CN / UID:名/ IDを記録する(これリンゴ名)
最上部には、LDAPディレクトリツリー、いわゆる「ベースDN」のルートです。
それをしないだろう、MySQLとのデータを格納するためのLDAPディレクトリツリーを使用して、なぜ、なぜ私たちはツリーデータベースを考え出す必要がありますか?
データは、ツリー構造、より高いクエリ効率を使用して格納されているためである(具体的には、なぜ、原理-B-ツリー/ B +ツリーの実現のリレーショナルデータベースインデックスを見ることができます)。特定のシナリオの下では、ツリーデータベースの使用がより良いです。たとえば、次のように大量のデータを保存する必要がありますが、データが頻繁に簡単に見てみ、変更されていません。
これは、従来のリレーショナルデータベースと比較して、LDAPを素早く見つけ、それを使用して、ドメインの検証などの場面、が多いに加えています。
LDAPプログラミング動作
私たちは、データを検索変更するJDBC操作MySQLデータベース、追加または削除を使用することができます。同様に、LDAPツリーデータベース、またはJDBCの方法を通じて、ツリーがディレクトリに相当し、階層ディレクトリツリー小枝構造として見ることができるので、加えて、あなたはまた、JNDIの道を(より多くを推奨)を使用することができます。
LDAPサーバー接続ApacheDirectoryStudioによって示されるようにLDAPデータベースツリーを示すデータもあります:
image.png
ApacheDirectoryStudioはNavicatは、ワークベンチに対応する、データベース・サーバへのクライアント接続のインターフェースと見なすことができます。新しい接続は、接続操作は、データベース・サーバと同様です。
ApacheDirectoryStudioダウンロード:
http://download.csdn.net/download/ljheee/10145654
JNDI连接LDAP服务器
輸入org.springframework.beans.factory.annotation.Autowired。
インポートするjava.util.Hashtable;
インポートするjavax.naming *。;
輸入javax.naming.directory.Attribute。
輸入javax.naming.directory.Attributes。
輸入javax.naming.directory.DirContext。
輸入javax.naming.directory.InitialDirContext;
パブリッククラスLdapJNDI {
@Autowired
LdapConfiguration ldapConfiguration。
公共ボイドJNDILookup(){
文字列rootFilter = "O = cvte.com、O = ISP";
//文字列フィルタ= "(&(スマート型= E1)(スマートステータス= 1))"。
文字列フィルタ= "(&(スマート型= E1)(UID = 00012047))"。
文字列名= "UID = USER_NAME、OU =許可、OU =人、O = cc.com、O = ISP"; // xxxの为申请的对接账户
文字列のパスワード= "PASSW"。
ENV =新しいHashtableの新しいHashtableの();
示します。env.put(Context.INITIAL_CONTEXT_FACTORY、 "com.sun.jndi.ldap.LdapCtxFactory"); //接続ファクトリのLDAPの実装を設定
します。env.put(に、Context.PROVIDER_URL、「LDAP:// 172.26.39.77:389/ "+ rootFilter); // LDAPサーバーのホスト名とポート番号を指定
示します。env.put(Context.SECURITY_AUTHENTICATION、"シンプル「) ; // 認証環境、SIMPLE、SSL / TLSとSASLを提供する方法を
示します。env.put(Context.SECURITY_PRINCIPALに、ユーザ名); //指定されたディレクトリの識別名を入力したDN
示します。env.put(Context.SECURITY_CREDENTIALS、パスワード); //ディレクトリ・パスワードの入力
示します。env.put( "フィルタ"、フィルター);
DirContextのCTX = NULL;
{試し
//は、初期ディレクトリコンテキストへの参照を取得
CTX =新をInitialDirContext(ENV)を、
//検索ベースのエントリ'UID = 00012047、OU =内部、OU =人々は、= cvte.com O、O = ISPが']は存在しません。名前の残りの'UID = 00012047を、=内部をOU'
//はATTRSの=のctx.getAttributes( "UID = 00012047、OU =内部、OU =人々を")属性; //获取到一个人员、
NamingEnumerationにバインディング=のctx.listBindings( "OU =内部、OU =ピープル"); //は、インサイダーが含まれます
一方、(bindings.hasMore()){
バインディングBD =(結合)bindings.next();
System.out.println(bd.getName()+ ":" + bd.getObject());
}
/ * DNノードのすべてのプロパティを見つけ、その後、属性からすべての値を取得するには、プロパティが複数の値を持つことができることに注意* /
//(NamingEnumerationにattrs.getAll AE =()のために、ae.hasMore ()){
// //プロパティを取得
//属性ATTR =(属性)ae.next();
//(NamingEnumerationにattr.getAllは、(= VE用); ve.hasMore()){
//システム.out.println(String.Formatの( "属性=%のSは、%S =値"、attr.getID()、ve.next()));
//}
//}
}キャッチ(javax.naming.AuthenticationException電子){
するSystem.out.println( "认证失败")。
e.printStackTrace();
}キャッチ(例外e){
System.out.printlnは( "认证出错:")。
e.printStackTrace();
} {ついに
(!CTX = null)の場合には{
{みてください
)(ctx.closeを。
}キャッチ(NamingExceptionの電子){
e.printStackTrace();
}
}
}
}
パブリック静的無効メイン(文字列[] args){
LdapJNDI ldapJNDI =新しいLdapJNDI()。
ldapJNDI.JNDILookup();
}
}
LDAP要約する:
1を、LDAP構造ではなく、フォームより、木によって表されます。このため、SQLステートメントを使用することはできません。
2、LDAPはすぐに結果を得ることができますが、書き込みの面で、それははるかに遅いです。
3、LDAPは、静的なデータの迅速なクエリを提供します。
4、クライアント/サーバモデル、データを格納するためのサーバー、クライアントオペレーティングツールのディレクトリ情報ツリー。
5、LDAPは、LDAPプロトコルInterentプロトコルは、クロスプラットフォームで、オープンなインターネット標準です。