首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ADSI链接服务器:为什么我可以在VBA中查询AD,但不能作为链接服务器查询?

ADSI链接服务器:为什么我可以在VBA中查询AD,但不能作为链接服务器查询?
EN

Database Administration用户
提问于 2015-03-04 15:05:36
回答 1查看 3.3K关注 0票数 4

在我做了这么多的阅读和研究之后,这似乎是发表这个问题的最合乎逻辑的地方:

为什么可以使用VBA查询Active Directory,而不能使用Studio 2012中的链接服务器?

首先,我以前已经能够做到这一点,但是很多年前我使用了Server 2005。

下面是我正在尝试的查询:

代码语言:javascript
运行
复制
SELECT * FROM OpenQuery(
ADSI,
'SELECT displayName, title, department, employeeID, userAccountControl
FROM ''LDAP://dc=testdomain''
WHERE objectCategory = ''Person'' AND
      objectClass = ''user'' AND
      userAccountControl=512')

下面是我遇到的错误:

代码语言:javascript
运行
复制
Msg 7321, Level 16, State 2, Line 1
An error occured while preparing the query "SELECT displayName, title, department, employeeID, userAccountControl
            FROM 'LDAP://dc=testdomain'
            WHERE objectCategory = 'Person' AND
                  objectClass = 'user' AND
            userAccountControl=512" for execution against OLE DB provider "ADsDSOObject" for linked server "ADSI".

这个错误信息的问题是,它非常通用,似乎没有产生任何有用的东西。我所读到的一切似乎都是权限问题或查询的语法问题,我假设它在上下文中意味着我的SQL实例登录以及如何在链接服务器中设置安全性。下面的VBA代码可以工作,并且使用的查询非常相似,甚至连最简单的查询都无法在链接服务器中工作。我还可以访问我试图链接到的Active Directory,我在底部的VBA代码片段(仅供参考)证实了这一点。问题是,我相信我有足够的特权让这一切发挥作用。

但是,在不同的站点上提出的许多建议都涉及对SQL实例进行修改,这些修改对于长期的影响还不是很清楚,因为这个服务器还在构建中。我有临时提升的特权来建立它。

下面是我设置链接服务器的详细信息和参数:

代码语言:javascript
运行
复制
SQL Server 11.0.5058
Linked Server: ADSI
Provider: OLE DB Provider for Microsoft Directory Services
Product name: Active Directory Services 2.5
Data source: adsdatasource
Provider string: ADsDSOObject

Be made using the login's current security context

Ole DB Provider  Options:
Allow in process

但是,我发现唯一可能与所有其他博客不同的是,当我试图深入到链接服务器表并查看(Server Objects > linked > ADSI > this > default > Tables)时。一旦我单击来展开表级别,就会得到以下错误:

代码语言:javascript
运行
复制
Failed to retreive data for this request. (Microsoft.SqlServer.Management.Sdk.Sfc)

Additional information:
    An exception occured while executing a Transact-SQL statement or batch.
    (Microsoft.SqlServer.ConnectionInfo)
        Cannot obtain the required interface ("IID_IDBSchemaRowset") from OLE DB provider "ADsDSOObject"
        for linked server "ADSI". (Microsoft SQL Server, Error: 7301)

这个IID_IDBSchemaRowset似乎是我唯一的线索,但它看起来像是一个深而黑暗的兔子洞,我不知道这是不是我需要去的地方。帮助!

供参考

代码语言:javascript
运行
复制
'References: Microsoft ActiveX Data Objects 2.8 Library
Public Sub testADSI()
    On Error Resume Next

    Dim cn As ADODB.Connection
    Dim cmd As ADODB.Command
    Dim rs as ADODB.Recordset
    Dim MySql as String
    Dim n as Integer

    Set cn = New ADODB.Connection
    Set cmd = New ADODB.Command
    Set rs = New ADODB.Recordset

    cn.Provider = "ADsDSOObject"
    cn.Open "Active Directory Provider"

    Set cmd.ActiveConnection = cn

    cmd.Properties("Page Size")= 1000

    MySql = "SELECT displayName, title, department, employeedID, userAccountControl " & _
            "FROM 'LDAP://dc=testdomain' " _ &
            "WHERE objectCategory = 'Person' AND " & _
                  "objectClass = 'user' AND " & _
                  "userAccountControl=512" 

    rs.Open MySql, cn, 1

    If rs.RecordCount > 0 Then
        MsgBox "Sucess! " & rs.RecordCount & " records found!"
    Else
        MsgBox "No records"
    End IF
End Sub
EN

回答 1

Database Administration用户

发布于 2015-09-15 18:59:34

您应该能够在不需要链接服务器的情况下查询。根据我的经验,使LDAP://字符串准确正确是关键。

我能够成功地从SQL Server 2012中对我们的Active基础设施运行您的查询:

代码语言:javascript
运行
复制
SELECT * FROM OPENROWSET
    (
        'ADSDSOObject'
        , 'adsdatasource'
        , 'SELECT displayName, title, department, employeeID, userAccountControl
FROM ''LDAP://DC=some,DC=name,DC=here''
WHERE objectCategory = ''Person'' 
    AND objectClass = ''user'' 
    AND userAccountControl=512'
);

DC=some,DC=name,DC=here显然需要修改以适应实际使用中的域名。

例如,如果您的域名是microsoft.com,您可以使用:

代码语言:javascript
运行
复制
DC=microsoft,DC=com

注意,在这种情况下,只有两个组件。如果您的域名只是“取消”,您将使用:

代码语言:javascript
运行
复制
DC=cancorso

希望这能帮上忙。

票数 3
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/94389

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档