LDAP นั้นย่อมาจาก Lightweight Directory Access Protocol ซึ่งก็แปลตรงๆก็คือ โปรโตคอลที่ช่วยให้เราเข้าถึงข้อมูลที่อยู่ใน Directory Service นั่นเอง ซึ่งตรงนี้เราจะยังคงจำเพาะเจาะไปที่กลุ่มของ Directory Service ที่มีชื่อรวมกันว่า X.500 ซึ่งภายในกลุ่มของ X.500 เองก็จะมีหลายๆ Directory Service เช่น

  • DAP (Directory Access Protocol)
  • DSP (Directory System Protocal)
  • DISP (Directory Information Shadowing Protocol)
  • DOP (Directory Operational Binding Management Protocol)

| ที่มา : http://en.wikipedia.org/wiki/X.500

โดย LDAP นั้นก็จะวิ่งอยู่บน TCP/IP โปรโคคอลด้วยเช่นกัน ส่วนข้อมูลที่เก็บอยู่ใน Directory นั้นก็จะมีลักษณะเป็น "Entry" ซึ่ง Entry นี้ก็จะเป็นกลุ่มของ Attribute ที่มี Distinguished Name หรือเรียกสั้นๆ ว่า DN (ต่อไปผมจะเรียกว่า DN นะครับ) เพียงอันเดียว

กลับไปที่ Attribute ก่อนนะครับ Attribute นั้นจะบอกว่า ข้อมูลที่อยู่ใน Directory นั้นมีชนิดของข้อมูล(Type) ว่าสามารถเป็นอะไรได้บ้าง เช่น ตัวอักษร ตัวเลข นอกจากนี้ Attrubute ก็ยังมีหน้าที่บอกได้ว่า ไอ้ข้อมูลที่จะเอามาใส่นี้สามารถมีค่าได้กี่อัน กี่ค่า

ส่วน DN นั้นก็คือ ชื่อของ Entry ที่เค้ามาช่วยเราแยกแยะข้อมูลใน Directory ฟังดูอาจจะงงๆ เนาะ ดูตัวอย่างกันดีกว่า ครับ

[ad#ad-post-1]

โครงสร้างข้อมูลของตัว Directory

       เรามาเริ่มที่ตัวอย่างข้อมูลที่ได้จาก ตัวอย่างที่อยู่ กันดีกว่า เช่น

Acme Services 123 W. First St. Chicago, IL 60616-1234 (773) 555-8943 or (800) 555 9834

จากตัวอย่างจะเห็นว่าข้อมูลดังกล่าว ถ้าเราต้องการหาที่อยู่ของ บ. Acme Services เราก็จะสามารถหาได้โดยใช้ชื่อบริษัทเพียงอย่างเดียว แต่เหนือสิ่งอื่นใดเราควรที่จะตั้งชื่อให้แต่ Entry ก่อนดีกว่า เช่น

Organization Name: Acme Services
Street Address: 123 West First Street
City: Chicago
State: Illinois
Postal Code: 60616-1234
Country: USA
Phone Number: +1 773 555 8943
Phone Number: +1 800 555 9834

จะเห็นว่าเมื่อมีการตั้งชื่อให้กับข้อมูล ในแต่ละส่วนจะช่วยให้เราเข้าใจข้อมูลดังกล่าวมากขึ้น เห็นข้อมูลทั้งหมดได้ชัดเจนขึ้นว่าส่วนไหนคืออะไร แต่ปัญหามันยังไม่จบเพียงเท่านั้น แล้วถ้าสมมติว่า ไอ้ บ. Acme Services มันมีสาขาอยู่ที่อื่นด้วยหล่ะ เราจะทำการ identified ยังไงว่าเบอร์โทรอันไหนเป็นของสาขาไหน มันเลยจะกลายเป็นที่มาของหัวข้อถัดไป ครับ

A Distinguished Name : DN

จากปัญหาหัวข้อที่ผ่านมาเราพบว่า ในบางครั้งข้อมูลในบาง Entry ของใน Directory นั้นมีการซ้ำกันของข้อมูล(ชื่อ บ. เหมือนกันแต่ อยู่คนละสาขา คนละจังหวัด) ทำให้การเข้าถึงข้อมูลนั้นอาจจะผิดพลาดได้ ตัว LDAP เองก็พบปัญหาดังกล่าวเช่นกันจึงมีการ กำหนด DN (Distinguished Name) เพื่อกำหนดกรอบของข้อมูลขึ้นมา เช่น

dn: o=Acme Services, l=Chicago, st=Illinois, c=US

และ

dn: o=Acme Services, l=Springfield, st=Illinois, c=US

คราวนี้ พอมี DN ก็จะทำให้ Scope ของ Directory ลดลง อ้ออย่าลืมครับ DN นั้นจะเป็นแบบ non case sentsitive นะครับจะถือว่าตัวเล็กตัวใหญ่มีค่าเหมือนกัน

ตัวอย่างข้อมูล ใน LDAP

คราวนี้เราก็มาดูตัวมูลใน LDAP กันมั่งว่ามันเก็บเหมือนหรือแตกต่าง จากการเก็บข้อมูลใน Directory อย่างไร และนี่ก็เป็นตัวอย่างจาก LDAP Entry ครับ

dn: o=Acme Services, l=Chicago, st=Illinois, c=US
o: Acme Services
postalAddress: 123 West First Street
l: Chicago
st: Illinois
postalCode: 60616-1234
c: US
telephoneNumber: +1 773 555 8943
telephoneNumber: +1 800 555 9834
objectclass: organization

บรรทัดแรกจะเป็น DN ส่วนบรรทัดที่เหลือจะเป็น Attribute ในแต่ละ Attribute ก็จะมี Attribute Name เช่น postalAddress คำถามก็คือ เราตั้งมันตอนไหน มันมาถูกเอาวางตรงนี้ได้อย่างไร คำตอบก็คือ เอามาจาก Schema ครับ ซึ่งเดี๋ยวเราค่อยพูดในหัวข้อถัดๆ ไปว่า Schema คืออะไร

ในแต่ละ Attribute นั้นสามารถมีได้มากกว่า 1 ชื่อก็ได้นะครับ เช่น c หรือ countryName ก็จะบอกว่าเป็น Attribute Name ของข้อมูลที่เป็น ชื่อของประเทศ ในแต่ละ Record เราสามารถที่จะมี Attribute ได้หลายๆ ค่าเช่นกันเช่น telephoneNumber ในตัวอย่างนั้นจะมี 2 เบอร์

ในการกำหนดค่าของ Attribute เราจะทำการกำหนดในส่วนที่เรียกว่า attribution definition ซึ่งตรงนี้เราสามารถที่จะกำหนดได้ว่า ค่าที่เราจะเอามาใส่เป็นข้อมูลแบบใด, มีความยาวได้กี่ตัวอักษร, มี Attribute Name อะไรบ้างและกำหนด Default ของ Attribute Name เป็นอะไร และสามารถใส่ค่าได้กี่ค่า เป็นต้น

ซึ่งข้อมูลเหล่านี้จะถูกรวมไว้ใน Schema definition ซึ่ง Server จะเข้าไปอ่านตอนที่เรา Start LDAP Service ขึ้นมา และก็เหมือนเดิมครับ Attribute Name เป็นข้อมูลแบบ non-case sensitive ตัวเล็กตัวใหญ่มีค่าเท่ากัน

Object Class Attribute

จากตัวอย่างด้านบน เราจะเห็นว่าที่ Attribute สุดท้ายจะมี Attribute Name ที่ชื่อว่า objectClass ซึ่งเป็น Attribute แบบพิเศษที่ทุกๆ Entry ของ LDAP ต้องมีเพื่อบ่งบอกว่าใน Entry นี้จะประกอบด้วย Attribute  อะไรได้บ้าง ตัว objectClass นั้นก็จะมีคุณสมบัติเหมือน Attribute ทั่วๆไปเพียงแต่ว่าจะไม่ถูกนำมาใช้งานหรือกำหนดค่าให้มันนั่นเอง

Note : LDAP Schema นั้นจะเป็นตัวบอกว่าข้อมูลที่เก็บในแต่ละ record ที่อยู่ในแต่ละ Directory มีชนิดเป็นอะไรบ้าง ลักษณะการจัดเก็บเป็นอย่างไร ซึ่งใน Schema ก็จะมีข้อมูลที่สำคัญหลักๆ อยู่ 2 อันคือ attribute type definitions และ object class definitions ซึ่งสุดท้ายเดี๋ยวเราจะกลับมาคุยเรื่องนี้กันอีกครั้งนะครับ

ดังนั้น LDAP Record จะประกอบด้วย DN เพียงหนึ่งอัน และมี attributes หนึ่งอันหรือมากกว่า ที่สำคัญต้องมี ต้องมี ObjectClass ด้วยอีกหนึ่งอัน

 

[ad#post-image]

Comments

comments

8 thoughts on “แล้ว LDAP คืออะไร?

  • September 4, 2009 at 7:44 pm
    Permalink

    ไม่เข้าใจ คือว่า ผมโง่!!! 555555+

  • May 5, 2010 at 1:44 pm
    Permalink

    กำลังสนใจเรื่องนี้อยู่เห็นใครๆเค้าก็พูดกัน… หาอ่านมาก็หลายที่ ไม่เห็นมีแบบอธิบายแบบเข้าใจง่ายๆเลลยง่ะครับผม… ?

  • July 6, 2010 at 2:20 pm
    Permalink

    อ่านแล้วรู้เรื่องดีครับ ถ้าเขียนเพิ่มเติมเมื่อไหร่ กรุณาเมล์บอกด้วยครับ
    ได้รู้ถึง โครงสร้างข้อมูลแล้ว แต่ที่อยากรู้ต่อคือ มันทำงาน หรือ จะประยุกต์ใช้อย่างไรครับ

  • January 26, 2011 at 8:28 am
    Permalink

    เพิ่งเริ่มศึกษาค่ะ ขอความกรุณาด้วย

  • June 2, 2011 at 10:48 am
    Permalink

    อืม เขียนอ่านเข้าใจง่ายดีครับ ขอบคุณมากครับ ที่แนะนำความรู้เพิ่มเติม

  • April 2, 2012 at 10:35 pm
    Permalink

    อธิบายเข้าใจง่ายจังค่ะ ยกตัวอย่างประกอบด้วย ทำให้เข้าใจง่ายขึ้น ขอบคุณสำหรับบทความดีๆ นะคะ (มีต่อแล้วบอกด้วยค่ะ ^^)

  • May 22, 2012 at 7:13 pm
    Permalink

    เพิ่มเริ่มศึกษา เขียนได้เข้าใจง่ายมากเลยค่ะ

  • December 18, 2012 at 11:23 pm
    Permalink

    ขอบคุณครับพี่ มีตอนใหม่ไวๆนะครับ 😀

Comments are closed.