使用 T-SQL 查询 Active Directory
Posted
技术标签:
【中文标题】使用 T-SQL 查询 Active Directory【英文标题】:Querying Active Directory with T-SQL 【发布时间】:2016-12-08 16:03:11 【问题描述】:试过了:
EXEC master.dbo.sp_addlinkedserver
@server = N'ADSI',
@srvproduct=N'Active Directory Services',
@provider=N'ADsDSOObject',
@datasrc=N'server_name.your_domain.com'
EXEC master.dbo.sp_addlinkedsrvlogin
@rmtsrvname=N'ADSI',
@useself=N'False',
@locallogin=NULL,
@rmtuser=N'your_domain\domain_user',
@rmtpassword='********'
SELECT *
FROM OPENQUERY (ADSI, 'SELECT *
FROM ''LDAP://DC=your_domain,DC=com''')
收到此错误:
消息 7321,第 16 级,状态 2,第 1 行 准备查询“SELECT * FROM 'LDAP://DC=your_domain,DC=com'”以针对链接服务器“ADSI”的 OLE DB 提供程序“ADsDSOObject”执行时出错。
我已经确认我的和 SQL Server 服务域帐户具有对 AD 的读取权限,并且选择了 ADsDSOObject 提供程序上的“允许进程内”。
任何想法将不胜感激。
【问题讨论】:
如果您导航到您的链接服务器是 SSMS,您可以右键单击并测试连接。这行得通吗? @Meghan Armes 是的! 我认为那是为了@destination-data :) 我认为问题是SELECT *
返回的数据与 SQL Server 不兼容。尝试将 OPENQUERY 中的 SELECT 子句限制为您正在使用的字段。有一些方便的提示here。
【参考方案1】:
我能找到的每个示例都有:LDAP://DC=your_domain,DC=com 作为语法。对于我们的服务器(可能还有其他服务器)来说,它是:LDAP://DC=your_domain,DC=internal
根据某人的建议,我使用 Softerra LDAP 浏览器(免费)并打开服务器,单击顶部节点,发现可分辨名称条目列为:DC=your_domain,DC=internal
一旦我进行了更改,我就可以看到 AD 数据。
【讨论】:
以上是关于使用 T-SQL 查询 Active Directory的主要内容,如果未能解决你的问题,请参考以下文章