วันพุธที่ 10 มิถุนายน พ.ศ. 2552

ความรู้เบื้องต้น LDAP

เขียนโดย นรพล Naraphol (ยอด Yod) ที่ 10:14
วันนี้ขอเขียนถึง LDAP สักหน่อยครับ พอดีมี project ที่ต้องใช้พอดี

LDAP นั่นเป็นขื่อย่อมาจาก Lightweight Directory Access Protocol ที่แต่เดิมนั่นถูกออกแบบให้เป็น protocol สำหรับเข้าถึงข้อมูลที่อยู่ใน directory server แต่ต่อมาด้วยแนวคิดของ LDAP และเทคโนโลยีที่ใช้รวมกัน ชื่อของ LDAP จึงได้กลายมาเป็นคำที่ถูกใช้เรียกรวมไปถึง directory architecture ที่ประกอบไปด้วย directory service ถ้าเราจะยกคำยามของ LDAP มาก็จะได้ว่า
LDAP is standardized. The body of LDAP standards, including the network protocols, the directory structure, and the services provided by an LDAP server, are all available in the form of RFCs (Requests For Comments). Throughout this book, I will reference specific LDAP RFCs as authoritative sources of information about LDAP.
Directory คึืออะไร ?
คนส่วนใหญ่มักเปรียบเทียบ directory กับสมุดหน้าโทรศัพท์หรือสมุดหน้าเหลือง ที่เราไว้ใช้ค้นหาข้อมูลบุคคลหรือองค์กร เช่นหาเบอร์โทรศัพท์ของธนาคารกรุงเทพ หรือหาที่อยู่ของร้านขายอุปกรณ์ไฟฟ้า

ในหลักการเดียวกันนี้เองจึงเป็นที่มาของ directory server ที่ทำหน้าที่เก็บชุดข้อมูลของ entity (entity ก็คือบุคคลหรือองค์กร) และให้บริการสืบค้นข้อมูลที่จัดเก็บด้วย

directory server มีหน้าที่อยู่สองอย่างคือการเขียนและการอ่านข้อมูล โดยที่การเขียนนั่นจะเป็นการเพิ่ม แก้ไข และลบข้อมูล และการอ่านคือการสืบค้นข้อมูล แต่เนื่องด้วยหน้าที่หลักเป็นการให้บริการสืบค้นจึงมีกิจกรรมการอ่านมากกว่าเขียน (high-read, low-write) จากเหตุนี้เองเราจึงจะเห็นว่าโปรแกรมที่เกี่ยวกับ LDAP จะเน้นไปในทางค้นหาข้อมูล

directory server ที่อยู่ในรูปแบบของ LDAP จะถูกเรียกว่าเป็นแบบ general-purpose เนื่องจากว่าไม่เพียงแต่ใช้สำหรับเก็บของมูลแบบ single-purpose (เช่น addess book จะเก็บ เบอร์โทร ที่อยู่ อีเมล์) ได้เท่านั้น แต่ยังสามารถเก็บรูปแบบข้อมูลตามที่ต้องการได้ ยกตัวอย่างเช่นพนักงานและสินค้า ที่มีข้อมูลจัดเก็บแตกต่างกัน

โครงสร้างของ directory entry
ขอยกตัวอย่างสมุดโทรศัพท์ที่เอาไว้จัดเก็บรายละเอียดผู้ต้องการติดต่อ ต่อนะครับเพื่ออธิบายถึงเรื่องโครงสร้าง ตามตัวอย่างด้านล่าง
Info Media Innovation
174/597
ม.2 สวนใหญ่ เมือง
นนทบุรี 11000
029696375,025271498
สมุดโทรศัพท์ได้ถูกออกแบบมาเฉพาะ คือมีข้อมูลจำกัดตามกำหนด และมีการเรียงข้อมูลตามแบบเฉพาะ เมื่อผู้ใช้ต้องการหาชื่อใครก็ไล่ดูชื่อที่มักจะถูกเรียงไว้ตามตัวอักษร โดยมีข้อสังเกตดังนี้คือ
  1. ข้อมูลถูกเรียงโดยชื่อบริษัท ดังนั้นการค้นหาด้วยเบอร์โทรศัพท์จึงทำได้ยาก
  2. ข้อมูลไม่ได้มีคำอธิบายไว้ ดังนั้นผู้ใช้ต้องทำการตีความหมายข้อมูลให้อยู่ในรูปแบบด้านล่างนี้
ชื่อ : Info Media Innovation
เลขที่ : 174/597 ม.2
ตำบล : สวนใหญ่
อำเภอ : เมือง
จังหวัด : นนทบุรี
รหัสไปรษณีย์ : 11000
โทร : 029696375
โทร : 025271498
จะเห็นได้ว่าเมื่อมีการแสดงรูปแบบข้อมูลแล้ว จะช่วยทำให้เข้าใจข้อมูลได้มากขึ้น ซึ่งนี้เองก็เป็นวิธีในการกรอกข้อมูล (entry) ของ LDAP

แต่ปัญหาที่เกิดขึ้นอีกอย่างหนึ่งในการกรอกข้อมูลคือการกำหนดให้ข้อมูลต้องมีความแตกต่างกันอย่างน้อย 1 รายการ (ในลักษณะเดียวกันกับ primary key ของฐานข้อมูล) โดยที่ LDAP นั้นเรียกว่า distinguished name (DN)

DN
LDAP แยกความแตกต่างข้อมูลแต่ละรายการโดยกำหนดชื่อที่ต่างกันในแต่ละรายการที่เรียกว่า distinguished name หรือ DN โดยปกติแล้ว DN จะเป็นกลุ่มของข้อมูลที่อยู่ในรายการนั่นเอง โดยผู้ที่กำหนด DN เราเรียกว่า directory designer ตัวอย่าง DN ของสมุดโทรศัพท์ก็จะเป็นแบบนี้ครับ
dn: o=Info Media Innovation, t=สวนใหญ่, a=เมือง, p=นนทบุรี
แค่นี้เองก็จะสามารถระบุข้อมูลแต่ละรายการได้ชัดเจนแล้ว แต่ต้องแน่ใจด้วยว่าข้อมูล DN ในแต่ละรายการต้องไม่ซ้ำกัน

มีข้อแนะนำเกี่ยวกัน DN อีกคือ DN ไม่สนใจว่าจะเป็นตัวพิมพ์เล็กหรือใหญ่

ตัวอย่างการป้อนของมูล LDAP
LDAP entry หรือ record คือ directory unit ที่เก็บข้อมูลของแต่ละรายการใน directory ซึ่งประกอบด้วย DN และ attribute ยกตัวอย่างจากข้อมูลของเรา เมื่อเปลี่ยนให้อยู่ในรูปของ LDAP record จะได้แบบนี้
dn: o=Info Media Innovation, t=สวนใหญ่, a=เมือง, p=นนทบุรี
o : Info Media Innovation
postalAddress : 174/597
t : สวนใหญ่
a : เมือง
p : นนทบุรี
postalCode : 1100
telephoneNumber : 029696375
telephoneNumber : 025271498
objectclass: organization
บรรทัดแรกจะเป็น DN นอกนั้นลงมาเป็น atrribute ที่แบ่งออกเป็น 8 atrribute ดังนี้
  1. Organiztion name (0)
  2. Mailing address (postalAddress)
  3. Tumbon (t)
  4. Ampur (a)
  5. Province (p)
  6. ZIP code (postalCode)
  7. Telephone number (telephoneNumber)
  8. Object class (objectclass) ที่ไว้กำหนดชนิดของรายการนี้
ในแต่ละ attribute สามารถมีชื่อ (attribute name) ได้หลายชื่อ เ่ช่นเราอาจเรียก Organiztion name หรือ 0 ก็ได้ และสามารถมีได้หลายข้อมูล (attribute value) เช่น telephoneNumber มี 2 หมายเลข โดยที่ข้อกำหนดของ attribute ถูกกำหนดอยู่ใน attribute definitions ยกตัวอย่างเช่น
  1. สามารถใช้ Organization name หรือ 0 แทนกันได้ และกำหนดค่าเริ่มต้นเป็น o
  2. amphur เก็บข้อมูลแบบ String
  3. ไม่สนใจตัวพิมพ์เล็กหรือใหญ่เมื่อทำการเปรียบเทียบ attribute value
  4. การเปรียบเทียบสามารถทำได้ทั้งคำ หรือใช้ substring เช่น ส*
  5. ชื่อจังหวัดต้องไม่ยาวเกิน 20 ตัว
  6. ชื่อจังหวัดมีได้ชื่อเดียวในแต่ละรายการ
ข้อมูลทั้งหมดนี้จะูเก็บอยู่ในรูปแบบของ schema definition ที่ directory server ทำการอ่านก่อนเริ่มทำงาน

Object Class Attribute
จากตัวอย่างที่แล้วยังมี attribute ทำหน้าที่พิเศษอีกตัวที่เรายังไม่ได้พูดถึงคือ Objectclass ที่ใช้ในการกำหนดชนิดของรายการ หรือกำหนดว่ารายการต้องมี attribute ใดอยู่บ้างนั่นเอง โดยจากตัวอย่างจะเห็นว่า objectclass เป็น organization ดังนั้นจึงมี attribute ต่างๆตามที่กำหนดอยู่ใน objectclass definition

The Directory Information Tree
จากที่เล่ามาทั้งหมดแล้วนั้นคงจะพอเห็นความแตกต่างระหว่าง LDAP directory กับ สมุดโทรศัพท์กันบางแล้วนะครับ แต่ยังมีส่วนสำคัญที่ทำให้ LDAP นั้นแตกต่างออกไปอีกมาก

ในระบบของสมุดโทรศัพท์นั่นจะเก็บของมูลในแบบของรายการตัวอักษรที่ยาวต่อกันไปเพียงรายการเดียว แต่ในขณะที่ LDAP directory นั่นมีความซับซ้อนกว่านั้นมาก โดยอยู่ในรูปแบบของลำดับขั้น หรือ hierarchy ซึ่งส่วนที่อยู่ในชั้นบนสุดเรียกว่า base entry และส่วนต่อลงมาจะมีโครงสร้างแบบ tree ซึ่งในแต่ละ node ของแต่ละชั้นถูกเรียกว่า entry ที่ประกอบไปด้วย DN และ attribute นั่นเอง

กลุ่มของ entry ในรูปแบบของลำดับขั้นนี้เองที่เรียกกว่า directory information tree หรือเรียกสั้นๆว่า DIT เพื่อให้เข้าใจง่ายขึ้นลองดู organization chart ของบริษัทด้านล่างนี้ครับเริ่มจากชั้นบนสุดจะเป็นบริษัทคือ Info Media Innovation ที่ประกอบไปด้วย 3 แผนกในชั้นที่สอง และในแต่ละแผนกมีพนักงานอยู่ในชั้นที่สาม ตามลำดับ โดย LDAP จะสร้างความสัมพันธ์ในแต่ลำดับขั้นโดยชั้นบนสุดเรียกว่า root entry และถัดลงมาเรียกว่า subordinate entry ซึ่งสามารถมี subordinate entry ของตัวเองได้อีก ในแต่ละ record จะมี DN และ attribute เป็นของตัวเอง ดังแสดงในรูปด้านล่างในรูปแบบของ LDAP directory ดังนี้

การใชังาน LDAP Server

เราได้คุยกันถึงหลักการของ LDAP directory ที่นี้ลองมาดูกันบ้างดีกว่าว่าจะเอา LDAP directory ไปใช้ทำอะไร และ LDAP server มีฟังชั่นอะไรให้ใช้บ้าง

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

การใช้งานที่พบบ่อยของ LDAP อาจจะเป็นระบบจัดการผู้ใช้แบบศูนย์กลาง โดยระบบจะจัดเก็บข้อมูลผู้ใช้ไม่ว่าจะเป็น username,password,ชื่อจริง และแผนก เมื่อผู้ใช้ต้องการเข้าใช้ระบบอื่นๆบนเครือข่ายเช่น web application, email server ระบบเหล่านั้นก็จะมาตรวจสอบ permission กับ LDAP การบริหารรายชื่อผู้ใ้ช้จึงได้สะดวกที่จุดเดียวคือ LDAP

0 ความคิดเห็น on "ความรู้เบื้องต้น LDAP"

แสดงความคิดเห็น

 

naraphol.blogspot.com Copyright 2009 Reflection Designed by Ipiet Templates Image by Tadpole's Notez