Einzelnen Beitrag anzeigen

TigerLilly

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
1.179 Beiträge
 
Delphi 11 Alexandria
 
#1

Active Directory und Trusted Domain

  Alt 22. Nov 2023, 11:26
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?
  Mit Zitat antworten Zitat