ค้นหาเว็บไซต์

คำแนะนำเกี่ยวกับคุณลักษณะที่เชื่อมโยงของ Active Directory


แอตทริบิวต์ที่เชื่อมโยง Active Directory เป็นแอตทริบิวต์ Active Directory ชนิดพิเศษที่ใช้เพื่ออธิบายความสัมพันธ์ระหว่างวัตถุ โพสต์นี้จะอธิบายว่าแอตทริบิวต์ที่เชื่อมโยงคืออะไรและทำงานอย่างไร

อะไรทำให้แอตทริบิวต์เป็นคุณลักษณะที่เชื่อมโยง

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

Get-ADObject -SearchBase (Get-ADRootDSE).SchemaNamingContext -LDAPFilter "(LinkID=*)"

โดยทั่วไปแอตทริบิวต์ที่ลิงก์จะอยู่เป็นคู่ ได้แก่ ลิงก์ไปข้างหน้าและลิงก์ย้อนกลับ ซึ่งกำหนดโดยค่าของแอตทริบิวต์ LinkID ดังนี้

  • ลิงก์ส่งต่อ — ค่า LinkID จะเป็นจำนวนเต็มบวก คู่ เสมอ
  • ลิงก์ย้อนกลับ — ค่า LinkID จะเป็นจำนวนเต็มบวกคี่เสมอ อันที่จริงแล้ว มันคือค่าของ LinkID ของลิงก์ส่งต่อที่เกี่ยวข้องบวกหนึ่ง

แอ็ตทริบิวต์ที่มีค่า LinkID น้อยที่สุดคือแอ็ตทริบิวต์ Member และแอ็ตทริบิวต์ MemberOf ซึ่งใช้ในการติดตามความเป็นสมาชิกกลุ่มใน Active Directory ดังนั้นมาแก้ไขสคริปต์ PowerShell ของเราเพื่อจำกัดเอาต์พุตให้เหลือเพียงสองแอตทริบิวต์นั้น:

ผลลัพธ์บอกเราถึงข้อเท็จจริงที่สำคัญหลายประการเกี่ยวกับคุณลักษณะทั้งสองนี้:

  • ค่า LinkID ของแอตทริบิวต์ Member คือ 2 ซึ่งเป็นจำนวนเต็มคู่ นั่นหมายถึงแอตทริบิวต์ Member คือลิงก์ไปข้างหน้า
  • ค่า LinkID ของแอตทริบิวต์ MemberOf คือ 3 ซึ่งเป็นจำนวนเต็มคี่ นั่นหมายถึงแอตทริบิวต์ MemberOf เป็นลิงก์ย้อนกลับ
  • ค่า LinkID ของลิงก์ย้อนกลับ MemberOf คือค่า LinkID ของแอตทริบิวต์สมาชิกลิงก์ไปข้างหน้าบวกหนึ่ง (3=2 + 1) นั่นหมายความว่าแอตทริบิวต์ Member และแอตทริบิวต์ MemberOf เป็นแอตทริบิวต์ที่เชื่อมโยงกัน

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

คุณลักษณะที่เชื่อมโยงของ Active Directory ทำงานอย่างไร

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

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

วิธีจัดเก็บแอตทริบิวต์ที่เชื่อมโยง

ข้อมูล Active Directory จะถูกจัดเก็บไว้ในไฟล์ฐานข้อมูล ntds.dit ค่าของคุณลักษณะทั่วไปจะถูกจัดเก็บไว้ในตารางที่เรียกว่า datatable แอ็ตทริบิวต์ที่เชื่อมโยงจะมีตารางเฉพาะของตัวเอง โดยมีชื่อที่เหมาะสมว่า link_table หากเราดูภาพรวมของไฟล์ฐานข้อมูล ntds.dit ของห้องปฏิบัติการของฉัน เราจะเห็นว่า Active Directory เก็บค่าแอตทริบิวต์ที่เชื่อมโยงอย่างไร:

การอ้างอิงออบเจ็กต์ใน link_table ใช้แท็กชื่อเฉพาะ (DNT) ของออบเจ็กต์ ซึ่งจริงๆ แล้วเป็นคีย์หลักภายในของระเบียนใน ntds.dit datatable วิธีนี้จะป้องกันไม่ให้การเปลี่ยนแปลงชื่อที่แตกต่างของออบเจ็กต์ไม่จำเป็นต้องอัปเดตรายการ link_table ที่เกี่ยวข้อง

ภาพหน้าจอจะเน้นสามช่องที่สำคัญใน link_table:

  • link_DNT — การอ้างอิงถึงออบเจ็กต์ลิงก์ไปข้างหน้า
  • backlink_DN — การอ้างอิงถึงออบเจ็กต์ลิงก์ย้อนกลับที่เกี่ยวข้อง
  • link_base — การอ้างอิงถึง LinkID ของแอตทริบิวต์ลิงก์ไปข้างหน้า ฟิลด์นี้ใช้ค่า LinkID ของลิงก์ส่งต่อเพื่อระบุความสัมพันธ์ที่กำลังติดตามระหว่างออบเจ็กต์ทั้งสอง (แต่อย่างที่คุณเห็นในภาพหน้าจอ ค่าในตารางจริงๆ แล้วคือค่า LinkID หารด้วย 2)

ผลที่ตามมาในทางปฏิบัติของแนวทางนี้ในการจัดเก็บคุณลักษณะที่เชื่อมโยง

แม้ว่าวิธีการจัดเก็บข้อมูลนี้อาจดูแปลกไปสักหน่อย แต่ก็มีการออกแบบที่ยอดเยี่ยมจริงๆ ซึ่งส่งผลให้เกิดผลลัพธ์ที่สำคัญในทางปฏิบัติบางประการ:

  • ค่าลิงก์ส่งต่อจะถูกจัดเก็บไว้ ค่าลิงก์ย้อนกลับถูกสร้างขึ้น นี่เป็นแนวคิดที่สำคัญที่สุดที่จะหลีกเลี่ยงจากการสนทนานี้: ลิงก์ย้อนกลับไม่ได้จัดเก็บข้อมูลจริงๆ เนื่องจากการเชื่อมโยงระหว่าง สองออบเจ็กต์เป็นเอนทิตีเดียว Active Directory ไม่จำเป็นต้องเก็บสำเนาของการเชื่อมโยงมากกว่าหนึ่งสำเนา เมื่อมีการสอบถามลิงก์ส่งต่อ Active Directory ก็สามารถส่งคืนรายการ link_table โดยที่ DNT ของอ็อบเจ็กต์ที่สืบค้นตรงกับค่าในช่อง link_DNT และ LinkID ของลิงก์ส่งต่อจะตรงกับค่าในช่อง link_base เมื่อมีการสืบค้นลิงก์ย้อนกลับ Active Directory สามารถคำนวณค่าได้โดยการส่งคืนรายการ link_table โดยที่ DNT ของออบเจ็กต์ที่สืบค้นตรงกับค่าในช่อง backlink_DNT และ LinkID ของลิงก์ไปข้างหน้าที่เกี่ยวข้อง (คำนวณโดยการลบ 1 จากลิงก์ย้อนกลับ LinkID) ค่าในช่อง link_base
  • ค่าลิงก์ส่งต่อสามารถเขียนได้ ค่าลิงก์ย้อนกลับเป็นแบบอ่านอย่างเดียว เมื่อคุณทราบว่า Active Directory เก็บค่าของลิงก์ส่งต่อเท่านั้น สิ่งนี้อาจดูเหมือนชัดเจน อย่างไรก็ตาม สิ่งนี้มีผลกระทบที่สำคัญ: เมื่อมีการแก้ไขแอตทริบิวต์ที่เชื่อมโยง Active Directory จะอัปเดตลิงก์ไปข้างหน้า ซึ่งจะแก้ไขออบเจ็กต์ที่ครอบครองลิงก์นั้น ลิงก์ย้อนกลับซึ่งมีค่าแบบอ่านอย่างเดียวที่สร้างขึ้นนั้นไม่สามารถแก้ไขได้ ดังนั้นออบเจ็กต์ครอบครอง ลิงก์ย้อนกลับจึงไม่ได้รับการแก้ไขเช่นกัน

    เพื่อแสดงให้เห็นว่าเหตุใดสิ่งนี้จึงสำคัญ ลองพิจารณาเพิ่มผู้ใช้ในกลุ่ม การอัปเดตนี้จะปรับเปลี่ยนเฉพาะแอตทริบิวต์สมาชิกของกลุ่มเท่านั้น คุณลักษณะ MemberOf ของผู้ใช้ไม่ได้รับการแก้ไข เนื่องจากออบเจ็กต์กลุ่มมีการเปลี่ยนแปลงที่เป็นสาระสำคัญ ช่องข้อมูลเมตาที่สะท้อนถึงการเปลี่ยนแปลงนั้น (เช่น แอตทริบิวต์ "ModifyTimeStamp" และ "WhenChanged") จะได้รับการอัปเดต ช่องข้อมูลเมตาเดียวกันเหล่านั้นไม่ อัปเดตบนออบเจ็กต์ผู้ใช้ เนื่องจากแม้ว่าแอตทริบิวต์ MemberOf จะส่งกลับค่าที่ต่างออกไป แต่แอตทริบิวต์ MemberOf เองก็ยังไม่มีการแก้ไข
  • จำเป็นต้องมีลิงก์ส่งต่อ ลิงก์ย้อนกลับเป็นทางเลือก บางบทความเกี่ยวกับแอตทริบิวต์ที่มีการเชื่อมโยงระบุว่าแอตทริบิวต์ที่เชื่อมโยงมักจะมีทั้งลิงก์ไปข้างหน้าและลิงก์ย้อนกลับ แม้ว่าจะเป็นเช่นนั้นบ่อยครั้ง แต่การมีลิงก์ย้อนกลับก็ไม่จำเป็นอย่างยิ่ง ที่จริงแล้ว หากเราใช้ PowerShell เพื่อดึงข้อมูลคู่แอตทริบิวต์ที่เชื่อมโยง เราจะเห็นว่าไม่ใช่ทุกลิงก์ส่งต่อในแล็บของฉันที่มีลิงก์ย้อนกลับที่เกี่ยวข้อง:

ประโยชน์ของแนวทางนี้ในการจัดเก็บแอตทริบิวต์ที่เชื่อมโยง

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

ขั้นแรก การจัดเก็บเฉพาะค่าลิงก์ไปข้างหน้าและใช้ในการคำนวณค่าลิงก์ย้อนกลับที่เกี่ยวข้องจะช่วยลดขนาดของฐานข้อมูล Active Directory

ประโยชน์หลักอื่นๆ ซึ่งไม่ค่อยชัดเจนนักนั้นเกิดจากการที่ Active Directory เก็บแต่ละการเชื่อมโยงแยกกัน เนื่องจากการเชื่อมโยงของลิงก์ไปข้างหน้าแต่ละรายการมีรายการของตนเองใน link_table แต่ละรายการจึงสามารถรักษาหมายเลขลำดับการอัปเดต (USN) ของตนเองได้ ลักษณะการทำงานนี้เรียกว่าการจำลองแบบค่าที่เชื่อมโยง (LVR) และอนุญาตให้ Active Directory จำลองแต่ละการเชื่อมโยงอย่างอิสระ ตัวอย่างเช่น หากคุณเพิ่มผู้ใช้ในกลุ่มที่มีสมาชิกที่มีอยู่ 100 คน ระบบจะจำลองเฉพาะรายการสำหรับผู้ใช้ที่เพิ่มใหม่เท่านั้น ซึ่งสามารถลดปริมาณการจำลองที่จำเป็นในการเผยแพร่การเปลี่ยนแปลงไปยังคุณลักษณะที่เชื่อมโยงได้อย่างมาก

ข้อเท็จจริงโบนัส

ก่อนที่ฉันจะผูกโบว์กับทั้งหมดนี้ มีพฤติกรรมอีกอย่างหนึ่งที่ควรค่าแก่การกล่าวถึง: ค่าแอตทริบิวต์ที่เชื่อมโยงจะถูกลบออกจากวัตถุที่ถูกลบ เว้นแต่จะเปิดใช้งานถังรีไซเคิล AD เมื่อลบออบเจ็กต์ที่มีแอตทริบิวต์ที่เชื่อมโยง แม้ว่า Active Directory จะรักษาออบเจ็กต์นั้นไว้เป็นระยะเวลาหนึ่งเป็นหลุมฝังศพ รายการ link_table ที่เกี่ยวข้องของออบเจ็กต์ก็จะถูกลบเช่นกัน การเปิดใช้งานถังรีไซเคิล Active Directory จะเปลี่ยนลักษณะการทำงานนี้และคงรายการ link_table ที่เกี่ยวข้องไว้ตลอดระยะเวลาตามหลุมฝังศพของวัตถุที่ถูกลบ

บทสรุป

เนื่องจากแอตทริบิวต์ที่เชื่อมโยงของ Active Directory จะถูกจัดเก็บแตกต่างจากแอตทริบิวต์ Active Directory อื่นๆ จึงมีการทำงานที่แตกต่างกัน โดยเฉพาะอย่างยิ่งกับแอตทริบิวต์ลิงก์ย้อนกลับ หากคุณนำสิ่งเดียวไปจากบทความนี้ ลิงก์ย้อนกลับจะต้องเป็นคุณลักษณะที่สร้างขึ้น — ค่าของลิงก์เหล่านั้นจะไม่ถูกจัดเก็บโดยตรง และด้วยเหตุนี้ ลิงก์ย้อนกลับจึงไม่ทำงานเหมือนกับคุณลักษณะอื่นๆ เลย โดยเฉพาะอย่างยิ่งกับ เกี่ยวกับการอัพเดต โดยทั่วไป Active Directory ทำหน้าที่ปกปิดพฤติกรรมแบ็คเอนด์ได้ดีมากเพื่อประสบการณ์ผู้ใช้ที่สอดคล้องกัน แต่การทำความเข้าใจความแตกต่างที่ซ่อนอยู่เกี่ยวกับคุณลักษณะและผลที่ตามมาสามารถป้องกันปัญหาได้

บทความที่เกี่ยวข้อง