链接服务器(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:Linked Server 添加和删除的更多相关文章

  1. 为SQL Server表中的列添加/修改/删除注释属性(sp_addextendedproperty、sp_updateextendedproperty、sp_dropextendedproperty)

    本篇基本完全参考:sql--sp_addextendedproperty和sp_updateextendedproperty (Transact-SQL) 三个存储过程用法一样,以sp_addexte ...

  2. WebLogic Server添加删除补丁操作【转】【补】

    WebLogic Server添加删除补丁操作 0 查看当前weblogic版本 [weblogic@localhost bin]$ cd /data/bea/weblogic11/wlserver_ ...

  3. 在SQL Server中添加Linked Server 图解版

    在开发中,经常需要一个SQL Server服务器去访问另一个服务器,微软提供了一种方式Linked Server 下面是配置流程: 1).打开Server Objects下 Linked Server ...

  4. Sql Server有主外键关系时添加、删除数据

    当表之间有主外键关系时删除数据会被约束,添加.删除失败 解决办法,我们可以先把主外键关系的检查约束给关掉 → 然后删除数据 → 之后再把约束打开 查询出关掉所有外键约束的语句 SELECT 'ALTE ...

  5. SQL Server 添加链接服务器

    背景 在SQL SERVER中,如果我们查询数据库需要关联另外一台数据库中表,在这种情况下我们可以通过添加服务器链接来实现. 案列 方式1.sql server 提供了图形化界面,如下: 右键> ...

  6. [vs2008]Visual Studio 2008 SP1添加或删除功能提示查找SQLSysClrTypes.msi文件

    前言 今天接到领导布置的一个任务,是之前同事负责的项目.离职了,现在客户有些地方需要修改,由于我之前参与过,就落在我的头上了. 然后我就把代码弄了过来,打开发现其中需要用到水晶报表.(我觉得不好用,不 ...

  7. Sql Server添加用户

    1.sa用户登陆之后,在安全性中新建登录名 2.添加登录名,下面的默认数据库选择该用户可访问的默认数据库 3.服务器角色中选择public 4.用户映射中选择该用户可访问的数据库,数据库角色一般选择p ...

  8. Web 1三级联动 下拉框 2添加修改删除 弹框

    Web  三级联动 下拉框 using System; using System.Collections.Generic; using System.Linq; using System.Web; u ...

  9. 从一个Bug说开去--解决问题的思路,Linked Server, Bulk Insert, DataTable 作为参数传递

    声名— 部分内容为杜撰,如有雷同,不胜荣幸! 版权所有,如要引用,请标明出处! 如果打赏,请自便! 1       背景介绍 最近一周在忙一个SQL Server 的Bug,一个简单的Bug,更新两张 ...

随机推荐

  1. phoneGap

    1.安装参考http://blog.csdn.net/mage694/article/details/16846331 2.API  参考http://phonegap.com/developer/

  2. windows 共享文件夹 给 mac

      假设我要共享文件夹A (1)在windows上, 共享该文件夹 (2)然后macbook 和 pc  连接同一个网络 (3)在finder选择连接服务器 (4)输入服务器地址smb://**** ...

  3. bind模拟

    if (!Function.prototype.bind) { Function.prototype.bind = function(oThis) { if (typeof this !== 'fun ...

  4. 常用str函数

    echo stripslashes("Who\'s Bill Gates?"),'<br />';//去掉反斜杠 echo strtolower("AABbb ...

  5. Errors occurred during the build. Errors running builder 'JavaScript Validator' on project

    1.问题:Errors occurred during the build. Errors running builder 'JavaScript Validator' on project 2.解决 ...

  6. JSON相关知识,转载:删除JSON中数组删除操作

    一:JSON是什么 JSONg格式:对象是一个无序的“名称/值”对的集合. 对象以括号开始,括号结束. 名称冒号分隔值. "名称/值"之间用逗号分隔 例: var people = ...

  7. java记录

    1. 包装类与自动装箱问题:在justjavac的博客上看到翻译的一篇文章 离开java,寻找更佳语言的十大理由 中关于自动装箱的一个描述: 这个特性是为了解决因原生类型的存在所导致的问题,在Java ...

  8. DataTable扩展方法ToList<T>()、ToJSON()、ToArrayList()

    /// <summary> /// 扩展方法类 /// </summary> public static class CommonExtension { /// <sum ...

  9. ios 关于问题 no matching provisioning profiles found

    ios 关于问题 no matching provisioning profiles found

  10. ajax优点与缺点

    ajax的优点 Ajax的给我们带来的好处大家基本上都深有体会,在这里我只简单的讲几点: 1.最大的一点是页面无刷新,在页面内与服务器通信,给用户的体验非常好. 2.使用异步方式与服务器通信,不需要打 ...