SQL Server中链接服务器将替代远程服务器


远程服务器配置可以使得数据库管理员在服务器以外的主机上连接到一个SQL Server实例,以便管理员在没有建立单据连接的情况下在其他的SQL Server实例上执行存储过程等相关操作。在远程服务器配置模式下,客户端所连接发服务器接受客户端的请求,并代表客户端把这个请求发送到远程的数据库服务器。远程服务器执行完毕后,会把执行报告返回给原始的服务器。然后这个原始服务器再把结果传递给客户端。不过在SQL Server中,之所以要实现这种技术,主要是出于兼容性的需要。出于安全、性能方面的考虑,现在微软官方是建议数据库管理员通过链接服务器功能来对服务器进远程操作。因为链接服务器可以比远程服务器提供更高的安全性与更好的性能。

  一、链接服务器的优点。

  在远程服务器模式下,客户端是通过另外一个SQL Server数据库服务器连接到远程的SQL Server数据库服务器中。而链接服务器模式下,客户端是通过链接服务器连接到远程的SQL Server数据库服务器中。也就是说,微软专门开发了一个链接服务器,用来跟远程的数据库进行链接。由于这个链接服务器是一个独立于SQL Server数据库的服务器,所以,其性能会比远程服务器配置模式高的多,而且安全性也有所保障。

  如链接服务器可以以相同的方式确定不同的数据源。如果是远程服务器模式,则在客户端之能够链接到SQL Server数据库。但是,如果管理员采用了链接服务器的话,那么远程客户端不仅可以访问SQL Server数据库;而且还可以访问其他数据源,如Oracle、Acess等数据库。当管理员需要实现数据迁移,把其他数据库中的数据迁移到SQL Server数据库中,将变得非常有用。而且,在链接服务器模式下,管理员还可以对企业内的异类数据源发出分布式查询、更新等操作。

  所以说,链接服务器模式在性能上,比远程服务器模式更胜一筹。那么在安全性上,其又有什么杰出表现呢?

  二、登陆名映射提高链接服务的安全性。

  如果客户端通过链接服务器访问远程数据库时,发送服务器必须提供登陆名和密码以代表自己连接到接收服务器。而这个过程,是通过SQL Server数据库系统存储过程实现的。这种技术,就叫做登录名映射。

  链接服务器登录名映射为特定的链接服务器和本地登录名建立远程登陆名和远程密码。在客户端连接到链接服务器以执行查询或者存储过程时,数据库会查找正在执行查询或者存储过程的当前登录名的登陆名映射。如果找到一个合适的登陆名映射时,则数据库在连接到链接服务器时会发送相应的远程登陆名和密码。这看起来好像是在绕口令,比较难以理解。这也正常。笔者刚接触到这个链接服务器时,也想了几个小时,才弄明白什么叫做登陆名映射。其实我们可以简单的理解。即到客户端链接到链接服务器时,链接服务器需要先对客户端的身份进行验证。而其验证的依据就是远程数据库是与链接服务器建立了登陆名映射。也就说,链接服务器在其中起着“保安”的作用,会先确定访问者的合法身份。

  可见,通过登陆名映射可以在很大程度上提高远程数据库服务的安全性
三、链接服务器的实现方式。

  链接服务器的部署是非常简单的。在SQLServer的管理控制台中,只需要通过几个简单的步骤即可。不过在谈具体的配置之前,还必须先要来了解一个新内容,即OLE数据库接口。

  上面我们在谈到链接服务器性能的时候,说过管理员可以通过链接服务器来访问呢不同的数据源。其实,这都是OLE数据库接口的功劳。OLE数据库访问接口是用来管理特定数据源并且与其进行交互的工具。其实,他是一个DLL文件,即动态链接库文件。这个文件往往不能够单独运行,但是它允许应用程序共享执行特殊任务所必须的代码和其他内容。而OLE数据源标示可通过OLE来访问特定的数据库。有了OLE的帮助,使得链接服务器不仅可以访问各大品牌的数据库,还可以访问一些非数据库的数据文件,如Excel、带有固定格式的文本文件等等。

  而且,OLE接口参数还可以对某些操作进行控制。因为不同的数据库都对标准的SQL语句进行了扩充。也就是说,某些特殊的语法只有特定的数据库系统才能够执行。为了保证SQL语句的通用性,可以在OLE接口参数中进行一些配置,来防止管理员执行一些不兼容的SQL语句。如在OLE接口中,有一个NestedQueries的参数。它主要用来控制是否允许在From子句中潜套Select语句。如果把这个参数设置为0,就表示不允许在From子句中使用嵌套的Select语句。如果非0,则表明访问接口允许在From子句中使用嵌套的Select语句。笔者有时候经常利用这个参数来对一些操作进行控制。如可以通过这个选项,使得数据库管理员能够将某些查询委托给需要在From子句中嵌套Select语句的访问接口。

    通过接口还可以控制操作者是否有更新权限,即通过链接服务器访问远程数据库时,能否对数据库进行更新操作。如要进行这个控制,则可以使用NonTransactedUpdates参数。如果这个参数为0,则允许进行更新。反之,则不允许更新。不过如果启用了更新的话,需要注意一个问题。由于访问接口不支持事务,则通过链接服务器更新的数据,将不可恢复。

  链接服务器可以采用SQL Server自带的OLE接口,也可以采用第三方的接口。但是,如果采用第三方的OLE数据库接口的话,需要注意运行SQL Server服务的帐户必须具有对安装访问接口的目录以及所有子目录具有读取权限和执行权限。在大部分情况下,笔者建议还是采用数据库自带的OLE接口,以减少配置的工作量。

  四、如何定义链接服务器。

  在SQL Server数据库中,链接服务器定义主要有两种方式。一是通过数据库自带的存储过程来进行定义;二是通过管理控制台来进行部署。

  笔者比较喜欢采用系统存储过程和目录视图来管理链接服务器。如可以通过SP-addlinkedserver存储过程来创建服务器定义。如果需要查看链接服务器的信息,则可以通过SYS.SERVERS系统目录视图进行查询。如果要删除链接服务的话,也可以通过存储过程来删除。

  如果初学者觉得通过存储过程与视图的方式不够直观,则可以通过数据库的管理控制台来进行链接服务器的定义。这个步骤也很简单。在数据库的对象资源管理器中,右键单击服务器对象,选择新建,再选择链接服务器即可。如果要删除连接服务,则选中需要删除的链接服务器,选择删除即可。通常情况下,不需要对OLE的接口参数进行调整。如果对于性能、安全等要求比较高,或者有多个管理员同时管理数据库的时候,则可以通过对OLE部分参数进行调整。如笔者上面谈到的控制是否允许更新等相关参数。对于初学者来说,笔者不建议对这些参数进行调整。因为如果调整不得法的话,会导致链接服务器无法正常工作。而且这个错误很难排查。

  链接服务器除了可以帮助管理员轻松访问不同的数据源之外,在分布式查询中也特别有用。当用户利用客户端应用程序通过链接服务器执行分布式查询时,数据库将会分析链接服务器传送过来的语句。行集请求的形式可以是对该访问接口执行查询或者从该访问接口直接打开基表。


« 
» 
快速导航

Copyright © 2016 phpStudy | 豫ICP备2021030365号-3