Как ConnectionString используется при подключении к AD с помощью ADsDSOObject? - PullRequest
1 голос
/ 04 октября 2011

Я недавно взял некоторый код Delphi (это Delphi 5, но я не думаю, что это важно), который запрашивает AD с использованием LDAP.Код довольно запутанный, потому что он содержит как ConnectionString, так и непосредственно установленные свойства.Там есть программа установки, в которую вводится ряд параметров AD.Какие части кода актуальны, а какие можно вырезать?Мне особенно интересно, есть ли в программе установки ненужные вопросы.

  • Можно ли упростить код?(т.е. имеет ли ConnectionString (или любой из содержащихся в ней параметров) какое-либо использование в этом коде?)
  • Data Source (задано как ADserver в программе установки) или Location (задано как ADlocation в программе установки)используется в вызове Open или Execute?

Я попытался удалить либо aADOconnection.provider:='ADsDSOObject';, либо ConnectionString, и вызов работает.Когда я удалил и код для настройки провайдера, и ConnectionString, вызов, конечно, не удался.Этот фрагмент кода предназначен для проверки соединения AD. Существует аналогичный (но более длинный) блок кода для запроса групп для пользователя.

Connecstr_S:='Provider=ADsDSOObject;Encrypt Password=False;Data Source='+
  Tsystem.programsettings.sADserver+';Location='+
  Tsystem.programsettings.sADlocation+';Mode=Read;Bind Flags=0;ADSI Flag=-2147483648';
aADOconnection:=TADOConnection.create(nil);
aADOcmd:=TADOCommand.create(nil);
aADOconnection.loginprompt:=false;
aADOconnection.commandtimeout:=30;
aADOconnection.connectoptions:=coConnectUnspecified;
aADOconnection.CursorLocation:=cluseclient;
aADOconnection.isolationlevel:=ilCursorStability;
aADOconnection.mode:=cmunknown;
aADOconnection.provider:='ADsDSOObject';
aADOcmd.commandtype:=cmdUnknown;
aADOcmd.Paramcheck:=false;
aADOcmd.commandtimeout:=30;
aADOcmd.Prepared:=false;
aADOconnection.ConnectionString:=Connecstr_S;
aADOcmd.Connection:=aADOconnection;
aADOconnection.open;
result:=true;
try
  SQL:='select displayname from '+quotedstr('LDAP://'+Tsystem.programsettings.sADbaseDN)+
    ' where  '+Tsystem.programsettings.sADuseridAttribute+'='+quotedstr('aaaaaaa');
  aADOcmd.CommandText:=SQL;
  t:=aADOcmd.Execute;
except
  On E:EOleException do result:=false;  //network connection probably missing
end;
aADOconnection.close;
aADOcmd.free;
aADOconnection.free;
...