Printout Header
RSS Feed

LDAP Verzeichnisobjekte erzeugen


Um verschiedene Objekte zu erzeugen, verbindet man sich einfach mit dem Verzeichnis-Container, in dem die neuen Objekte enthalten sein sollen, und verwendet dort die Container-Funktion create(). Diese erfordert die Angabe der Objektklasse des neuen Objekts und dessen Relative Distinguished Name (RDN). Außerdem müssen je nach Objektklasse evtl. zwingend vorgeschriebene Attribute gesetzt sein, ansonsten kann das Objekt nicht oder nicht sinnvoll erzeugt werden.


Beispiele für Active Directory und Exchange (ab Exchange 2000):


Organizational Units erzeugen
 
 
User erzeugen
Mail-User erzeugen
Kontakte erzeugen
Lokale Gruppen erzeugen
Globale Gruppen erzeugen
Universelle Gruppen erzeugen

Beispiele für Novell eDirectory (NDS):


Organizational Units erzeugen
ZEN Application Objects erzeugen
User erzeugen
Gruppen erzeugen



Organizational Unit erzeugen


Um eine Active Directory Organizational Unit zu erzeugen, verbindet man sich zuerst mit dem Verzeichnis-Container, in dem erzeugt werden soll. Dies kann entweder eine Domänen-Objekt sein oder eine andere OU.

Set parent = GetObject("LDAP://ou=Benutzer,dc=cerrotorre,dc=de") Set ou = parent.Create("organizationalUnit", "ou=Abteilung1") ou.SetInfo

User erzeugen


Um einen Active Directory User zu erzeugen, muss man die Objektklasse "user" verwenden und dann mindestens das Attribut "sAMAccountName" (Windows NT-Anmeldename) setzen:

Set ou = GetObject("LDAP://ou=Benutzer,dc=cerrotorre,dc=de") Set user = ou.Create("user", "cn=Philipp") user.sAMAccountName = "philipp" user.SetInfo

Der Benutzer wird übrigens als deaktivierter Benutzer ohne Passwort erstellt. Evtl. bestehende Passwort-Richtlinien (Minimale Passwort-Länge oder Komplexitätsanforderungen) werden nicht beachtet. Um den Account gleichzeitig zu aktivieren, muss man ein entsprechende Flag im Attribut userAccountControl setzen:

Set ou = GetObject("LDAP://ou=Benutzer,dc=cerrotorre,dc=de") Set user = ou.Create("user", "cn=Philipp") user.sAMAccountName = "philipp" user.userAccountControl = 512 '512 = Normal Account user.SetInfo

Dies wird in vielen Fällen fehlschlagen, denn nach wie vor wird er Account auf diese Weise mit leerem Passwort angelegt und dies dürfte in den meisten Domänen durch entsprechende Passwort-Richtlinien verboten sein. Jedoch ist es schwierig, dem Account gleich beim Anlegen ein Passwort zu vergeben. Also legen wir ihn mit einem userAccountControl-Flag an, dass für diesen User eine leeres Passwort erlaubt. Dieses Flag wird nach dem Setzen eines Passwortes wieder gelöscht:

Set ou = GetObject("LDAP://ou=Benutzer,dc=cerrotorre,dc=de") Set user = ou.Create("user", "cn=Philipp") user.sAMAccountName = "philipp" user.userAccountControl = 544 '512 + 32 = Normal Account / Password not required user.SetInfo 'User erstellt mit leerem Passwort trotz Kennwortrichtlinie user.SetPassword "Pa$$w0rd" 'Standard-Password wird gesetzt user.userAccountControl = 512 'Flag, das ein leeres PAsswort erlaubt, wird gelöscht user.pwdLastSet = 0 'Passwort muss bei der nächsten Anmeldung geändert werden user.SetInfo

Nähere Infos zu den betreffenden LDAP-Attributen oder für das Setzen weiterer Eigenschaften des Objektes erhalten Sie im Abschnitt "Attribute für Active Directory User" hier im SelfADSI Tutorial.


Mail-User erzeugen (Exchange 2000 / Exchange 2003)


Um in einer Exchange Organisation (Exchange 2000/2003) einen Mail-enabled User zu erzeugen, muss man die Objektklasse "user" verwenden und dann mindestens die Attribute "sAMAccountName" (Windows NT-Anmeldename), "mailNickName" (Exchange Alias), "displayName" (Anzeigename) und "homeMDB" (Informationsspeicher des Postfaches) setzen.


Dabei muss man den genauen Distinguished Name des Informationsspeichers bilden, der sich aus den Namen der Organisation des Exchange-Servers, der Storage Group und der Datenbank selbst zusammensetzt.

Set ou = GetObject("LDAP://ou=Benutzer,dc=cerrotorre,dc=de") Set mailuser = ou.Create("user", "cn=Philipp") mailuser.sAMAccountName = "philipp" mailuser.homeMDB = "CN=Name der Priv-Datenbank," & "CN=Name der StorageGroup,CN=InformationStore,CN=Name des Servers,"& _ "CN=Servers,CN=Name der Administrativen Gruppe," & _ "CN=Administrative Groups,CN=Name der Organisation,CN=Microsoft Exchange," & _ "CN=Services,CN=Configuration,DC=cerrotorre,DC=de" mailuser.mailNickName = "philipp" mailuser.displayName = "Föckeler, Philipp" mailuser.SetInfo

Das Postfach dieses Benutzers wird im Exchange System Manager (ESM) solange nicht angezeigt, bis die erste Mail darin landet. Der Benutzer wird übrigens als deaktivierter Benutzer ohne Passwort erstellt. Evtl. bestehende Passwort-Richtlinien (Minimale Passwort-Länge oder Komplexitätsanforderungen) werden nicht beachtet. Um den Account gleichzeitig zu aktivieren, muss man ein entsprechende Flag im Attribut userAccountControl setzen:

Set ou = GetObject("LDAP://ou=Benutzer,dc=cerrotorre,dc=de") Set mailuser = ou.Create("user", "cn=Philipp") mailuser.sAMAccountName = "philipp" mailuser.homeMDB = "CN=Name der Priv-Datenbank," & _ "CN=Name der StorageGroup,CN=InformationStore,CN=Name des Servers,"& _ "CN=Servers,CN=Name der Administrativen Gruppe," & _ "CN=Administrative Groups,CN=Name der Organisation,CN=Microsoft Exchange," & _ "CN=Services,CN=Configuration,DC=cerrotorre,DC=de" mailuser.mailNickName = "philipp" mailuser.displayName = "Föckeler, Philipp" user.userAccountControl = 512 '512 = Normal Account mailuser.SetInfo

Dies wird in vielen Fällen fehlschlagen, denn nach wie vor wird er Account auf diese Weise mit leerem Passwort angelegt und dies dürfte in den meisten Domänen durch entsprechende Passwort-Richtlinien verboten sein. Jedoch ist es schwierig, dem Account gleich beim Anlegen ein Passwort zu vergeben. Also legen wir ihn mit einem userAccountControl-Flag an, dass für diesen User eine leeres Passwort erlaubt. Dieses Flag wird nach dem Setzen eines Passwortes wieder gelöscht:

Set ou = GetObject("LDAP://ou=Benutzer,dc=cerrotorre,dc=de") Set mailuser = ou.Create("user", "cn=Philipp") mailuser.sAMAccountName = "philipp" mailuser.homeMDB = "CN=Name der Priv-Datenbank," & _ "CN=Name der StorageGroup,CN=InformationStore,CN=Name des Servers,"& _ "CN=Servers,CN=Name der Administrativen Gruppe," & _ "CN=Administrative Groups,CN=Name der Organisation,CN=Microsoft Exchange," & _ "CN=Services,CN=Configuration,DC=cerrotorre,DC=de" mailuser.mailNickName = "philipp" mailuser.displayName = "Föckeler, Philipp" user.userAccountControl = 544 '512 + 32 = Normal Account / Password not required user.SetInfo 'User erstellt mit leerem Passwort trotz Kennwortrichtlinie user.SetPassword "Pa$$w0rd" 'Standard-Password wird gesetzt user.userAccountControl = 512 'Flag, das ein leeres PAsswort erlaubt, wird gelöscht user.pwdLastSet = 0 'Passwort muss bei der nächsten Anmeldung geändert werden user.SetInfo

Nähere Infos zu den betreffenden LDAP-Attributen oder für das Setzen weiterer Eigenschaften des Objektes erhalten Sie im Abschnitt "Attribute für Active Directory User" hier im SelfADSI Tutorial.


Kontakte erzeugen


Um einen Mail-enabled Kontakt in einer Exchange-Organisation (Exchange 2000 aufwärts) zu erzeugen, muss man die Objektklasse "contact" verwenden und dann mindestens die Attribute "mailNickName" (Exchange Alias), "displayName" (Anzeigename) und "targetAddress" (externe Mail-Adresse) setzen (dies ist der Windows NT-Anmeldename):

Set ou = GetObject("LDAP://ou=Benutzer,dc=cerrotorre,dc=de") Set mailcontact = ou.Create("contact", "cn=Mail-Contact") mailContact.mailNickName = "pfoeckeler-extern" mailContact.displayName = "Föckeler, Philipp (Extern)" mailContact.targetAddress = "philipp.foeckeler@cerrotorre.de" mailcontact.SetInfo

Nähere Infos zu den betreffenden LDAP-Attributen oder für das Setzen weiterer Eigenschaften des Objektes erhalten Sie im Abschnitt "Attribute für Active Directory Kontakte" hier im SelfADSI Tutorial.


Lokale Gruppen erzeugen


Um eine lokale Active Directory Gruppe zu erzeugen, muss man die Objektklasse "group" verwenden und dann mindestens die Attribute "sAMAccountName" (dies ist der abwärtskompatible Windows NT-Name) und "groupType" (GruppenTyp/-Bereich) setzen:

ADS_GROUP_TYPE_LOCAL_GROUP = &H00000004 ADS_GROUP_TYPE_SECURITY_ENABLED = &H80000000 Set ou = GetObject("LDAP://ou=Benutzer,dc=cerrotorre,dc=de") Set localgroup = ou.Create("group", "cn=SAPBenutzer") localgroup.sAMAccountName = "SAPBenutzer" localgroup.groupType = ADS_GROUP_TYPE_LOCAL_GROUP Or ADS_GROUP_TYPE_SECURITY_ENABLED localgroup.SetInfo

Um eine lokale Verteiler-Gruppe innerhalb einer Exchange Organisation (Exchange 2000 aufwärts) zu erzeugen, muss man die Objektklasse "group" verwenden und dann mindestens die Attribute "sAMAccountName" (dies ist der abwärtskompatible Windows NT-Name), "mailNickName" (Exchange Alias), "displayName" (Anzeigename)" und groupType" (GruppenTyp/-Bereich) setzen:

ADS_GROUP_TYPE_LOCAL_GROUP = &H00000004 ADS_GROUP_TYPE_SECURITY_ENABLED = &H80000000 Set ou = GetObject("LDAP://ou=Benutzer,dc=cerrotorre,dc=de") Set local-dl = ou.Create("group", "cn=Alle-SAP-Benutzer") local-dl.sAMAccountName = "Alle-SAP-Benutzer" local-dl.mailNickName = "Alle-SAP-Benutzer" local-dl.displayName = "Alle SAP Benutzer" local-dl.groupType = ADS_GROUP_TYPE_LOCAL_GROUP local-dl.SetInfo

Wenn man möchte, dass aus der Gruppe eine Security-Gruppe wird, die sowohl Berechtigungen erhalten als auch Mail empfangen kann, so setzt man hier den Gruppentyp einfach so:

... local-dl.groupType = ADS_GROUP_TYPE_LOCAL_GROUP Or ADS_GROUP_TYPE_SECURITY_ENABLED ...


Nähere Infos zu den betreffenden LDAP-Attributen oder für das Setzen weiterer Eigenschaften des Objektes erhalten Sie im Abschnitt "Attribute für Active Directory Gruppen" hier im SelfADSI Tutorial.


Globale Gruppen erzeugen


Um eine globale Active Directory Gruppe zu erzeugen, muss man die Objektklasse "group" verwenden und dann mindestens die Attribute "sAMAccountName" (dies ist der abwärtskompatible Windows NT-Name) und "groupType" (GruppenTyp/-Bereich) setzen:

ADS_GROUP_TYPE_GLOBAL_GROUP = &H00000002 ADS_GROUP_TYPE_SECURITY_ENABLED = &H80000000 Set ou = GetObject("LDAP://ou=Benutzer,dc=cerrotorre,dc=de") Set globalgroup = ou.Create("group", "cn=Entwicklung") globalgroup.sAMAccountName = "Entwicklung" globalgroup.groupType = ADS_GROUP_TYPE_GLOBAL_GROUP Or ADS_GROUP_TYPE_SECURITY_ENABLED globalgroup.SetInfo

Um eine globale Verteiler-Gruppe innerhalb einer Exchange Organisation (Exchange 2000 aufwärts) zu erzeugen, muss man die Objektklasse "group" verwenden und dann mindestens die Attribute "sAMAccountName" (dies ist der abwärtskompatible Windows NT-Name), "mailNickName" (Exchange Alias), "displayName" (Anzeigename)" und groupType" (GruppenTyp/-Bereich) setzen:

ADS_GROUP_TYPE_GLOBAL_GROUP = &H00000002 ADS_GROUP_TYPE_SECURITY_ENABLED = &H80000000 Set ou = GetObject("LDAP://ou=Benutzer,dc=cerrotorre,dc=de") Set global-dl = ou.Create("group", "cn=Alle-Abteilungsleiter") global-dl.sAMAccountName = "Alle-Abteilungsleiter" global-dl.mailNickName = "Alle-Abteilungsleiter" global-dl.displayName = "Alle Abteilungsleiter" global-dl.groupType = ADS_GROUP_TYPE_GLOBAL_GROUP global-dl.SetInfo

Wenn man möchte, dass aus der Gruppe eine Security-Gruppe wird, die sowohl Berechtigungen erhalten als auch Mail empfangen kann, so setzt man hier den Gruppentyp einfach so:

... local-dl.groupType = ADS_GROUP_TYPE_GLOBAL_GROUP Or ADS_GROUP_TYPE_SECURITY_ENABLED ...


Nähere Infos zu den betreffenden LDAP-Attributen oder für das Setzen weiterer Eigenschaften des Objektes erhalten Sie im Abschnitt "Attribute für Active Directory Gruppen" hier im SelfADSI Tutorial.


Universelle Gruppen erzeugen


Um eine universelle Active Directory Gruppe zu erzeugen, muss man die Objektklasse "group" verwenden und dann mindestens die Attribute "sAMAccountName" (dies ist der abwärtskompatible Windows NT-Name) und "groupType" (GruppenTyp/-Bereich) setzen:

ADS_GROUP_TYPE_UNIVERSAL_GROUP = &H00000008 ADS_GROUP_TYPE_SECURITY_ENABLED = &H80000000 Set ou = GetObject("LDAP://ou=Benutzer,dc=cerrotorre,dc=de") Set globalgroup = ou.Create("group", "cn=Support") globalgroup.sAMAccountName = "Support" globalgroup.groupType = ADS_GROUP_TYPE_UNIVERSAL_GROUP Or ADS_GROUP_TYPE_SECURITY_ENABLED globalgroup.SetInfo

Um eine universelle Verteiler-Gruppe innerhalb einer Exchange Organisation (Exchange 2000 aufwärts) zu erzeugen, muss man die Objektklasse "group" verwenden und dann mindestens die Attribute "sAMAccountName" (dies ist der abwärtskompatible Windows NT-Name), "mailNickName" (Exchange Alias), "displayName" (Anzeigename)" und groupType" (GruppenTyp/-Bereich) setzen:

ADS_GROUP_TYPE_UNIVERSAL_GROUP = &H00000002 ADS_GROUP_TYPE_SECURITY_ENABLED = &H80000000 Set ou = GetObject("LDAP://ou=Benutzer,dc=cerrotorre,dc=de") Set global-dl = ou.Create("group", "cn=Alle-Supportmitarbeiter") global-dl.sAMAccountName = "Alle-Supportmitarbeiter" global-dl.mailNickName = "Alle-Supportmitarbeiter" global-dl.displayName = "Alle Support-Mitarbeiter" global-dl.groupType = ADS_GROUP_TYPE_UNIVERSAL_GROUP global-dl.SetInfo

Wenn man möchte, dass aus der Gruppe eine Security-Gruppe wird, die sowohl Berechtigungen erhalten als auch Mail empfangen kann, so setzt man hier den Gruppentyp einfach so:

... local-dl.groupType = ADS_GROUP_TYPE_UNIVERSAL_GROUP Or ADS_GROUP_TYPE_SECURITY_ENABLED ...


Nähere Infos zu den betreffenden LDAP-Attributen oder für das Setzen weiterer Eigenschaften des Objektes erhalten Sie im Abschnitt "Attribute für Active Directory Gruppen" hier im SelfADSI Tutorial.


Organizational Unit im eDirectory erzeugen


Um eine Organizational Unit im eDirectory zu erzeugen, verbindet man sich zuerst mit dem Container, in dem erzeugt werden soll. Es kann sich dabei entweder um ein Organisations-Objekt, eine andere OU, ein Locality-Objekt oder eine Domain handeln. Es müssen keinerlei Pflichtattribute gesetzt werden.

Set parent = GetObject("LDAP://ou=DE,o=CERROTORRE") Set ou = parent.Create("organizationalUnit", "cn=Karlsruhe") ou.objectClass = "organizationalUnit" ou.SetInfo

Beachten Sie hier den Unterschied zur Erzeugung von Objekten in Active Directory Umgebungen: Es wird hier explizit die Eigenschaft "objectClass" gesetzt. Dies ist jedoch nicht immer notwendig, je nach eDirectory-Version kann die vorletzte Code-Zeile dann auch weggelassen werden. Um Fehler zur vermeiden, sollte die Objektklasse bei eDirectory-Objekten jedoch immer explizit gesetzt werden.


User im eDirectory erzeugen


Um einen eDirectory User zu erzeugen, muss man die Objektklasse "inetOrgPerson" verwenden und dann mindestens das Attribut "sn" (Nachname) setzen:

Set ou = GetObject("LDAP://ou=Accounts,ou=DE,o=CERROTORRE") Set user = ou.Create("inetOrgPerson", "cn=Philipp") user.sn = "Foeckeler" user.objectClass = "inetOrgPerson" user.SetInfo

Beachten Sie hier den Unterschied zur Erzeugung von Objekten in Active Directory Umgebungen: Es wird hier explizit die Eigenschaft "objectClass" gesetzt. Dies ist jedoch nicht immer notwendig, je nach eDirectory-Version kann die vorletzte Code-Zeile dann auch weggelassen werden. Um Fehler zur vermeiden, sollte die Objektklasse bei eDirectory-Objekten jedoch immer explizit gesetzt werden.


Gruppen im eDirectory erzeugen


Um eine eDirectory Gruppe zu erzeugen, kann man die Objektklassenbezeichnungen "group", "groupOfNames" oder auch "groupOfUniqueNames " verwenden. Es handelt sich hierbei um gleichwertige Synonyme der selben Objektklasse. Es müssen keinerlei Pflichtattribut gesetzt werden.

Set ou = GetObject("LDAP://ou=Groups,ou=DE,o=CERROTORRE") Set group = ou.Create("groupOfNames", "cn=CerroAdmins") group.objectClass = "groupOfNames" group.SetInfo

Beachten Sie hier den Unterschied zur Erzeugung von Objekten in Active Directory Umgebungen: Es wird hier explizit die Eigenschaft "objectClass" gesetzt. Dies ist jedoch nicht immer notwendig, je nach eDirectory-Version kann die vorletzte Code-Zeile dann auch weggelassen werden. Um Fehler zur vermeiden, sollte die Objektklasse bei eDirectory-Objekten jedoch immer explizit gesetzt werden.


ZEN Application Objects im eDirectory erzeugen


Um ein ZEN Application Object zu erzeugen, muß man die Objectklasse "appApplication" verwenden und mindestens die Attribute "appCaption" und "appPath" setzen. Es handelt sich dabei um die Beschreibung der Applikation und den Aufruf-Pfad des betreffenden Programms:

Set ou = GetObject("LDAP://ou=Apps,ou=DE,o=CERROTORRE") Set app = ou.Create("appApplication", "cn=AppControl") app.Put "appCaption", "AppControl 1.0" app.Put "appPath", "47 NULL" app.Put "objectClass", "appApplication" app.SetInfo

Beachten Sie, dass wir hier ganz offiziell die Put-Methode benutzen müssen und nicht mehr einfach die Attribute als Objekt-Property setzen können. Der Aufruf app.appCaption = "AppControl 1.0" hätte also einen Laufzeitfehler ergeben. Der Grund liegt darin, dass die Attribute appCaption und appPath einen Provider-Spezifischen Typ aufweisen und keine Standard-Strings sind.


In unserem Beispiel habe ich übrigens den Pfad zur ausführbaren Datei leer gesetzt - dazu muss man den String " 47 NULL " als Wert einsetzen.