假設我有以下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