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

Posted

技术标签:

【中文标题】使用 SQL Server 2005 通过 LDAP 访问 Active Directory 角色成员资格【英文标题】:Accessing Active Directory Role Membership through LDAP using SQL Server 2005 【发布时间】:2010-04-28 12:51:47 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

以上是关于使用 SQL Server 2005 通过 LDAP 访问 Active Directory 角色成员资格的主要内容,如果未能解决你的问题,请参考以下文章

通过 Web 服务将 SQL Server CE 与 SQL Server 2005 同步

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

使用 OPENQUERY 语法通过链接服务器 (SQL Server 2005) 调用 MySQL 存储过程(带参数)的问题

Reporting Services SQL Server 2005 文件共享错误

sqsh SQL Server 2005 执行 *.sql 文件

通过 QT C++ 连接到 SQL server 2005