Announcement

Collapse
No announcement yet.

ADO, ADSI, LDAP ???

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • ADO, ADSI, LDAP ???

    Hi *,<p>
    ich möchte auf ein W2k-Active Directory lesend und schreibend zugreifen. Hab dazu hier im Forum einige Beiträge gefunden. Anscheinend gibt es mehrere Möglichkeiten: ADO, ADSI, LDAP. Sind das tatsächlich unterschiedliche Verfahren oder eigentlich alles das gleiche? Und wenn nicht, was nehme ich dann am besten her? Da der Zeitdruck groß ist - wie immer - habe ich nicht die Zeit, mich in jedes Thema einzulesen, um dann selbst entscheiden zu können. Bin dankbar für jede Hilfe.<p>
    Grüße, Reimund

  • #2
    Hallo,

    hinter ADSI steckt das <b>Active Directory Services Interface</b> als Zugriffsschnittstelle auf das Active Directory. Die Ergebnismenge einer ADSI-Abfrage kann über die <b>ADO</b>-Objekte als "Datenbank" ausgewertet werden, wenn ADO über den passenden OLE DB-Provider zugreift (ADO ist aber nur eine der Alternativen, man kan auch direkt mit ADSI arbeiten). Und hinter <b>LDAP</b> steckt ein ADSI-Provider, wobei man zwischen den folgenden Alternativen wählen darf:

    1. <b>WinNT</b>: Kommunikation mit einem Windows NT 4 Server (Primärer Domänenkontroller oder Backup-Domänenkontroller) oder einem Windows 2000-Rechner.

    2. <b>LDAP</b>: Kommunikation mit einem LDAP-Server wie zum Beispiel Microsoft Exchange oder Windows 2000 Active Directory.

    3. <b>NDS</b>: Kommunikation mit einem Novell Directory Service

    4. <b>NWCOMPAT</b>: Kommunikation mit einem Novell Server (Bindery von Novell Netware 3.xx

    Comment


    • #3
      Hallo Andreas,<p>
      vielen Dank für die schnelle Antwort. Wenn ich das jetzt richtig verstanden habe, ist also ADSI die Basis, auf der ADO oder LDAP aufsetzen, ich kann aber auch direkt mit ADSI arbeiten. Kann man das so sagen?<br>
      Welche Vorteile bieten mir nun ADO oder LDAP? Ist es einfacher (so ähnlich wie ADOexpress und native ADO)? Was verwende ich am besten für den Zugriff aufs AD? (Ich benötige nur den Zugriff auf die User-Objekte im AD.)<p>
      Grüße, Reimun

      Comment


      • #4
        Hallo,

        &gt;.. nur Zugriff auf die User-Objekte im AD.

        in diesem Fall ist man mit dem direkten Hantieren mit ADSI besser bedient. Das folgende Beispiel zeigt, wie Benutzer ausgelesen bzw. ein neues Benutzerkonto angelegt werden können:
        <pre>
        { ************************************************** *******************
        Autor : Andreas Kosch
        Compiler : Delphi 5 UpdatePack#1
        Betriebssystem : Windows 2000
        Datum : 11.08.2000
        Beschreibung : ADSI mit Delphi 5: Benutzer auslesen/anlegen
        ************************************************** ******************** }

        unit ADSI_5Frm;

        interface

        uses
        Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
        StdCtrls, ComCtrls, ActiveDS_TLB;

        type
        TForm1 = class(TForm)
        StatusBar1: TStatusBar;
        GroupBox1: TGroupBox;
        EditObj: TEdit;
        ButtonConnect: TButton;
        GroupBox2: TGroupBox;
        ListBoxUser: TListBox;
        ButtonRefresh: TButton;
        ButtonAddUser: TButton;
        EditNewUser: TEdit;
        procedure ButtonConnectClick(Sender: TObject);
        procedure ButtonRefreshClick(Sender: TObject);
        procedure ButtonAddUserClick(Sender: TObject);
        private
        { Private-Deklarationen }
        FADSCont : IADsContainer;
        public
        { Public-Deklarationen }
        end;

        var
        Form1: TForm1;

        implementation

        {$R *.DFM}

        uses ComObj, ActiveX;

        // ADSI-Hilfsfunktion als Ersatz für die VBScript-Funktion GetObject
        function ADsGetObject(lpszPathName: PWideChar;
        const riid: TIID;
        out obj): HResult; stdcall; external 'activeds.dll';

        procedure TForm1.ButtonConnectClick(Sender: TObject);
        var
        swObj : WideString;
        begin
        swObj := EditObj.Text;
        OleCheck(ADsGetObject(PWideChar(swObj), IID_IADsContainer, FADSCont));
        StatusBar1.SimpleText := 'ADsGetObject war erfolgreich.';
        ButtonRefresh.Enabled := True;
        ButtonAddUser.Enabled := True;
        end;

        procedure TForm1.ButtonRefreshClick(Sender: TObject);
        var
        sUser : String;
        aEnum : IEnumVariant;
        vObj : OLEVariant;
        aADs : IAds;
        aADSUser : IADsUser;
        iCelt : LongWord;
        begin
        ListBoxUser.Items.Clear;
        aEnum := FADSCont._NewEnum as IEnumVariant;
        while (aEnum.Next(1, vObj, iCelt) = S_OK) do
        begin
        aADs := IUnknown(vObj) as IAds;
        if aADs.Class_ = 'User' then
        begin
        aADSUser := aADs as IAdsUser;
        sUser := Format('%s (%s)', [aADSUser.Name + Chr(9),
        aADSUser.Description]);
        ListBoxUser.Items.Add(sUser);
        end;
        end;
        end;

        procedure TForm1.ButtonAddUserClick(Sender: TObject);
        var
        swNewUserName : WideString;
        swDescription : WideString;
        aADSUser : IADsUser;
        begin
        swNewUserName := EditNewUser.Text;
        swDescription := 'Benutzer wurde von ADSI_5.EXE anlegt.';
        aADSUser := FADSCont.Create('user', swNewUserName) as IADsUser;
        aADSUser.Set_Description(swDescription);
        aADSUser.SetInfo;
        ButtonRefreshClick(self);
        end;

        end.
        </pre>

        &gt;Welche Vorteile bieten mir nun ADO ...

        Mit ADO kann man eine SELECT-Abfrage auf das AD loslassen, während man mit ADSI das Objektmodell von ADSI abfrage muss. In meinem Beispiel oben musste ich <b>IEnumVariant</b> nutzen, um alle Benutzer zu ermittln. Mit ADO wäre das eine normale SELECT-Abfrage geworden. Sobald aber Schreibzugriffe auf das AD ins Spiel kommen, ist ADSI wieder im Vorteil.
        &#10

        Comment


        • #5
          Hallo Andreas,<p>
          danke für die Erklärung. Da ich gelesen hab, daß ADSI sprachunabhängig arbeitet und wir hier ein Buch über VB-Script haben, indem es unter vielem anderen auch um ADSI geht, hoffe ich, mit Deinem Beispiel und diesem Buch mich in ADSI einarbeiten zu können. Nochmals danke.<p>
          Grüße, Reimun

          Comment


          • #6
            Habe das obige Beispiel einmal ausprobiert, da ich eine Möglichkeit suche ILS-Server auszulesen und einen Eintrag vorzunehmen. Diese Werden ja auch über LDAP angesprochen. Doch leider bekomme ich sofort eine Fehlermeldung, noch bevor der Connect überhaupt gestartet wird.
            Die Fehlermeldung lautet:
            Es ist Exception der Klasse EOleSysError aufgetreten.Meldung ungültige Syntax.
            2. Frage kann man mit diesem Beispiel, wenn es denn funktioniert auch Server im Internet abfragen,oder nur Lokal bzw. im Lan.
            Habe mir nun das Buch COM DCOM Com+ bestellt, welches wohl heute ankommt, hoffe darin etwas in dieser Hinsicht zu finden

            Comment


            • #7
              Hallo,

              ich habe die ActiveDS_TLB.dcu nicht oder ist es eine pas? Wo bekomme ich die her?

              -Joh

              Comment

              Working...
              X