Distributed Query

由于 ADSI 是 OLE DB 提供程序,因此它可参与 Microsoft SQL Server 7.0 中引入的分布式查询。 可能会出现以下场景:

  • 将 Active Directory 对象与 SQL Server 数据联接。
  • 从 Active Directory 对象更新 SQL 数据。
  • 创建与其他 OLE DB 提供程序的三向或四向联接。 例如,Index Server、SQL Server 和 Active Directory。

OLE DB 提供程序支持两个命令方言 LDAP 和 SQL 来访问目录服务并返回表格形式的结果,而这些结果可使用 SQL Server 分布式查询进行查询。

若要启动 SQL 查询分析器

  1. 首先,在链接到目录服务的 SQL Server 上打开 SQL 查询分析器(请参阅“创建链接服务器”)。
  2. 运行 SQL 查询分析器(开始 | 程序 | Microsoft SQL Server 7.0)
  3. 登录到 SQL Server 计算机。
  4. 在查询窗口的“编辑器”窗格中输入 SQL 查询。
  5. 按 F5 以执行该查询。

以下各节提供了更多详细信息:

创建链接服务器

若要对 Windows 2000 Server 目录服务设置分布式联接,请创建链接服务器。 为此,请使用 sp_addlinkedserver 系统存储过程来设置 ADSI 映射。 此过程会将某一名称链接到 OLE DB 提供程序名称。

在以下示例中,请注意 sp_addlinkedserver 系统存储过程使用了多个参数:

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

EXEC 命令可用于执行系统存储过程。

EXEC sp_addlinkedserver 'ADSI', 'Active Directory Services 2.5', 
'ADSDSOObject', 'adsdatasource'
GO

对于经过 Windows 身份验证的登录名,自映射足以使用 SQL Server 安全委派来访问此目录。 由于默认会为通过 sp_addlinkedserver 创建的链接服务器创建自映射,因此无需进行其他登录映射。

对于经过 SQL Server 身份验证的登录名,可使用 sp_addlinkedsrvlogin 系统存储过程来配置适当的登录名和密码以连接到目录服务。

注意

请尽可能使用 Windows 身份验证。

 

创建经过身份验证的 SQL Server 登录名

如果更希望使用经过 SQL Server 身份验证的登录名而不是 Windows 身份验证,则请将登录名添加到链接服务器(请参阅上一节)。 为此,请使用 sp_addlinkedsrvlogin 系统存储过程。

在以下示例中,有多个参数会与 sp_addlinkedsrvlogin 系统存储过程一起使用:

  • “ADSI”为 rmtsvrname 参数,而它将作为上一示例中所创建链接服务器的名称。
  • “Fabrikam\Administrator”为 locallogin 参数,而它将作为本地服务器上的登录名,且可为 SQL Server 登录名或 Windows NT 用户。
  • “CN=Administrator,OU=Sales,DC=activeds,DC=Fabrikam,DC=com”为 rmtuser 参数,而它将作为用于连接的用户名,因为 useselffalse
  • “secret**2000”为 rmtpassword,而它是与 rmtuser 关联的密码。

EXEC 命令可用于执行系统存储过程。

EXEC sp_addlinkedsrvlogin 'ADSI', false, 'Fabrikam\Administrator', 
'CN=Administrator,OU=Sales,DC=activeds,DC=Fabrikam,DC=com', 'secret**2000'

查询目录服务

创建链接服务器后,使用 OPENQUERY 语句将查询发送到目录服务。 以下 SQL 查询使用 CREATE VIEW 语句来创建一个虚拟表,以便保存查询结果。 创建的视图名为“viewADContacts”。

第一个 SELECT 语句定义了从目录服务查询到的信息,并将其映射到表中的某一列。 括号内的信息表示放入虚拟表中的数据。 括号外的信息表示从目录服务检索到的数据。 请注意,从目录服务检索到的信息必须用其 LDAP 显示名称来引用。

下一个语句为 OPENQUERY 语句。 该语句有两个参数:ADSI(所创建链接服务器的名称)以及一个查询语句。 该查询语句包含以下项目:

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

最后一个 SELECT 语句可用于从视图中选取结果以进行显示。

CREATE VIEW viewADContacts
AS
SELECT  [Name], sn [Last Name], street [Street], l [City], st [State]
FROM OPENQUERY( ADSI, 
     'SELECT name, sn, street, l, st
      FROM 'LDAP:// OU=Sales,DC=activeds,DC=Fabrikam,DC=Com'
      WHERE objectCategory='Person' AND 
      objectClass = 'contact'')
GO
SELECT * FROM viewADContacts