Einzelnen Beitrag anzeigen

MIK80

Registriert seit: 7. Dez 2006
3 Beiträge
 
#2

Re: Active Directory Zugriff über ADO Objekt

  Alt 28. Dez 2006, 11:48
Hallo,

ich bins mal wieder

Ich habe es mittlerweile geschafft eine Verbindung zum AD herzustellen und gewisse Daten zu ermitteln.

Code:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ActiveDs_TLB, ActiveX, ComCtrls, adshlp;

type
  TForm1 = class(TForm)
    Button1: TButton;
    TreeView1: TTreeView;
    procedure Button1Click(Sender: TObject);
    procedure StartConnection;
  private
    { Private-Deklarationen }
    VDomain, VUser, VPasswort : string;
    Dom : IADsContainer;
  public
    { Public-Deklarationen }
    procedure AddToTree(disp: IADs);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.AddToTree(disp: IADs);
begin
  TreeView1.Items.Add(nil, disp.Get('Description'));
end;

procedure TForm1.StartConnection;
begin
 if Dom <> nil then Dom := nil;
 ADsOpenObject('WinNT://' + VDomain, VUser, VPasswort, 1, IADsContainer, Dom);

 Dom.Filter := VarArrayOf(['user']);

 TreeView1.Items.Clear;

 ADsEnumerateObjects(dom, AddToTree);
end;



procedure TForm1.Button1Click(Sender: TObject);
begin
  VDomain := 'domain.local';
  VUser := 'Administrator';
  VPasswort := 'kennwort4711!';
  StartConnection;
end;

end.
Folgende Probleme stellen sich mir jetzt.

Ich übergebe die Werte VDomain, VUser, VPasswort an den Verbindungsaufruf.
Der Rechner an dem ich sitze ist in der Domäne xyz.local. Ich habe einen zusätzlichen Domänencontroller (VMWare) mit der Domäne domain.local.
Von domain.local kann ich keine Daten auslesen. Von xyz.local kann ich allerdings Daten auslesen. Irgendwie scheint die Authentifizierung nicht zu funktionieren. Es scheint als würde immer die Windows Authentifizierung verwendet werden.

Mein zweites Problem ist, dass ich keine "Unique Identifier" habe bzw. weiß ich nicht wie dieses Feld heißt. Google erzählte mir, dass ich auf UID zugreifen kann. Über ADSI bekomme ich eine Fehlermeldung. Wenn ich allerdings über ADO und ADOQuery arbeite und

Code:
SELECT uid FROM LDAP://dc=domain,dc=local WHERE objectClass = 'user' and objectCategory = 'person'
verwende, kann ich das Feld uid auslesen. Allerdings ist es immer leer. Ich würde jetzt eine eindeutige ID aus LDAP brauchen um die Benutzer in eine SQL Datenbank zu schreiben und sie eindeutig zu identifizieren. (Evtl. werden die Benutzer mit LDAP synchronisiert).

lg
MIK80

PS: DeranderMicha hat mir bereits sehr viel weitergeholfen. Ich möchte mich hier nochmal bei ihm bedanken.
  Mit Zitat antworten Zitat