连接异构数据

典型的组织机构会在多个异构数据库中存储数据。 人力资源数据可存储在 SQL Server 中,而帐户管理数据则存储在目录中。 其他数据可能会以专有格式存储。

使用 SQL Server 7.0、ADSI 和 OLE DB 访问接口,可以将 Active Directory 中的数据与 SQL Server 中的数据连接起来,并创建连接数据的视图。

将 Active Directory 数据与 SQL Server 数据连接起来

  1. 运行 SQL 查询分析器(开始 | 程序 | Microsoft SQL Server 7.0)

  2. 登录到 SQL Server 计算机。

  3. 执行以下行(将其突出显示并按 Ctrl+E):

    EXEC sp_addlinkedserver 'ADSI', 'Active Directory Service Interfaces', 
    'ADSDSOObject', 'adsdatasource'
    GO
    

    在此行中,sp_addlinkedserver 系统存储过程的参数如下:

    • “ADSI”为 server 参数,它将作为此链接服务器的名称。
    • “Active Directory Services”为 srvproduct 参数,而它将作为要添加为链接服务器的 OLE DB 数据源的名称。
    • “ADSDSOObject”是 provider_name 参数,表示你正在使用 OLE DB 提供程序。
    • “adsdatasource”为 data_source 参数,而它将作为 OLE DB 提供程序解释的数据源的名称。

    现在可以使用链接的服务器从 SQL Server 访问 Active Directory。

  4. 下一个示例使用 OPENQUERY 语句执行查询。 该语句有两个参数:ADSI,即刚创建的链接服务器的名称,以及一条查询语句。 该查询语句包含以下项目:

    • SELECT 语句包含将从目录服务获取的数据列表。 需使用 LDAP 显示名称来指示要搜索的数据。
    • FROM 语句包含从中获取此信息的链接目录服务器的名称。
    • WHERE 语句将提供搜索条件。 在此示例中,它正在搜索用户。

    键入并执行:

    SELECT * FROM OPENQUERY( ADSI, 
        'SELECT name, adsPath 
         FROM 'LDAP://DC=Fabrikam,DC=com' 
         WHERE objectCategory = 'Person' AND objectClass= 'user'')
    

    还可以使用 ADSI LDAP 方言。 例如:

    SELECT * FROM OPENQUERY(ADSI,
        '<LDAP://DC=Fabrikam,DC=COM>;(&(objectCategory=Person)(objectClass=user));name, adspath;subtree')
    

    在前面的示例中,LDAP 查询包括四个部分:

    • “<LDAP://DC=Fabrikam,DC=COM>”是要搜索的目录服务器的可分辨名称。
    • “(&(objectCategory=Person)(objectClass=user))”是 LDAP 搜索过滤器(请参阅搜索过滤器语法)。
    • “name, adspath”是要检索的属性名称(使用 LDAP 显示名称格式)。
    • “subtree”表示搜索的范围

创建并执行视图