SQLServer LinkServer 链接服务器

本文详细介绍了SQL Server的链接服务器(Linked Server),包括其作用、组件、安全性以及创建步骤。链接服务器允许跨实例访问数据,通过OLE DB访问接口与数据源交互。文章还讲解了安全性设置,如sp_addlinkedsrvlogin用于指定登录映射,并提供了创建链接服务器的Transact-SQL示例。最后,讨论了OpenQuery的用法,用于在分布式查询中执行操作。
摘要由CSDN通过智能技术生成
Linked Server简介

我们日常使用SQL Server数据库时,经常遇到需要在实例Instance01中跨实例访问Instance02中的数据。例如在做数据迁移时,如下语句:

insert into Instance01.DB01.dbo.Table01
   select * from Instance02.DB01.dbo.Table01

普通情况下,这样做是不允许的,因为SQL Server默认不可以跨实例访问数据。解决方案是使用存储过程sp_addlinkedserver进行实例注册。

1240

链接服务器让用户可以对 OLE DB 数据源进行分布式异类查询。在创建某一链接服务器后,可对该服务器运行分布式查询,并且查询可以联接来自多个数据源的表。如果链接服务器定义为 SQL Server 实例,则可执行远程存储过程。链接服务器具有以下优点:

  • 能够访问 SQL Server之外的数据。
  • 能够对企业内的异类数据源发出分布式查询、更新、命令和事务。
  • 能够以相似的方式确定不同的数据源。
Linked Server组件

链接服务器定义指定了下列对象:

  • OLE DB 访问接口
  • OLE DB 数据源

1240

“OLE DB 访问接口” 是管理特定数据源并与其交互的 DLL。 “OLE DB 数据源” 标识可通过 OLE DB 访问的特定数据库。 虽然通过链接服务器定义查询的数据源通常是数据库,但 OLE DB 访问接口对各种文件和文件格式仍可用。 这些文件和文件格式包括文本文件、电子表格数据和全文内容搜索的结果。

Microsoft SQL Server本机客户端 OLE DB 访问接口 (PROGID: SQLNCLI11) 是 SQL Server 的正式 OLE DB 访问接口。

通常,链接服务器用于处理分布式查询。 当客户端应用程序通过链接服务器执行分布式查询时, SQL Server 将分析命令并向 OLE DB 发送请求。 为使数据源能通过链接服务器返回数据,该数据源的 OLE DB 访问接口 (DLL) 必须与 SQL Server 的实例位于同一服务器上

Linked Server的安全性

当用户登录到本地服务器并执行分布式查询,以访问链接服务器上的表时,本地服务器必须登录链接服务器上,代表该用户访问该表。使用存储过程sp_addlinkedsrvlogin来指定本地服务器用于登录链接服务器的登录凭据。
例如,使用远程密码 8r4li034j7$ 为链接服务器 S1 建立了一个从本地登录名 U1 到远程登录名 U2 的映射(如在SQL Server中使用sa账户登录到远程oracle服务器的sys账户)。在本地登录名 U1 执行访问链接服务器 S1 中存储的表的分布式查询时,如果 SQL Server 连接到链接服务器 S1,则将 U2 和 8r4li034j7$ 分别作为用户 ID 和密码进行传递。
本地服务器上的所有登录和链接服务器上的远程登录之间的默认映射通过执行 sp_addlinkedserver 自动创建。默认映射表示,当代表本地登录连接到链接服务器时,SQL Server 使用本地登录的用户凭据。这相当于在链接服务器的 @useself 设置为 true 的情况下执行 sp_addlinkedsrvlogin,无需指定本地用户名。
创建或更新 SQL Server 本地实例上的登录名与远程服务器中安全帐户之间的映射语法如下:

sp_addlinkedsrvlogin [ @rmtsrvname = ] 'rmtsrvname' 
     [ , [ @useself = ] 'TRUE' | 'FALSE' | NULL ] 
     [ , [ @locallogin = ] 'locallogin' ] 
     [ , [ @rmtuser = ] 'rmtuser' ] 
     [ , [ @rmtpassword = ] 'rmtpassword' ]
  • @rmtsrvname:应用登录映射的链接服务器的名称。
  • @useself:确定是否通过模拟本地登录名或显式提交登录名和密码来连接到 rmtsrvname。默认值为 TRUE。
    值为 TRUE 指定登录名使用其自己的凭据来连接到rmtsrvname,rmtuser和rmtpassword自变量被忽略。 FALSE指定rmtuser和rmtpassword参数用于连接到rmtsrvname。 如果rmtuser和rmtpassword也是设置为 NULL,任何登录名或密码用于连接到链接服务器。
  • @locallogin:指要本地哪个账户登录到远程服务器。如果不为 NULL, locallogin可以是一个SQL Server登录或 Windows NT用户。
  • @rmtuser:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值