Distributed1:链接服务器
链接服务器(Linked Server)允许访问针对OLE DB数据源的分布式异构查询, 通过使用sys.sp_addlinkedserver创建链接服务器后,可以对此服务器运行分布式查询。 如果链接服务器被定义为SQL Server实例,则可以执行远程存储过程。
一,链接服务器
使用 sys.sp_addlinkedserver 添加链接服务器,除了必须在本地自定义一个链接服务器的别名(Alias)之外,还必须指定链接服务器的产品名称(Product Name)、提供程序名称(Provider Name)、数据源(Data Source)、提供程序字符串( Provider String)等参数,添加成功之后,系统自动创建一个默认登陆映射,用于访问链接服务器。
sp_addlinkedserver [ @server= ] 'server' [ , [ @srvproduct= ] 'product_name' ]
[ , [ @provider= ] 'provider_name' ]
[ , [ @datasrc= ] 'data_source' ]
[ , [ @location= ] 'location' ]
[ , [ @provstr= ] 'provider_string' ]
[ , [ @catalog= ] 'catalog' ]
参数解释:
- @server= 'server' :用于指定Linked Server的别名,没有默认值;
- @srvproduct='product_name' :用于指定OLE DB 数据源的产品名称,默认值是NULL;
- @provider= 'provider_name' :OLE DB提供程序的唯一编程标识符(PROGID),provider_name对于当前计算机上安装的指定OLE DB提供程序必须是唯一的。如果省略provider_name,则使用SQLNCLI。
- @datasrc= 'data_source':由OLE DB提供程序解释的数据源名称
- @provstr='provider_string':指定OLE DB提供程序的连接字符串,用于唯一标识一个数据源。当针对SQL Server Native Client OLE DB提供程序创建链接服务器时,可以使用SERVER关键字指定实例作为SERVER = servername \ instancename来指定特定的SQL Server实例。 servername是运行SQL Server的计算机的名称,instancename是用户将连接到的SQL Server的特定实例的名称。
1,OLEDB 提供程序
用户需要手动安装OLE DB提供程序,系统中已经安装的OLE DB提供程序可以从Linked Servers 目录下查看。

例如,添加SQL Server作为Linked Server,把参数@srvproduct 设置为 N'' :
exec sys.sp_addlinkedserver @server= N'ServerAlias'
,@srvproduct= N''
,@provider= N'SQLNCLI'
,@datasrc= N'Host\SQLServerInstanceName'
例如,添加Microsoft Access作为Linked Server,把参数 @srvproduct 设置为 N'OLE DB Provider for Jet':
EXEC sp_addlinkedserver
@server = N'SEATTLE Mktg',
@provider = N'Microsoft.Jet.OLEDB.4.0',
@srvproduct = N'OLE DB Provider for Jet',
@datasrc = N'C:\MSOffice\Access\Samples\Northwind.mdb';
例如,添加Excel作为Linked Server,把参数@srvproduct设置为'Jet 4.0',参数@provstr设置为'Excel 5.0':
EXEC sp_addlinkedserver
@server='ExcelSource',
@srvproduct='Jet 4.0',
@provider='Microsoft.Jet.OLEDB.4.0',
@datasrc='c:\MyData\DistExcl.xls',
@provstr='Excel 5.0';
2,查看添加的链接服务器
使用sys.servers查看添加到本地服务器的Linked Server,其中,server_id 是 0,代表本地服务器。
select *
from sys.servers
where name=N'ExcelDataSource'

二,链接服务器的登陆(Login)
当用户创建了一个链接服务器,SQL Server创建一个默认的登陆,映射到public服务器角色,这意味着,所有的登陆都可以查看该链接服务器。为了限制用户查看这些链接服务器,管理员需要移除默认的登陆映射。
1,创建链接服务器的登陆
当用户登陆到本地服务器执行访问链接服务器上的数据的分布式查询时,本地服务器必须代表该用户登陆到链接服务器,才能访问连接服务器上的数据,管理员通过使用sys.sp_addlinkedsrvlogin 指定本地服务器登陆到链接服务器的登陆账户。如果链接服务器是SQL Server,那么必须使用SQL Server验证模式登陆,不能使用Windows 验证的域账户登陆。
存储过程sys.sp_addlinkedsrvlogin用于创建或更新SQL Server本地实例上的登录和远程服务器上的安全帐户之间的映射。
sp_addlinkedsrvlogin [ @rmtsrvname = ] 'rmtsrvname'
[ , [ @useself = ] 'TRUE' | 'FALSE' | NULL ]
[ , [ @locallogin = ] 'locallogin' ]
[ , [ @rmtuser = ] 'rmtuser' ]
[ , [ @rmtpassword = ] 'rmtpassword' ]
参数解释:
- @rmtsrvname = 'rmtsrvname' :用于指定链接服务器的别名;
- @useself = 'TRUE' | 'FALSE' | 'NULL' :通过模拟本地登录或显式提交登录名和密码来确定是否连接到rmtsrvname,默认值是TRUE。默认情况下,Login使用自己的凭证链接rmtsrvname;如果设置为FALSE,意味着,使用参数 rmtuser和rmtpassword作为验证的用户名和密码去连接rmtsrvname;
- @locallogin = 'locallogin' :本地服务器的Login,默认值是NULL。默认情况下,使用本地Login连接rmtsrvname,如果该参数不是NULL,那么使用该参数指定的Login登陆rmtsrvname;
- @rmtuser = 'rmtuser' ,@rmtpassword = 'rmtpassword' :当参数@useself为FALSE时,使用@rmtuser和@rmtpassword去连接rmtsrvname。注意,rmtuser 是SQL Server登陆。
注意,执行存储过程sp_addlinkedserver会自动创建本地服务器上所有登录和链接服务器上远程登录之间的默认映射。默认映射指出,当代表登录名连接到链接服务器时,SQL Server使用本地登录名的用户凭据。 这相当于对链接服务器执行
exec sys.sp_addlinkedsrvlogin @rmtsrvname='remote server', @useself='TRUE'
使用sp_addlinkedsrvlogin只能更改默认映射或为特定的本地登录添加新映射。 要删除默认映射或任何其他映射,请使用sp_droplinkedsrvlogin。
2,添加链接服务器Login的示例
2.1 使用User自己的凭证去登陆Linked Server
这种方式要求显式将每个User Login mapping到Linked Server,使其有权限登录。
EXEC sp_addlinkedsrvlogin 'Accounts', 'true';
2.2 特定的用户使用特定的账户登陆链接服务器
把Windows域账户“Domain\Mary” 映射到 SQL Server验证的账户"MaryP",使其有权限登陆到Linked Server。
EXEC sp_addlinkedsrvlogin 'Accounts', 'false', 'Domain\Mary', 'MaryP', 'd89q3w4u';
2.3,所有的用户都使用相同的账户登陆链接服务器
设置参数@locallogin 为null,使所有本地Login都能使用 “MaryP” 来登陆Linked Server。
EXEC sp_addlinkedsrvlogin 'Accounts', 'false', null, 'MaryP', 'd89q3w4u';
3,查看链接服务器的Login
系统视图sys.linked_logins ,为每一个链接服务器Login映射返回一行数据:
- server_id:0是指本地服务器,大于0的整数值是指链接服务器的ID。
- local_principal_id:如果local_principal_id 不为0,其值是参数@locallogin对应的服务器级别的Principal,使用 sys.server_principals 查看该ID对应的主体;如果local_principal_id=0,表示@locallogin是NULL。
- uses_self_credential:1是指使用自己的凭证访问链接服务器;0是指使用相同的用户和密码访问链接服务器。
- remote_name:远程用户名,是指当登陆到链接服务器时 ,使用 remote_name 来登陆Linked Server,即登陆Linked Server的 Login。
4,删除链接服务器的Login
删除本地服务器和链接服务器上的登陆之间的映射,映射一旦删除,本地服务器上的Login就不能登陆到链接服务器。
sp_droplinkedsrvlogin [ @rmtsrvname= ] 'rmtsrvname' ,
[ @locallogin= ] 'locallogin'
参数解释:
@rmtsrvname = 'rmtsrvname':指定链接服务器的别名
@locallogin = 'locallogin' :指定本地的Login,
4.1 删除本地登陆 Mary访问链接服务器的映射:
EXEC sp_droplinkedsrvlogin 'remote server', 'Mary'
4.2 删除本地服务器访问链接服务器的默认登陆映射
EXEC sp_droplinkedsrvlogin 'remote server', null
参考文档:
sp_addlinkedserver (Transact-SQL)
sp_addlinkedsrvlogin (Transact-SQL)
Distributed1:链接服务器的更多相关文章
- SQL链接服务器
最近做项目,需要对两个数据库进行同步操作,所以采用在Server SQL中建立链接服务器方式实现. 链接服务器,可以直接访问/操作其他服务器上的数据库表. 1.连接SQL Server链接服务器 EX ...
- SQL Server 链接服务器的安全
一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 安全设置(Security Settings) 实现效果:用户A能看见能使用,B用户不能看见这 ...
- sqlserver 多库查询 sp_addlinkedserver使用方法(添加链接服务器)
sqlserver 多库查询 sp_addlinkedserver使用方法(添加链接服务器) 我们日常使用SQL Server数据库时,经常遇到需要在实例Instance01中跨实例访问Instanc ...
- Sqlserver通过链接服务器访问Oracle的那些事儿
前言: 1.不经历风雨,怎能见彩虹. 2.充分利用BaiDu.google等搜索引擎查找资料并整合分析! 3.世上无难事只怕有心人! 本文由来:笔者在研究SQLSERVER链接服务器到oracle并使 ...
- SQL SERVER使用ODBC 驱动建立的链接服务器调用存储过程时参数不能为NULL值
我们知道SQL SERVER建立链接服务器(Linked Server)可以选择的驱动程序非常多,最近发现使用ODBC 的 Microsoft OLE DB 驱动程序建立的链接服务器(Linked S ...
- SQL SERVER 2000通过链接服务器发送邮件出现错误
案例环境: 服务器A系统: Windows Server 2000 数据库版本 : Microsoft SQL Server 2000 - 8.00.2282 (Intel X86) 服务器B系统: ...
- [翻译]——SQL Server使用链接服务器的5个性能杀手
前言: 本文是对博客http://www.dbnewsfeed.com/2012/09/08/5-performance-killers-when-working-with-linked-server ...
- 没有活动事务 链接服务器的 OLE DB 访问接口 "SQLNCLI" 无法启动分布式事务
在windows2003下执行分布式事务的时候出现如下情况. 一. 问题现象在执行分布式事务时,在sql server 2005下收到如下错误: 链接服务器"xxxxxxx"的 O ...
- 使用sql server 链接服务器
在我们的日常应用场景中经常会碰访问不同服务器上的数据库,即跨服务器访问操作不同的服务器上的SQL Sever数据库, 这个时候Sql Server的链接服务器就非常实用,创建SQL语句如下: --重新 ...
随机推荐
- Celery学习---Celery 与django结合实现计划任务功能
项目的目录结构: 项目前提: 安装并启动Redis 安装Django和Celery的定时任务插件 安装方法一: pip直接安装[安装了pip的前提下] omc@omc-virtual-machine: ...
- 解决由于显卡驱动BUG导致桌面右键卡顿的问题:bat文件源码
@ ECHO OFF%1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe&q ...
- matlab用法总结
1. Matlab怎么判断空矩阵http://www.ilovematlab.cn/thread-48915-1-1.html a=[ ] if isempty(a) 2.matlab寻找多个最大值位 ...
- AT89S52之串行异步通信笔记
SRF 中断入口地址 中断源 外中断 外部中断0 INT0(P3.2) 外部中断1 INT1(P3.3) 电平方式触发 低电平 脉冲方式触发 脉冲后延的负跳 内中断 定时中断 串行中断 中断允许控制寄 ...
- Maven实战(十)利用 Nexus 来构建企业级 Maven 仓库
目录 一.简介 Nexus是Maven仓库管理器,用来搭建一个本地仓库服务器,这样做的好处是便于管理,节省网络资源,速度快,还有一个非常有用的功能就是可以通过项目的SNAPSHOT版本管理,来进行模块 ...
- 关于移动端APP开发-字体样式变大问题
前两天在写App项目的时候发现一个问题,就是明明css写的样式是14px,刚开始在页面显示时并未出现问题,可是内容一多,字体突然变大了. what?,不明所以,在各大网站上找了好久才知道是浏览器的字体 ...
- 【译文】InnoDB 的不同的SQL如何加锁
http://dev.mysql.com/doc/refman/5.6/en/innodb-locks-set.html 前置:检索如果用不到索引,会扫描全表,并根据策略加锁.所以,这就是我们合理建立 ...
- DSU on Tree浅谈
DSU on tree 在之前的一次比赛中,学长向我们讲了了这样一个神奇的思想:DSU on tree(树上启发式合并),看上去就非常厉害--但实际上是非常暴力的一种做法;不过暴力只是看上去暴力,它在 ...
- 学习python第五天进制转换
6.进制之间的转换(重要) 二进制:满二进一 范围:0.1符号:0b例如:0b10...[注意]计算机只能识别二进制数据 八进制:满八进一 范围:0~7符号:0o例如:0o66 十进制:满十进一 范围 ...
- Oracle学习(十一):PL/SQL
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/v123411739/article/details/30231659 1.知识点:能够对照以下的录屏 ...