使用 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 文件共享错误