Jak změnit structural objectClass v OpenLDAP

Typy objectClass

objectClass (třída objektu/objektová třída) může být následujících typů:

  1. STRUCTURAL (konstrukční) – Každý objekt musí mít právě jednu, je využita k vytváření datových objektů v backendu a je tedy povinná.
  2. AUXILIARY (pomocná/doplňující) – Může být přidána nebo odebrána na kterémkoli objektu podle toho jak se nám to hodí.
  3. ABSTRACT (abstraktní) – Nejběžnější abstraktní třída je objectClass top která je na nejvyšší úrovni hierarchického stromu tříd objektů.

Chyba při změně structural třídy

Pokud se pokusíte změnit objectClass která je structural tak se to nepovede a LDAP zahlásí chybu podobnou této:

[LDAP: error code 69 – structural object class modification from ‚Person‘ to ‚Account‘ not allowed]

Až dosud jsem to tedy řešil tak že jsem objekt na kterém jsem potřeboval takovouto změnu provést vyexportoval do ldif formátu, provedl změnu, původní objekt smazal a naimportoval upravený objekt. Nevýhoda tohoto řešení je že se musí něco mazat, což není nikdy moc dobré. Může dojít k chybě při importu a uživatel se nebude moci chvilku přihlásit.

Další možností bylo zastavit slapd, vyexportoval pomocí slapcat databázi do ldif, provést změnu a znovu naimportovat databázi pomocí slapadd. Mělo to výhodu v tom že zůstala zachovaná metadata objektů (kdo ho vytvořil a kdy), nevýhodou byla samozřejmě odstávka LDAP serveru a reindexace všech objektů při importu, což může chvilku trvat.

Využití Relax Rules control

Pro mě novou možností je využití příznaku control:

Při využití příznaku control s hodnotou 1.3.6.1.4.1.4203.666.5.12 lze structural objectClass změnit. Samozřejmě musí Relax Rules control podporovat váš slapd daemon. Velkou výhodou tohoto řešení je to že se nic nemusí mazat.

Více si o tom můžete přečíst na tomto odkazu https://tools.ietf.org/html/draft-zeilenga-ldap-relax-03#section-3.1. Jinak já jsem se k této vychytávce dostal přes tento článek.

Napsat komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *