2013-01-14 56 views
1

是否可以像description,memberOf一样获取AD值的多值属性。如果我加入的memberOf运行简单,就是给了错误如何使用SQL从Active Directory中获取多值数据

select * 
FROM OPENQUERY(ADSI,'SELECT initials, samAccountName, displayName, distinguishedName, mail, memberOf FROM ''LDAP://DC=corp, DC=contoso, DC=com'' WHERE objectClass=''Person''') 

错误:

Msg 7346, Level 16, State 2, Line 1
Cannot get the data of the row from the OLE DB provider "ADSDSOObject" for linked server "ADSI". Could not convert the data value due to reasons other than sign mismatch or overflow.

这是因为的memberOf是在Active Directory中的多值属性。我正在使用SQL Server 2008 R2

回答

3

不,你不能这样做 - 并且没有任何“窍门”或破解来让它工作。

SQL Server的ADSI提供程序相当有限 - 不支持多值属性是其中的一个限制。

所以你需要找到另一种方法来做到这一点,例如,通过使用SQl-CLR集成并通过.NET访问Active Directory或者通过例如将您需要的数据作为从SQL Server使用的Web服务公开。

0

虽然您不能使用ADSI返回的memberOf你可以查询的memberOf所以如果你有要核对你可以做下面的一组,其中extenstionAttribute3是雇员ID:

SELECT displayName 
FROM OPENQUERY(ADSI, 
'SELECT displayName 
FROM ''LDAP://DC=company,DC=com'' 
WHERE memberof = ''CN=staff,OU=SharepointGroups,DC=company,DC=com'' 
AND extensionAttribute3 = ''12345678'' 
') 

如果返回值不为null,那么你可以假设用户是组的一部分。

相关问题