1

我想获取 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]]。消息 7346,级别 16,状态 2,第 2 行无法从 OLE DB 提供程序“ADSDSOObject”获取行的数据。由于符号不匹配或溢出以外的原因,无法转换数据值。

4

1 回答 1

0

看起来这是一个无法直接克服的限制: - TSQL:如何获取用户在 Active Directory 中所属的组列表。OpenQuery 无法处理多值属性。

我最终编写了一个 .NET CLR 作业来处理这个问题。

于 2010-04-28T13:14:02.643 回答