Datenbank: SQL Server • Version: 2000 • Zugriff über: ADO
Active Directory Zugriff über ADO Objekt
Hallo,
ich bin neu hier im Forum. Ich habe aber bereits fleißig hier gesucht und nicht das passende für mich gefunden. Ich möchte über ADO eine Verbindung zu unserem Domänencontroller mittels "OLE DB Provider für Microsoft Directory Service" herstellen. Die Verbindung scheint zu funktionieren. Ist ja auch der einfachte Teil. Jetzt möchte ich mittels "ADOQuery" gewisse Daten auslesen. Für's erste würde mir der Benutzername reichen. Ich bräuchte allerdings sämtliche Benutzer. Dh. es sollen alle OUs untersucht werden. Mein Problem liegt jetzt an der formulierung des SQL Statements. Ich weiß nicht welche "Tabelle" ich ansprechen kann. Ich vermute meine Domäne "home.local" steht für meine Datenbank. Also wird die ADO Verbindung auch auf home.local hergestellt. Aber wie formuliere ich, welche "Tabelle" also welche OU, etc. ich ansprechen möchte?
Delphi-Quellcode:
Bitte verweist mich nicht auf http://www.agnisoft.com/white_papers..._directory.asp! Das was ich benötige finde ich dort leider nicht.
SELECT * FROM ???
lg MIK |
Re: Active Directory Zugriff über ADO Objekt
Hallo,
ich bins mal wieder :) Ich habe es mittlerweile geschafft eine Verbindung zum AD herzustellen und gewisse Daten zu ermitteln.
Code:
Folgende Probleme stellen sich mir jetzt.
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. 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:
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).
SELECT uid FROM LDAP://dc=domain,dc=local WHERE objectClass = 'user' and objectCategory = 'person'
lg MIK80 PS: DeranderMicha hat mir bereits sehr viel weitergeholfen. Ich möchte mich hier nochmal bei ihm bedanken. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:11 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz