使用T-SQL查询Active Directory

3

Have tried:

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''')

收到以下错误信息:
Msg 7321, Level 16, State 2, Line 1 在执行与联接服务器“ADSI”对应的OLE DB提供程序“ADsDSOObject”的查询“SELECT * FROM 'LDAP://DC=your_domain,DC=com'”之前,出现错误。
我已经确认了我的SQL Server服务域帐户和您的域帐户都有AD的读取权限,并且已选择ADsDSOObject提供程序上的“允许进程内”选项。
如果您有任何想法,请告诉我。

如果您在 SSMS 中导航到您的关联服务器,您可以右键单击并测试连接。这个方法可行吗? - David Rushton
是的,它能做到! - C-COOP
我认为那是针对@destination-data的 :) - Michael Armes
1
我认为问题在于 SELECT * 返回的数据与 SQL Server 不兼容。尝试将 OPENQUERY 中的 SELECT 子句限制为仅使用的字段。这里有一些方便的提示:http://www.rlmueller.net/SQLSyntax.htm。 - David Rushton
1个回答

0

我找到的每个示例都有LDAP://DC=your_domain,DC=com作为语法。对于我们的服务器(以及可能是其他人的),它是:LDAP://DC=your_domain,DC=internal

正如某人建议的那样,我使用了Softerra LDAP浏览器(免费)并打开了服务器,单击顶部节点,发现区分名称条目列为:DC=your_domain,DC=internal

一旦我进行了更改,我就可以看到AD数据。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接