使用链接服务器名称标识数据源

定义链接服务器后,若要引用该链接服务器中的数据对象,可以在 Transact-SQL 语句中使用由四个部分组成的名称,格式为 linked_server_name**.catalog.**schema.object_name 。这四部分定义为:

  • linked_server_name
    引用 OLE DB 数据源的链接服务器。

  • catalog
    包含对象的 OLE DB 数据源中的目录。

  • schema
    包含对象的目录中的架构。

  • object_name
    架构中的数据对象。

例如,以下查询引用链接服务器 SEATTLESales 上 AdventureWorks2008R2 数据库中的 Production.Product 和 Sales.SalesOrderDetails 表:

SELECT p.Name, sod.SalesOrderID

FROM SEATTLESales.AdventureWorks2008R2.Production.Product p

INNER JOIN SEATTLESales.AdventureWorks2008R2.Sales.SalesOrderDetail sod

ON p.ProductID = sod.ProductID

ORDER BY p.Name ;

SQL Server 使用 linked_server_name 标识 OLE DB 访问接口和数据源。将 catalog、schema 和 object_name 参数传递到 OLE DB 访问接口可标识特定数据对象。链接服务器为 SQL Server 实例时,catalog 为数据库,schema 为架构。

在早期版本的 SQL Server 中,架构是对象的所有者。在 SQL Server 中,架构独立于创建它们的数据库用户而存在。有关 SQL Server 中架构的详细信息,请参阅用户架构分离

使用链接服务器中的对象时,应始终使用完全限定名称。不支持隐式解析链接服务器中的表的 dbo 所有者名称。因此,即使链接服务器是 SQL Server 的另一个实例,没有架构名称的查询也会生成 7313 错误。

系统管理员通过使用 sp_addlinkedsrvlogin 系统存储过程设置登录映射可以控制能够访问特定链接服务器的人员。使用存储过程可以为特定本地登录设置远程登录和密码。使用存储过程还可以为 Windows 验证登录设置“自身”映射。

安全说明安全说明

当连接其他数据源时,SQL Server 将模拟适用于 Windows 身份验证登录帐户的登录名;但是,SQL Server 不能模拟 SQL Server 身份验证登录帐户。因此,对于 SQL Server 验证登录,SQL Server 可以通过使用运行 SQL Server 服务的 Windows 帐户的安全上下文来访问其他数据源,例如文件或非关系数据源(如 Active Directory)。对于此类登录帐户没有权限但运行 SQL Server 服务的帐户却拥有权限的其他数据源,这样做可能会授予此类登录帐户访问该数据源的权限。当使用 sp_addlinkedsrvlogin 向经过 SQL Server 身份验证的登录帐户授予针对链接服务器的权限时,应考虑这种可能性。