C# winform 訪問LDAP

來源:互聯網
上載者:User


微軟資料:http://www.microsoft.com/china/technet/prodtechnol/exchange/2003/insider/ldapquery.mspx#BasicLDAPSyntax

圖1

圖2

代碼:

using System.DirectoryServices;

private void btnSearch_Click(object sender, EventArgs e)

{

    treeLDAP.Nodes.Clear();

    DirectoryEntry entry = new DirectoryEntry();

    DirectorySearcher serach = new DirectorySearcher();

    try

    {

        entry.Path = txtLDAPPath.Text.Trim();

        //entry.Username = txtRootDN.Text.Trim();

        //entry.Password = txtPwd.Text.Trim();

        entry.AuthenticationType = AuthenticationTypes.None;

        serach.SearchRoot = entry;

        serach.Filter = txtFilter.Text.Trim();

        // Get the first entry of the search.

        SearchResult searchResult = serach.FindOne();

        if (searchResult == null)

        {

            MessageBox.Show("Could not find entries: " +

            entry.Path, "LDAP Search",

            MessageBoxButtons.OK);

            return;

        }

        DirectoryEntry directoryEntry = searchResult.GetDirectoryEntry();

        txtEntryName.Text = directoryEntry.Name;

        ResultPropertyCollection resultPropColl = searchResult.Properties;

        foreach (string propName in resultPropColl.PropertyNames)

        {

            TreeNode node = this.treeLDAP.Nodes.Add(propName);

            foreach (Object collection in resultPropColl[propName])

            {

                node.Nodes.Add(collection.ToString());

            }

        }

    }

    catch (Exception exc)

    {

        MessageBox.Show("Exception : " + exc.Message,

        "LDAP Search", MessageBoxButtons.OK);

    }

}

*******************************************

LDAP 伺服器 配置

suffix  "dc=webCMS,dc=com"
rootdn  "cn=Manager,dc=webCMS,dc=com"

*******************************************

entry.Path = "LDAP://192.168.0.253/dc=webCMS,dc=com" //LDAP 必須大寫

entry.Username = "dc=Manager,dc=webCMS,dc=com"        //rootdn

serach.Filter = "((ou=mail))"  //括弧很重要,(!(ou=mail)(ou=peopele))表示兩個條件 or

                                   //(&(ou=mail)(ou=peopele))表示兩個條件 and

                                   //可以有兩個以上的條件

LDAP 介紹(一)

如果你在電腦行業工作,那麼對LDAP可能早有耳聞了。想深入地瞭解LDAP嗎?那麼可以好好地讀一下這篇文章。這篇介紹性的文章是一系列介紹如何在企業中設計、實現和整合LDAP環境的文章的頭一篇。主要是先讓你熟悉一下LDAP的基本概念,那些比較困難的細節問題將放到以後討論。在這篇文章中我們將要介紹:

什麼是LDAP?
什麼時候該用LDAP儲存資料?

現在LDAP技術不僅發展得很快而且也是激動人心的。在企業範圍內實現LDAP可以讓運行在幾乎所有電腦平台上的所有的應用程式從LDAP目錄中擷取資訊。LDAP目錄中可以儲存各種類型的資料:電子郵件地址、郵件路由資訊、人力資源資料、公用密匙、連絡人清單,等等。通過把LDAP目錄作為系統整合中的一個重要環節,可以簡化員工在企業內部查詢資訊的步驟,甚至連主要的資料來源都可以放在任何地方。如果Oracle、Sybase、Informix或Microsoft SQL資料庫中已經儲存了類似的資料,那麼LDAP和這些資料庫到底有什麼不同呢?是什麼讓它更具優勢?請繼續讀下去吧!

什麼是LDAP?

 

LDAP的英文全稱是Lightweight Directory Access Protocol,一般都簡稱為LDAP。它是基於X.500標準的,但是簡單多了並且可以根據需要定製。與X.500不同,LDAP支援TCP/IP,這對訪問Internet是必須的。LDAP的核心規範在RFC中都有定義,所有與LDAP相關的RFC都可以在LDAPChina.com RFC專欄中找到。

怎麼使用LDAP這個術語呢?

 

在日常交談中,你可能會聽到有些人這麼說:“我們要把那些東西存在LDAP中嗎?”,或者“從LDAP資料庫中取出那些資料!”,又或者“我們怎麼把LDAP和關係型資料庫整合在一起?”。嚴格地說,LDAP根本不是資料庫而是用來訪問儲存在資訊目錄(也就是LDAP目錄)中的資訊的協議。更為確切和正式的說法應該是象這樣的:“通過使用LDAP,可以在資訊目錄的正確位置讀取(或儲存)資料”。但是,也沒有必要吹毛求疵,儘管表達得不夠準確,我們也都知道對方在說什麼。

LDAP目錄是資料庫嗎?

 

就象Sybase、Oracle、Informix或Microsoft的資料庫管理系統(DBMS)是用於處理查詢和更新關係型資料庫那樣,LDAP伺服器也是用來處理查詢和更新LDAP目錄的。換句話來說LDAP目錄也是一種類型的資料庫,但是不是關係型資料庫。不象被設計成每分鐘需要處理成百上千條資料變化的資料庫,例如:在電子商務中經常用到的線上交易處理(OLTP)系統,LDAP主要是最佳化資料讀取的效能。

LDAP目錄的優勢

 

現在該說說LDAP目錄到底有些什麼優勢了。現在LDAP的流行是很多因素共同作用的結果。我在這裡說的不過是一些基本的原因,請你注意一下這不過是一小部分原因。

可能LDAP最大的優勢是:可以在任何電腦平台上,用很容易獲得的而且數目不斷增加的LDAP的用戶端程式訪問LDAP目錄。而且也很容易定製應用程式為它加上LDAP的支援。

LDAP協議是跨平台的和標準的協議,因此應用程式就不用為LDAP目錄放在什麼樣的伺服器上操心了。實際上,LDAP得到了業界的廣泛認可,因為它是Internet的標準。產商都很願意在產品中加入對LDAP的支援,因為他們根本不用考慮另一端(用戶端或服務端)是怎麼樣的。LDAP伺服器可以是任何一個開發原始碼或商用的LDAP目錄伺服器(或者還可能是具有LDAP介面的關係型資料庫),因為可以用同樣的協議、用戶端串連軟體包和查詢命令與LDAP伺服器進行互動。與LDAP不同的是,如果軟體產商想在軟體產品中整合對DBMS的支援,那麼通常都要對每一個資料庫伺服器單獨定製。

不象很多商用的關係型資料庫,你不必為LDAP的每一個用戶端串連或許可協議付費。

大多數的LDAP伺服器安裝起來很簡單,也容易維護和最佳化。

LDAP伺服器可以用“推”或“拉”的方法複製部分或全部資料,例如:可以把資料“推”到遠端辦公室,以增加資料的安全性。複製技術是內建在LDAP伺服器中的而且很容易配置。如果要在DBMS中使用相同的複製功能,資料庫產商就會要你支付額外的費用,而且也很難管理。

LDAP允許你根據需要使用ACI(一般都稱為ACL或者存取控制清單)控制對資料讀和寫的許可權。例如,裝置管理員可以有權改變員工的工作地點和辦公室號碼,但是不允許改變記錄中其它的域。ACI可以根據誰訪問資料、訪問什麼資料、資料存在什麼地方以及其它對資料進行存取控制。因為這些都是由LDAP目錄伺服器完成的,所以不用擔心在用戶端的應用程式上是否要進行安全檢查。

LDAP對於儲存下面這樣的資訊最為有用,也就是資料需要從不同的地點讀取,但是不需要經常更新。例如,這些資訊儲存在LDAP目錄中是十分有效:

  • 公司員工的電話號碼簿和組織圖
  • 客戶的聯絡資訊
  • 電腦管理需要的資訊,包括NIS映射、email假名,等等
  • 軟體包的配置資訊
  • 公用認證和安全密匙

什麼時候該用LDAP儲存資料?

 

大多數的LDAP伺服器都為讀密集型的操作進行專門的最佳化。因此,當從LDAP伺服器中讀取資料的時候會比從專門為OLTP最佳化的關係型資料庫中讀取資料快一個數量級。也是因為專門為讀的效能進行最佳化,大多數的LDAP目錄伺服器並不適合儲存需要經常改變的資料。例如,用LDAP伺服器來儲存電話號碼是一個很好的選擇,但是它不能作為電子商務網站的資料庫伺服器。

如果下面每一個問題的答案都是“是”,那麼把資料存在LDAP中就是一個好主意。

  • 需要在任何平台上都能讀取資料嗎?
  • 每一個單獨的記錄項是不是每一天都只有很少的改變?
  • 可以把資料儲存在平面資料庫(flat database)而不是關係型資料庫中嗎?換句話來說,也就是不管什麼範式不範式的,把所有東西都存在一個記錄中(差不多隻要滿足第一範式)。

最後一個問題可能會唬住一些人,其實用平面資料庫去儲存一些關係型的資料也是很一般的。例如,一條公司員工的記錄就可以包含經理的登入名稱。用LDAP來儲存這類資訊是很方便的。一個簡單的判斷方法:如果可以把資料儲存在一張張的卡片裡,就可以很容易地把它存在LDAP目錄裡。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.