| Zrovna v jedné konferenci padl dotaz na rozšiřování schematu Active Directory, tak jsem se rozhodl, že zde zveřejním svůj LDF soubor, kterým si ji sám rozšiřuji v testovacím prostředí.
Vytvářím si automaticky testovací prostředí pomocí PowerShell a XML souboru, který popisuje všechny stanice, servery, ADčko a instalace, které uvnitř mají být. A hodí se mi rozšířit si objekt uživatele o typ - jestli je to obyčejný uživatel, administrátor, nebo služební účet.
Jak na to? Stačí udělat jednoduchý LDF textový soubor, do něho nadefinovat nový atribut (v mém případě sevecek-VMB-account-type) a přidat ho jako volitelný k typu uživatel (user class).
Vzorový LDF soubor na schema update vypadá takto:
dn: CN=Sevecek-VMBuilder-Account-Type,CN=Schema,CN=Configuration,DC=X
changetype: ntdsSchemaAdd
objectClass: attributeSchema
ldapDisplayName: sevecek-VMB-AccountType
adminDisplayName: sevecek-VMB-AccountType
adminDescription: sevecek-VMB-AccountType
attributeId: 1.3.6.1.4.1.25005.102.1
attributeSyntax: 2.5.5.12
omSyntax: 64
isSingleValued: TRUE
searchFlags: 1
dn: CN=User,CN=Schema,CN=Configuration,DC=X
changetype: ntdsSchemaModify
add: mayContain
mayContain: 1.3.6.1.4.1.25005.102.1
-
dn:
changetype: modify
add: schemaUpdateNow
schemaUpdateNow: 1
-
Podstatné položky jsou vysvětleny v následující tabulce:
dn a ldapDisplayName |
atribut ldapDisplayName je to, co zobrazují a s čím pracují všechny konzole jako třeba DSA.MSC, nebo ADSIEDIT.MSC a co se také skriptuje. DN je jenom jméno definice atributu, takže se může lišit. Když byste se podívali do schematu, tak byste viděli takových rozdílů mnoho. Je to tak podle standardu. |
adminDisplayName a adminDescription |
tohle zřejmě musíte vyplnit, protože jinak se atribut nezobrazeje ani v jedné konzoli. Tak to vyplňuju na stejnou hodnotu, jako je ldapDisplayName. |
attributeSyntax a omSyntax |
Určuje typ atributu. Jestli je to řetězec, binární hodnota, nebo číslo. Kompletní seznamy hodnot naleznete tady v případě attributeSyntax a tady pro omSyntax. Rychlá reference je tu: 2.5.5.12, 64 = text (unicode string) 2.5.5.10, 4 = binární data (octet string) 2.5.5.9, 2 = číslo (integer) |
searchFlags |
tohle určuje například, jestli je hodnota atributu indexována (v mém případě bit 1). Ostatní referenci atributu searchFlags naleznete zde. |
mayContain |
no a když máte atribut definovaný, ještě ho musíte přidat jako volitelný k třídě User. Upozorňuju, že první blok textu nekončí pomlčkou, protože je to přidání (changeType: add). Zatímco druhý blok musí končit pomlčkou, protože se jedná o modifikaci (changeType: modify). |
schemaUpdateNow |
každý řadič domény (DC) má paměťovou keš obsahu schema. Po aktualizaci byste buď museli tedy počkat někam do pěti minut. Nebo rovnou zapsat do tohoto operational attributu (to je atribut RootDSE, proto je DN prázdné) a keš rovnou vysypat. Opět se jedná o changeType: modify, takže pomlčka na konci. |
No a potom to už jenom naimportujete pomocí programu LDIFDE:. Musíte jen nahradit DC=x skutečným jménem vaší root domain vašeho forestu.
ldifde -i -f schema-ext.ldf -c dc=x dc=gopas,dc=virtual
|