Delphi. Коннект к домену и выполнение запросов.

08.09.2016 автор: deface

В этой статье приведен пример установки соединения с Active Directory из среды Delphi встроенными в среду разработки средствами и выполнение запроса с получением информации о зарегистрированных пользователях.

1.   Коннект к домену.

Соединение с доменом выполним через стандартный компонент ADOConnection, со следующими параметрами:

object ADOConnection1: TADOConnection
ConnectionString = 'Provider=ADsDSOObject;Encrypt Password=False;Mode=Read;Bind Flag' + 's=0;ADSI Flag=-2147483648;'
LoginPrompt = False
Mode = cmRead
Provider = 'ADsDSOObject'

Сильно не углубляясь в параметры настройки, скажу, что  ConnectionString можно сформировать воспользовавшись вызываемым диалогом. В моем случае ConnectionString получился таким.

2.  Выполнение запроса к домену.

Active Directory по сути своей является базой данных и следовательно позволяет выполнять запросы к нему как к обычной БД. Запрос к LDAP выполняем следующим образом:

begin
adoconnection1.Connected:=true;
adoquery1.Close;
adoquery1.SQL.Clear;
with adoquery1 do
begin
SQL.Add('select company,title,mail,sAMAccountName , Name,l,telephoneNumber  from ''LDAP:// имя_домена'' ');
SQL.Add(' where company=''ДИ-от''  or company=''ДИ-п''  and objectCategory =''person'' ');
SQL.Add(' order by company ');
open;

ADOQuery1.First;    // начало обхода полученных значений
for i:=0 to ADOQuery1.RecordCount-1 do
begin
userlogin:=adoquery1.FieldByName('sAMAccountName').AsString; // логин пользователя в AD
org:=adoquery1.FieldByName('company').AsString;     //  предприятие/компания пользователя, как записано в домене
dol:=adoquery1.FieldByName('title').AsString;              // должность пользователя
fio:=adoquery1.FieldByName('name').AsString;           // ФИО пользователя
poch:=adoquery1.FieldByName('mail').AsString;         // адрес электронной почты пользователя
gor:=adoquery1.FieldByName('l').AsString;                 // город, как записано в домене
tel:=adoquery1.FieldByName('telephoneNumber').AsString;  // номер телефона пользователя

{ здесь можно что-то делать с полученными данными }

ADOQuery1.Next;  // конец обхода полученных значений
end;    

Вот собственно и все. Удачи.

Оставить комментарий