我想获得一个Active Directory用户列表以及他们使用SQL Server 2005链接服务器的安全组。我有查询工作来检索记录,但我不知道如何访问memberOf属性(它是一个多值LDAP属性)。
我暂时存储这些信息:
DROP TABLE #ADUSERGROUPS
CREATE TABLE #ADUSERGROUPS
(
sAMAccountName varchar(30),
UserGroup varchar(50)
)
每个组/用户关联应该是一行。
这是我的SELECT语句:
SELECT sAMAccountName,memberOf
FROM OpenQuery(ADSI, '<LDAP://hqdc04/DC=nt,DC=avs>;
(&(objectClass=User)(sAMAccountName=9695)(sn=*)(mail=*)(userAccountControl=512));
sAMAccountName,memberOf;subtree')
我收到此错误消息:
OLE DB错误跟踪[OLE / DB提供程序'ADSDSOObject'IRowset :: GetData返回0x40eda:从提供程序返回的数据状态:[COLUMN_NAME = memberOf STATUS = DBSTATUS_E_CANTCONVERTVALUE],[COLUMN_NAME = sAMAccountName STATUS = DBSTATUS_S_OK]]。 Msg 7346,Level 16,State 2,Line 2 无法从OLE DB提供程序“ADSDSOObject”获取该行的数据。由于符号不匹配或溢出以外的原因,无法转换数据值。
答案 0 :(得分:0)
看起来这是一个无法直接克服的限制: - TSQL: How to get a list of groups that a user belongs to in Active Directory。 OpenQuery无法处理多值属性。
我最终编写了一个.NET CLR作业来处理这个问题。