Delphi. Коннект к домену и выполнение запросов.
08.09.2016В этой статье приведен пример установки соединения с 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;
Вот собственно и все. Удачи.