由于 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 查询分析器
- 首先,在链接到目录服务的 SQL Server 上打开 SQL Query Analyzer(请参阅创建链接服务器)。
- 运行 SQL 查询分析器(启动 |程序 |Microsoft SQL Server 7.0)
- 登录到 SQL Server 计算机。
- 在查询窗口的“编辑器”窗格中输入 SQL 查询。
- 按 F5 执行查询。
以下部分提供了更多详细信息:
创建链接服务器
若要在 Windows 2000 Server 目录服务上设置分布式联接,请创建链接服务器。 为此,请使用 sp_addlinkedserver 系统存储过程设置 ADSI 映射。 此过程将名称链接到 OLE DB 提供程序名称。
在以下示例中,请注意,sp_addlinkedserver 系统存储过程使用了多个参数:
- “ADSI”是 服务器 参数,将是此链接服务器的名称。
- “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 参数,这是用于连接的用户名,因为 自己false。
- “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