Printout Header
RSS Feed

Attribute für AD User : objectSID


Das AD-Attribut objectSid enthält die Security ID (SID) des betreffenden Accounts. Nur so genannte Security Principals (User und Computer Accounts sowie Sicherheitsgruppen) besitzen eine SID. Sie spielt eine wichtige Rolle bei der Vergabe und Zuweisung von Berechtigungen.


objectSID


LDAP Name objectSID
Datentyp Octetstring (max 28)
Multivalue (Array) No
System Flags

0x12

Search Flags 0x09
Im Global Catalog? Ja
Attribute ID 1.2.840.113556.1.4.146
AD DB Attributname Object-Sid
ADSI datatype 8 - Octet String
LDAP syntax 2.5.5.17 - String(Sid)
Wird verwendet in ... > W2K
Schema Doku Microsoft - MSDN

In allen Rechtelisten (Access Control Lists - ACL) werden bei der Vergabe von Berechtigungen an Benutzer nicht deren Namen, sondern lediglich deren SIDs eingetragen. Das gilt für Berechtigungen in der gesamten Domäne: Für Objektrechte im Verzeichnis genauso wie für NTFS-Dateiberechtigungen auf einem Memberserver der Domäne. Auf diese Weise bleiben bei einer Umbenennung des Account die Berechtigungen erhalten.

Microsoft Security IDs liegen in binärer Form vor (die entsprechenden Attribute haben als LDAP Syntax "Octet String") und müssen somit erst decodiert werden, um sie in die gewohnte lesbare Form zu bringen, z.B.

S-1-5-21-2611707862-2219215769-354220275-1137

Dies ist die Schreibweise einer Beispiel-SID in der Notation der Security Descriptor Definition Language (SDDL). Typischerweise setzt sich die SID eines Active Directory Benutzers setzt sich immer aus zwei Bestandteilen zusammen: Dem Domänenanteil (der bei allen SIDs innerhalb einer Domäne konstant bleibt) und dem Realitven SID-Anteil (der so genannten RID). Die RID ist immer der letzte Ziffernblock hinter dem letzten Minuszeichen, in unserem Beispiel also 1137.

Alle weiteren Details zum technischen Aufbau und dem Umgang mit SIDs sind im SelfADSI Artikel "Microsoft SID Attribute" enthalten. Dort können Sie sehen, wie man nach Objekten mit einer bestimmten SID sucht, oder welche anderen wichtigen Attribute ebenfalls SID-Werte enthalten. An dieser Stelle sei nur kurz gezeigt, wie man die SID eines Benutzers ausliest und als SDDL String darstellt:

'Sie müssen hier andere Namen und Anmeldedaten aus Ihrer eigene Umgebung angeben! Set obj = GetObject("LDAP://cn=Foeckeler,cn=Users,dc=cerrotorre,dc=de") pureSidData = OctetToHexStr(obj.objectSid) sDDLSidStr = HexStrToSID(pureSidData) WScript.Echo obj.cn WScript.Echo pureSidData WScript.Echo sDDLSidStr Function HexStrToSID(strSid) 'wandelt einen SID Hex String in Rohform in den entsprechenden SID String (SDDL) um ReDim data(Len(strSid)/2 - 1) For i = 0 To UBound(data) data(i) = CInt("&H" & Mid(strSid, 2*i + 1, 2)) Next HexStrToSID = "S-" & data(0) & "-" & Byte6ToLong(data(2), data(3), data(4), data(5), data(6), data(7)) blockCount = data(1) For i = 0 To blockCount - 1 offset = 8 + 4*i HexStrToSID = HexStrToSID & "-" & Byte4ToLong(data(offset+3), data(offset+2), data(offset+1), data(offset)) Next End Function '_________________________________________________________________________________________ Hilfsfunktionen Function OctetToHexStr(var_octet) 'wandelt reine Binärdaten (Byte-Array) in einen String mit den Hexadezimalwerten um. OctetToHexStr = "" For n = 1 To lenb(var_octet) OctetToHexStr = OctetToHexStr & Right("0" & hex(ascb(midb(var_octet, n, 1))), 2) Next End Function Function Byte4ToLong(ByVal b1, ByVal b2, ByVal b3, ByVal b4) 'wandelt 4 Bytes in den entsprechenden Long-Wert um Byte4ToLong = b1 Byte4ToLong = Byte4ToLong * 256 + b2 Byte4ToLong = Byte4ToLong * 256 + b3 Byte4ToLong = Byte4ToLong * 256 + b4 End Function Function Byte6ToLong(ByVal b1, ByVal b2, ByVal b3, ByVal b4, ByVal b5, ByVal b6) 'wandelt 6 Bytes in den entsprechenden Long-Wert um Byte6ToLong = b1 Byte6ToLong = Byte6ToLong * 256 + b2 Byte6ToLong = Byte6ToLong * 256 + b3 Byte6ToLong = Byte6ToLong * 256 + b4 Byte6ToLong = Byte6ToLong * 256 + b5 Byte6ToLong = Byte6ToLong * 256 + b6 End Function