Ich könnte Hilfe gebrauchen. Danke!
Ich habe zwei Domänen
DOM-A und
DOM-B, die via Trusted Donain verbunden sind.
Ich kann aus der Domäne
DOM-A für den User X aus dem AD die Gruppen auslesen:
select memberof from 'LDAP://
DOM-A' where objectClass='person' and sAMAccountName='X'
Damit ich aus der
DOM-B die gruppen des Users auslesen kann, muss ich aus
DOM-A den SID ermitteln und damit in
DOM-B suchen:
select objectSID from 'LDAP://
DOM-A' where objectClass='person' and sAMAccountName='X'
Liefert siwas: S-1-5-21-144191708-1486429690-1194094237-999999
Mit dem SID suche ich nun in
DOM-B:
select memberof from 'LDAP://
DOM-B' where objectClass='foreignSecurityPrincipal' and Name='S-1-5-21-144191708-1486429690-1194094237-999999'
Das Problem ist nun, dass das zwar eine Zeile zurückliefert, aber ich auf die Felder der
Query nicht zugreifen kann. Etwas, das im Schritt ganz oben ohne Probleme funktioniert. Siehe Code unten.
Code:
if (sSID <> '') then begin
sSQL := 'select memberof from ''LDAP://' + sDomain +
''' where objectClass=''foreignSecurityPrincipal'' and Name=' + QuotedStr(sSID);
end else begin
sSql := 'select memberof from ''LDAP://' + sDomain + ''' where objectClass=''person'' and sAMAccountName=' +
QuotedStr(sUSername);
end;
qQuery.SQL.Text := sSql;
qQuery.Open;
s := '';
while not qQuery.EOF do begin
i := qQuery.FieldCount; <---- es gibt 1 Feld
for i := 0 to qQuery.FieldCount - 1 do begin
try
v := qQuery.Fields[i].Value; < --- v ist Variant
nDim := VarArrayDimCount(v); <-- das hat Wert 0 bei Abfrage über SID
nUpper := VarArrayHighBound(v, 1); < --- hier gibt es einen fehler, weil das Dimension 0 hat + wohl ein anderer Datentyp?
nLower := VarArrayLowBound(v, 1);
for n := nLower to nUpper do begin
try
s := s + ', ' + v[n];
except
on e:
Exception do begin
o_Log.Log(e.message, llDebug);
end;
end;
end;
except
on e:
Exception do begin
o_Log.Log(e.message, llDebug);
end;
end;
end;
Ich vermute, dass der Variant v da einen anderen Datentyp hat, aber welchen? Oder übersehe ich da was ganz anderes?