Classic ASP:LDAP查询与列别名设置
在LDAP(ADSI SQL)查询中设置属性别名?
好问题!在你用ADODB连接Active Directory的场景里,没办法像标准SQL那样直接用AS给LDAP属性设置别名——这正是你的代码执行失败的核心原因。
为什么不行?
你在这里写的CommandText用的是ADSI SQL(Active Directory Service Interfaces SQL),它是一种适配LDAP的SQL方言,但它并不支持标准SQL里的列别名语法。LDAP查询的本质是返回Active Directory对象的原生属性,ADSI SQL只是把LDAP查询包装成类似SQL的写法,并没有实现完整的SQL特性。
怎么实现类似别名的效果?
最靠谱的方式是先查询原始属性,再在ASP代码里手动映射别名,这样既简单又不会出错:
' 先修改查询语句,只返回需要的原生属性 objCom.CommandText ="select sAMAccountName, mail FROM 'GC://"+objADsPath+"' where sAMAccountname = '*"&searchTerm&"*' ORDER by sAMAccountname" ' 执行查询并遍历记录集 Set objRS = objCom.Execute Do While Not objRS.EOF ' 手动将原生属性映射成你需要的别名 Dim id, label, value, userMail id = objRS("sAMAccountName") label = objRS("sAMAccountName") value = objRS("sAMAccountName") userMail = objRS("mail") ' 这里写你的后续处理逻辑,比如输出JSON或者其他操作 ' 比如:Response.Write("id: " & id & ", mail: " & userMail & "<br>") objRS.MoveNext Loop objRS.Close Set objRS = Nothing
额外提醒:防范注入风险
你的代码里直接把Request.QueryString("term")拼进查询语句,存在LDAP注入的风险。建议先对输入做转义处理:
Dim searchTerm searchTerm = Request.QueryString("term") ' 转义LDAP查询中的特殊字符 searchTerm = Replace(searchTerm, "*", "\*") searchTerm = Replace(searchTerm, "(", "\(") searchTerm = Replace(searchTerm, ")", "\)") searchTerm = Replace(searchTerm, "\", "\\")
然后再把转义后的searchTerm拼进查询语句里,避免恶意输入破坏查询或者泄露敏感数据。
内容的提问来源于stack exchange,提问作者pee2pee
相关产品推荐
相关产品推荐

