使用SQL Server 2005通过LDAP访问Active Directory角色成员身份

时间:2010-04-28 12:51:48

标签: sql-server sql-server-2005 active-directory ldap linked-server

我想获得一个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”获取该行的数据。由于符号不匹配或溢出以外的原因,无法转换数据值。

1 个答案:

答案 0 :(得分:0)

看起来这是一个无法直接克服的限制: - TSQL: How to get a list of groups that a user belongs to in Active Directory。 OpenQuery无法处理多值属性。

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