【发布时间】:2013-09-19 11:37:23
【问题描述】:
我有这个 ADOQuery:
SQL.Text := 'SELECT samAccountName FROM ''GC://' + sADForestName + ''' ' +
'WHERE objectCategory=''user'' ' +
'AND distinguishedName=''' + sADUserName + ''' ' +
'AND memberOf=''' + sADGroupName + '''';
这可以很好地为用户获取组, 但我还需要使用 LDAP_MATCHING_RULE_IN_CHAIN 检查嵌套组:
SQL.Text := 'SELECT samAccountName FROM ''GC://' + sADForestName + ''' ' +
'WHERE objectCategory=''user'' ' +
'AND distinguishedName=''' + sADUserName + ''' ' +
'AND memberOf:1.2.840.113556.1.4.1941:=''' + sADGroupName + '''';
但是这个请求没有执行,调用 ADOQuery.Open 时出错; (翻译自俄语):“处理命令时出现一个或多个错误”
这是我的请求错误?
【问题讨论】:
-
可能的错误来源之一是 memberOf 附近的冒号,可以通过将 ParamCheck 设置为 false 来避免这种情况。
-
但在所有样本中我都看到:(memberOf:1.2.840.113556.1.4.1941:=cn=Group1,OU=groupsOU,DC=x)
-
@bummi 建议关闭 TADOQuery 的
ParamCheck属性,而不是更改您的 SQL。 Delphi 可能在想:1.2.... 是一个会破坏你的 SQL 的参数。关闭 ParamCheck 将停止这种事后猜测。其他语言的代码示例在 SQL 中处理冒号(:) 时可能没有相同的问题,因为它们倾向于使用其他字符来标记参数 -
现在明白了,但是使用 ParamCheck=False 我有同样的错误:(
-
@AlexEgorov:该链接显示了如何使用本机 LDAP 请求进行操作。这与您在这里尝试做的不同。
标签: delphi active-directory ldap-query