Active Directory Bağlantılı Nitelikler Kılavuzu
Active Directory bağlantılı özniteliği, nesneler arasındaki ilişkileri tanımlamak için kullanılan özel bir Active Directory özniteliği türüdür. Bu yazı, bağlantılı özelliklerin ne olduğunu ve nasıl çalıştıklarını açıklamaktadır.
Bir özelliği bağlantılı bir özellik yapan nedir?
Active Directory'deki her öznitelik, Active Directory şema bölümündeki bir AttributeSchema nesnesi tarafından tanımlanır. Bağlantılı öznitelikleri tanımlayan AttributeSchema nesneleri, doldurulmuş bir LinkID özniteliğine sahip olan tek şema nesneleridir. Buna göre, bir etki alanındaki tüm bağlantılı özniteliklerin tanımlanması, PowerShell'i kullanarak doldurulmuş bir LinkID'ye sahip nesneleri şemada aramak kadar kolaydır:
Get-ADObject -SearchBase (Get-ADRootDSE).SchemaNamingContext -LDAPFilter "(LinkID=*)"Bağlantılı özellikler genellikle çiftler halinde bulunur; bir ileri bağlantı ve bir geri bağlantı, LinkID özelliğinin değeriyle tanımlanır:
- İleri bağlantı — LinkID değeri her zaman pozitif bir çift tamsayıdır.
- Geri bağlantı — LinkID değeri her zaman pozitif bir tek tam sayıdır; aslında, ilişkili ileri bağlantının LinkID artı bir değeridir.
En küçük LinkID değerlerine sahip öznitelikler, Active Directory'deki grup üyeliğini izlemek için kullanılan Member özniteliği ve MemberOf özniteliğidir. Çıktıyı yalnızca bu iki özellikle sınırlandırmak için PowerShell betiğimizi değiştirelim:
Çıktı bize bu iki özellik hakkında birkaç önemli gerçeği anlatıyor:
- Member özelliğinin LinkID değeri çift tamsayı olan 2'dir. Bu, Member özelliğinin bir ileri bağlantı olduğu anlamına gelir.
- MemberOf özniteliğinin LinkID değeri tek bir tam sayı olan 3'tür. Bu, MemberOf özelliğinin bir geri bağlantı olduğu anlamına gelir.
- Geri bağlantı MemberOf'un LinkID değeri, ileri bağlantı Member özelliğinin LinkID değeri artı birdir (3=2 + 1). Bu, Member niteliğinin ve MemberOf niteliğinin ilişkili bağlantılı nitelikler olduğu anlamına gelir.
Bağlantılı bir özelliğin ilişkili ileri bağlantısının veya geri bağlantısının adını doğrudan almak için biraz farklı bir PowerShell betiği kullanılabilir; ancak bu, özelliğin ileri bağlantı mı yoksa geri bağlantı mı olduğunu açıkça söylemez. LinkID değerine bakmanız ve bunu kendiniz belirlemeniz gerekir.
Active Directory bağlantılı öznitelikler nasıl çalışır?
Artık bağlantılı özelliklerin ne olduğunu ve bunları nasıl tanımlayacağımızı belirlediğimize göre, artık davranışlarını keşfetmenin zamanı geldi.
Bağlantılı öznitelikler, bir nesne hakkında bilgi depolayan geleneksel Active Directory özniteliklerinin aksine, iki nesne arasındaki ilişki hakkındaki bilgileri depolar. Bu işlevsel fark, Active Directory'nin bağlantılı özniteliklerin değerlerini diğer özniteliklerin değerlerinden farklı şekilde saklaması gerçeğinde yansıtılmaktadır.
Bağlantılı Nitelikler Nasıl Saklanır?
Active Directory verileri ntds.dit veritabanı dosyasında depolanır. Geleneksel niteliklerin değerleri veri tablosu adı verilen bir tabloda saklanır. Bağlantılı özelliklerin, uygun şekilde link_table olarak adlandırılan kendi özel tabloları vardır. Laboratuvarımın ntds.dit veritabanı dosyasının anlık görüntüsüne göz atarsak, Active Directory'nin bağlantılı nitelik değerlerini nasıl sakladığını görebiliriz:
link_table'daki nesne referansları, aslında ntds.dit veri tablosundaki kayıtların dahili birincil anahtarı olan bir nesnenin ayırt edici ad etiketini (DNT) kullanır. Bu, bir nesnenin ayırt edici adında yapılan değişikliklerin ilgili link_table girişlerinde güncelleme yapılmasını gerektirmesini önler.
Ekran görüntüsü link_table'daki üç önemli alanı vurgulamaktadır:
- link_DNT — Bir ileri bağlantı nesnesine referans.
- backlink_DN — İlişkili geri bağlantı nesnesine bir referans.
- link_base — İleri bağlantı özelliğinin Bağlantı Kimliğine referans. Bu alan, iki nesne arasında izlenen ilişkiyi tanımlamak için ileri bağlantının LinkID değerini kullanır (ancak ekran görüntüsünde görebileceğiniz gibi, tablodaki değerler aslında LinkID değerinin 2'ye bölümüdür).
Bağlantılı Niteliklerin Saklanmasına Yönelik Bu Yaklaşımın Pratik Sonuçları
Bu depolama yaklaşımı biraz tuhaf görünse de, bazı önemli pratik sonuçlara yol açan gerçekten harika bir tasarımdır:
- İleri bağlantı değerleri saklanır; geri bağlantı değerleri oluşturulur. Bu tartışmadan çıkarılabilecek en önemli kavram şudur: Geri bağlantılar aslında bilgi depolamaz. iki nesne tek bir varlık olduğundan, Active Directory'nin bir ilişkinin birden fazla kopyasını depolaması gerekmez. Bir ileri bağlantı sorgulandığında, Active Directory, sorgulanan nesnenin DNT'sinin link_DNT alanındaki değerle eşleştiği ve ileri bağlantının LinkID'sinin link_base alanındaki değerle eşleştiği link_table girişlerini basitçe döndürebilir. Bir geri bağlantı sorgulandığında Active Directory, sorgulanan nesnenin DNT'sinin backlink_DNT alanındaki değerle eşleştiği ve ilişkili ileri bağlantının LinkID'sinin (geri bağlantı LinkID'sinden 1 çıkarılarak hesaplanır) eşleştiği link_table girişlerini döndürerek değerlerini hesaplayabilir. link_base alanındaki değer.
- İleri bağlantı değerleri yazılabilir; geri bağlantı değerleri salt okunurdur. Active Directory'nin yalnızca ileri bağlantıların değerlerini sakladığını bildiğinizde, bu muhtemelen çok açık görünecektir. Ancak bunun önemli bir sonucu vardır: Bağlantılı bir öznitelik değiştirildiğinde, Active Directory, o bağlantıya sahip olan nesneyi değiştiren ileri bağlantıyı günceller. Yapılandırılmış bir salt okunur değere sahip olan geri bağlantı hiçbir zaman değiştirilemez, dolayısıyla geri bağlantıya sahip olan nesne de değiştirilmez.
Bunun neden önemli olduğunu göstermek için, bir gruba kullanıcı eklemeyi düşünelim. Bu güncelleme yalnızca grubun Üye özelliğini değiştirir; kullanıcının MemberOf niteliği değiştirilmez. Grup nesnesinde önemli bir değişiklik olduğu için bu değişikliği yansıtan meta veri alanları (örneğin, "ModifyTimeStamp" ve "WhenChanged" nitelikleri) güncellenir. Aynı meta veri alanları kullanıcı nesnesinde güncellenmez. Çünkü MemberOf özelliği artık farklı bir değer döndürse de MemberOf özelliğinin kendisi değiştirilmemiştir. - Yönlendirme bağlantıları zorunludur; geri bağlantılar isteğe bağlıdır. Bağlantılı özelliklerle ilgili bazı makaleler, bağlantılı özelliklerin her zaman hem ileri bağlantıya hem de geri bağlantıya sahip olduğunu belirtir. Bu genellikle doğru olsa da, bir geri bağlantının varlığı kesinlikle gerekli değildir. Aslında, bağlantılı nitelik çiftlerini almak için PowerShell'i kullanırsak laboratuvarımdaki her ileri bağlantının ilişkili bir geri bağlantıya sahip olmadığını görebiliriz:
Bağlantılı Nitelikleri Depolamaya İlişkin Bu Yaklaşımın Faydaları
Bağlantılı niteliklerin saklanma şeklinin harika olduğundan nasıl bahsettiğimi hatırlıyor musunuz? Active Directory'nin bağlantılı nitelik değerlerini saklama yaklaşımı aslında iki önemli fayda sağlar.
İlk olarak, yalnızca ileri bağlantı değerlerinin depolanması ve bunların ilgili geri bağlantı değerlerinin hesaplanmasında kullanılması, Active Directory veritabanının boyutunu azaltır.
Biraz daha az belirgin olan diğer önemli fayda, Active Directory'nin her ilişkilendirmeyi ayrı ayrı saklamasından kaynaklanmaktadır. Bir ileri bağlantının ilişkilendirmelerinin her birinin link_table'da kendi girişi olduğundan, her giriş kendi Güncelleme Sıra Numarasını (USN) koruyabilir. Bu davranışa Bağlantılı Değer Çoğaltma (LVR) adı verilir ve Active Directory'nin her bir ilişkilendirmeyi bağımsız olarak çoğaltmasına olanak tanır. Örneğin, 100 üyeli bir gruba kullanıcı eklerseniz yalnızca yeni eklenen kullanıcının girişi çoğaltılır. Bu, değişiklikleri bağlantılı niteliklere yaymak için gereken çoğaltma hacmini önemli ölçüde azaltabilir.
Bonus Gerçek
Tüm bunlara bir fiyonk atmadan önce, bahsetmeye değer bir davranış daha var: AD Geri Dönüşüm Kutusu etkinleştirilmediği sürece bağlantılı özellik değerleri silinen nesnelerden kaldırılır. Bağlantılı özniteliğe sahip bir nesne silindiğinde, Active Directory nesnenin kendisini bir süreliğine mezar taşı olarak tutsa da, nesnenin ilişkili bağlantı_tablosu girişleri de silinir. Active Directory Geri Dönüşüm Kutusu'nun etkinleştirilmesi bu davranışı değiştirir ve silinen nesnenin kaldırıldı olarak işaretlenme süresi boyunca ilgili link_table girişlerini korur.
Çözüm
Active Directory'ye bağlı öznitelikler diğer Active Directory özniteliklerinden farklı şekilde depolandığından farklı davranırlar. Bu özellikle geri bağlantı özellikleri için geçerlidir. Bu makaleden tek bir şeyi çıkarırsanız, o da geri bağlantıların oluşturulmuş nitelikler olduğu gerçeği olmalıdır; değerleri doğrudan depolanmaz ve sonuç olarak, gerçekten de diğer nitelikler gibi davranmazlar, özellikle de güncellemelere saygı. Active Directory genellikle tutarlı bir kullanıcı deneyimi adına arka uç davranışlarını gizleme konusunda çok iyi bir iş çıkarır, ancak niteliklerle ilgili temel farklılıkları ve bunların sonuçlarını anlamak sorunları önleyebilir.



