假设我有以下LDAP查询:LDAP查询与FILTER
Base DN: OU=Groups,DC=office,DC=domain,DC=org
Filter: (member:1.2.840.113556.1.4.1941:=CN=adam smith,OU=Users,DC=office,DC=domain,DC=org)
我如何执行它德尔福(2007年)下?使用ADO的例子似乎有SQL'ish语法,我现在不怎么转换它?
假设我有以下LDAP查询:LDAP查询与FILTER
Base DN: OU=Groups,DC=office,DC=domain,DC=org
Filter: (member:1.2.840.113556.1.4.1941:=CN=adam smith,OU=Users,DC=office,DC=domain,DC=org)
我如何执行它德尔福(2007年)下?使用ADO的例子似乎有SQL'ish语法,我现在不怎么转换它?
在Delphi中,你可以使用你的数据获取的方式有两种:
无论是 “SQL'ish” 语法,你形容 - 基本ADO访问Active Directory。如果你有SQL背景,这很容易,但在某些方面也受到限制(例如,你无法获得多值属性等)。您会在Richard Mueller的网站上找到一些Search Tips on ADO(AD编程MVP)
导入ActiveDs.tlb类型库并使用ADSI提供的COM接口(最值得注意的是IDirectorySearch
)进行搜索。这是一个相当混乱的COM接口,这可能就是最倾向于使用ADO搜索东西,这是更容易平易近人
遥想当年我还在编写德尔福,我做了很多的活动目录的东西,并提出了一些我的Delphi/AD提示和一些示例代码onto my site。这不是在很长一段时间被更新,虽然:-(但ADSISearch组件可能是你的兴趣(和其他Delphites)
更新:你可以试试这个“SQL十岁上下的”语句在TADOCommand?
SELECT sAMAccountName, displayName
FROM 'LDAP://OU=Groups,DC=office,DC=domain,DC=org'
WHERE objectCategory='group'
AND member:1.2.840.113556.1.4.1941:=(CN=adam smith,OU=Users,DC=office,DC=domain,DC=org)
Desicion您的问题!
var ADOConnection, ADOCmd, Res: Variant;
ADOConnection := CreateOleObject('ADODB.Connection');
ADOCmd := CreateOleObject('ADODB.Command');
try
ADOConnection.Provider := 'ADsDSOObject';
ADOConnection.Open('Active Directory Provider');
ADOCmd.ActiveConnection := ADOConnection;
ADOCmd.Properties('Page Size') := 100;
ADOCmd.Properties('Timeout') := 30;
ADOCmd.Properties('Cache Results') := False;
sBase := '<GC://' + sADForestName+ '>';
sFilter := '(&(objectCategory=person)(objectClass=user)' +
'(distinguishedName=' + sADUserName + ')' +
'(memberOf:1.2.840.113556.1.4.1941:=' + sADGroupName + '))';
sAttributes := 'sAMAccountName';
ADOCmd.CommandText := sBase + ';' + sFilter + ';' + sAttributes + ';subtree';
Res := AdoCmd.Execute;
if Res.EOF then User := ''
else User := Res.Fields[0].Value;
finally
ADOCmd := NULL;
ADOConnection.Close;
ADOConnection := NULL;
end;
谢谢您的repy我真的需要只运行一个查询(我上面贴的那个)如果有人能够重新写。以便我可以使用它TADOCommand ...? – marian12 2010-01-20 08:21:11
是的,但1.2.840.113556.1.4.1941(LDAP_MATCHING_RULE_IN_CHAIN)给了我所有用户所属的组(不仅来自memberof) - 当组是其他grous的成员时发生 - 我需要它们ALL。 – marian12 2010-01-20 08:41:01