如何使用 SQL 从 Active Directory 获取多值数据

Abd*_*eed 3 sql-server active-directory sql-server-2008-r2

是否可以从 AD 中获取多值属性,例如 description、memberOf。如果我只是通过添加 memberOf 运行这会出错

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

错误:

消息 7346,级别 16,状态 2,第 1
行无法从链接服务器“ADSI”的 OLE DB 提供程序“ADSDSOObject”获取行的数据。由于符号不匹配或溢出以外的原因,无法转换数据值。

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

mar*_*c_s 5

不,你不能这样做 - 也没有“技巧”或黑客可以让它工作。

SQL Server 的 ADSI 提供程序相当有限——不支持多值属性是这些限制之一。

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