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;
Вот собственно и все. Удачи.