1.6 客户端网络配置
客户端软件使客户机能够连接到网络上的SQL Server 2008实例。“客户端”是前端应用程序,它使用服务器(如SQL Server数据库引擎)提供的服务。这种应用程序所驻留的计算机称为“客户机”。在最简单的情况下,SQL Server客户端可与SQL Server实例驻留在同一台计算机上。而通常一个客户端通过网络可以连接到一个或多个远程服务器。SQL Server的客户端/服务器体系结构允许通过网络无缝地管理多个客户端和服务器,默认的客户端配置可以满足大多数情况。
SQL Server客户端可以包括各种应用程序。例如:
(1)OLE DB使用者
这些应用程序使用SQL Native Client OLE DB访问接口连接到SQL Server实例。OLE DB访问接口在SQL Server以及将SQL Server数据作为OLE DB行集使用的客户端应用程序之间担当中介。sqlcmd命令提示实用工具和SQL Server Management Studio都是OLE DB应用程序的例子。
(2)ODBC应用程序
这些应用程序包括安装SQL Server早期版本时附带的客户端实用工具(例如osql命令提示实用工具),以及其他使用SQL Native Client ODBC驱动程序连接到SQL Server实例的应用程序。
(3)DB-Library客户端
注意:尽管SQL Server 2008数据库引擎仍然支持来自使用DB-Library和嵌入式SQL API的现有应用程序的连接,但是它不包含对使用这些API的应用程序进行编程工作所需的文件或文档。SQL Server 数据库引擎的未来版本将不再支持来自 DB-Library或嵌入式SQL应用程序的连接,请不要使用 DB-Library或嵌入式SQL来开发新的应用程序。修改现有的应用程序时,请删除DB-Library或嵌入式SQL的任何依赖项。请使用SQLClient命名空间或者诸如OLE DB或ODBC的API来代替这些API。
无论哪种类型的应用程序,管理客户端的主要操作都包括配置它与 SQL Server 服务器组件的连接。根据实际要求,客户端管理的范围可以小到输入服务器名称,大到生成自定义配置项库,以便满足各种多服务器环境。
SQL Native Client的.dll包含网络库并由安装程序安装。在新的SQL Server安装过程中不会启用网络协议,升级的安装会启用以前启用的协议。基础网络协议作为Windows安装的一部分(或通过“控制面板”中的“网络”)进行安装。
下列工具用于管理SQL Server客户端:
SQL Server配置管理器客户端和服务器网络组件都使用SQL Server配置管理器进行管理,它组合了早期版本的SQL Server 网络实用工具、SQL Server 客户端网络实用工具和服务管理器。SQL Server 配置管理器是一个Microsoft管理控制台(MMC)管理单元,它还在Windows资源管理器单元中显示为一个节点。使用SQL Server配置管理器,可以启用、禁用和配置各个网络库,以及指定其优先级。
1.6.1 本地客户端配置
SQL Native Client是客户端计算机用于连接到SQL Server的网络库,与Microsoft SQL Server 2008一起启动。
SQL Native Client配置中的设置将在运行客户端程序的计算机上使用。在运行SQL Server的计算机上配置这些设置时,它们仅影响那些运行在服务器上的客户端程序。这些设置不会影响连接到早期版本的SQL Server的客户端,除非它们使用与SQL Server 2008一起启动的客户端工具,例如SQL Server Management Studio。
1.配置客户端网络协议
客户端应用程序可以使用TCP/IP、命名管道、VIA或共享内存协议连接到SQL Server,这些协议可以通过使用SQL Native Client DLL中包含的客户端网络库来实现。若要配置SQL Server客户端,请使用SQL Server配置管理器,它是新的Microsoft管理控制台(MMC)管理单元,可从“开始”菜单或管理工具中找到。SQL Server配置管理器提供了有关客户端网络协议的信息,并可以供你配置某些协议选项。使用SQL Server配置管理器还可以更改默认的网络协议,定义连接到特定服务器的方法。
启用和配置协议:SQL Server配置管理器合并了SQL Server以前版本中客户端网络协议的多种功能,并为与Microsoft SQL Server 2008兼容的任何SQL Server版本提供了客户端配置功能。
若要启动SQL Server配置管理器,请单击“开始”菜单,依次指向“程序文件”、Microsoft SQL Server 2008和“配置工具”,然后单击“SQL Server配置管理器”。若要访问客户端配置部分,请单击控制台窗格中的“SQL Native Client配置”。
使用SQL Server配置管理器可以执行下列操作:
● 更改客户端在尝试连接到服务器时使用的默认协议。
● 更改客户端在连接到服务器时尝试使用所有启用协议的顺序。
● 创建客户端与指定服务器的连接,并将其保存为配置条目。配置条目包含服务器别名、客户端协议和所有相关的连接参数(如管道名称或端口号)。
● 显示有关系统上当前安装的 SQL Server 客户端协议的信息。
注意:SQL Server配置管理器可以为服务器别名配置和默认客户端网络库创建注册表项。但是,该应用程序并不安装SQL Server客户端网络库或网络协议。SQL Server客户端网络库是在SQL Server安装期间安装的;网络协议则是在安装Windows系统时安装的(或者通过“控制面板”中的“网络”安装)。在安装Windows的过程中可能不会安装特定的网络协议。
2.配置OLE DB客户端
配置OLE DB客户端以连接到SQL Server 2008实例时,需要通过OLE DB提供程序为客户端
(或OLE DB使用者)提供服务器名称和连接信息。通常,使用以下两种OLE DB提供程序之一进行SQL Server连接:SQL Native Client OLE DB提供程序(SQLNCLI)和Microsoft OLE DB Provider for ODBC。
(1)使用SQLNCLI连接客户端
SQL Native Client OLE DB提供程序(SQLNCLI)是SQL Server自有的OLE DB提供程序,它为那些想访问一个或多个SQL Server实例上的数据的使用者提供了接口。使用SQLNCLI使你能够开发出已针对SQL Server数据库优化的OLE DB使用者。但是,SQLNCLI只能用于SQL Server;而Microsoft OLE DB Provider for ODBC则不是这样,它可以从多种与OLE DB兼容的ODBC应用程序中访问数据。不能使用ODBC SQL Server数据源名称(DSN)中的信息进行连接。通过SQL Native Client OLE DB提供程序来设置客户端时,客户端应提供必要的连接特性,并且提示输入连接数据或者通过保存在持久性文件中的OLE DB数据源提供该数据。
(2)使用OLE DB连接客户端
通过Microsoft OLE DB Provider for ODBC可以使用单个OLE DB提供程序连接到多个ODBC数据源,其中包括SQL Server。但是,与使用本机Microsoft OLE DB Provider for SQL Server相比,使用此提供程序连接到SQL Server客户端需要更多管理开销。要使用Microsoft OLE DB Provider for ODBC连接到SQL Server实例,所需的信息通常用ODBC数据源管理器来创建并保存在SQL Server ODBC DSN中(作为用户、系统或文件DSN)。随后可以对自己的应用程序进行编码,从而使用SQL Server DSN进行连接。
3.配置ODBC数据源
开放式数据库连接(ODBC)应用程序使用ODBC数据源来连接Microsoft SQL Server的实例。ODBC数据源是记录下列内容的一个存储定义:
● 连接到数据源所使用的ODBC驱动程序。
● ODBC驱动程序连接到数据源所使用的信息。
● 连接所使用的驱动程序特有的选项。例如,SQL Server ODBC 数据源可以记录要使用的SQL-92选项,或者驱动程序是否应记录性能统计信息。
● 客户端上的每个ODBC数据源都有一个唯一的数据源名称(DSN)。SQL Server ODBC驱动程序的ODBC数据源包含用于连接到SQL Server实例的全部信息,以及任何基本选项。
4.选择网络协议
若要连接到SQL Server数据库引擎,必须启用网络协议。Microsoft SQL Server可同时通过多种协议处理请求。客户端用单个协议连接到SQL Server;如果客户端程序不知道SQL Server正在侦听哪个协议,可以配置客户端按顺序尝试多个协议。使用SQL Server配置管理器启用、禁用以及配置网络协议。
(1)Shared Memory
Shared Memory是可供使用的最简单协议,没有可选性设置项。由于使用Shared Memory协议的客户端仅可以连接到同一台计算机上运行的SQL Server实例,因此它对于大多数数据库活动而言是没用的。如果怀疑其他协议配置有误,请使用Shared Memory协议进行故障排除。
注意:使用MDAC 2.8或更早版本的客户端不能使用Shared Memory协议。如果这些客户端尝试使用,将自动切换为Named Pipes协议。
(2)TCP/IP
TCP/IP是Internet的标准协议。它与互联网络中硬件结构和操作系统各异的计算机进行通信。TCP/IP包括路由网络流量的标准,并能够提供高级安全功能,它是目前在商业中最常用的协议。计算机中TCP/IP的设置略显复杂,但大多数联网的计算机已经配置正确。
(3)Named Pipes
Named Pipes(命名管道)是为局域网而开发的协议。内存的一部分被某个进程用来向另一个进程传递信息,因此一个进程的输出就是另一个进程的输入。第二个进程可以是本地的(与第一个进程位于同一台计算机上),也可以是远程的(位于联网的计算机上)。
(4)VIA
虚拟接口适配器(VIA)协议和VIA硬件一同使用。
(5)Named Pipes与TCP/IP 套接字
在快速局域网(LAN)环境中,传输控制协议或Internet协议(TCP/IP)套接字客户端和Named Pipes客户端在性能方面不相上下。但是,网络速度越慢,如在广域网(WAN)或拨号网络上,TCP/IP套接字客户端与Named Pipes客户端的性能差异越明显。这是因为进程间通信(IPC)的机制在对等项间的通信方式不同。
对于Named Pipes(命名管道),通常网络通信交互性更强。一个对等方直到另一个对等方使用读取命令请求数据时才发送数据。在开始读取数据前,网络读取一般包括一系列窥视 Named Pipes的信息。这在慢速网络中可能开销非常大,并会导致过多的网络流量,其他的网络客户端反过来也会受到影响。阐明所讨论的是本地管道还是网络管道也很重要。如果服务器应用程序在运行 SQL Server实例的计算机本地运行,则可以选择本地Named Pipes协议,本地Named Pipes以内核模式运行且速度非常快。对于TCP/IP 套接字,数据传输的效率更高,开销也更少。数据传输还可以利用TCP/IP套接字性能增强机制的优点,例如窗口化、延迟确认等,这在慢速网络中可能非常有益。对于应用程序的不同类型,这类性能差异可能非常大。TCP/IP套接字还支持积压队列,试图连接到SQL Server时,与可能导致管道忙错误的Named Pipes相比,该队列可以带来有限的平稳效果。通常,TCP/IP在慢速LAN、WAN或拨号网络中效果较好,而当网络速度不成问题时,Named Pipes则是更好的选择,因为其功能更强、更易于使用并具有更多的配置选项。
5.启用协议
该协议必须在客户端和服务器上都启用才能正常工作。服务器可以同时监听所有已启用的协议的请求。客户端可以选取一个协议,或按照SQL Server配置管理器中列出的顺序尝试这些协议。
6.使用IPv6进行连接
SQL Server 2008和SQL Native Client完全支持Internet协议版本4(IPv4)和Internet协议新版本6(IPv6)。将Windows配置为使用IPv6时,SQL Server 2008各组件会自动识别IPv6的存在,不必采用特殊的SQL Server配置。支持包括下列各项:
(1)SQL Server 2008数据库引擎和其他服务器组件可以同时侦听IPv4和IPv6地址。如果同时存在IPv4和IPv6,则可以使用SQL Server配置管理器来配置数据库引擎,以便只侦听IPv4地址或只侦听IPv6地址。
(2)根据IPv4地址对运行于支持IPv4和IPv6的计算机上的SQL Server Browser服务进行查询时,该服务会对IPv4地址及其列表中的第一个IPv4 TCP端口做出响应。根据IPv6地址进行查询时,该服务会对IPv6地址及其列表中的第一个IPv6 TCP端口做出响应。为了避免出现不一致,建议将IPv4和IPv6侦听器配置为侦听相同的端口。
SQL Server Management Studio和SQL Server配置管理器等工具都接受IPv4和IPv6格式的IP地址。大多数情况下,如果使用服务器主机名或完全限定域名(FQDN)指定<computer_name>\<instance_name>,则无须修改连接字符串。如果服务器安装有IPv4和IPv6,则其主机名或FQDN将会解析到多个IP地址,其中至少包括一个IPv4地址和多个IPv6地址。SQL Native Client尝试使用这些 IP 地址按照通过 TCP/IP 接收地址的顺序建立连接,并使用第一个成功的连接。由于SQL Native Client无法预测顺序,因此,应将顺序视为随机顺序。如果同时存在IPv4 地址和IPv6地址,则首先尝试使用IPv4地址。这一逻辑对于ODBC、OLE DB或ADO.NET的用户是透明的。
注意:如果数据库引擎未侦听IPv4,则尝试进行IPv4连接之后,必须等待超时期限过后再尝试使用 IPv6地址。为了避免出现这种情况,请直接连接到IPv6 IP地址或使用IPv6地址配置客户端的别名。
1.6.2 使用防火墙系统
许多公司使用防火墙系统来防止公司外部人员通过 Internet 对其网络进行非法访问。防火墙可用于限制对网络的访问,其方法是只转发目标为本地网络中特定TCP/IP 地址的请求,对其他所有网络地址的请求都将被防火墙阻塞。通过配置防火墙使之转发指定数据库引擎实例的网络地址的网络请求,即可允许Internet应用程序访问本地网络中的SQL Server数据库引擎实例。
若要使用防火墙,数据库引擎实例必须侦听防火墙所转发的网络地址。SQL Server数据库引擎的TCP/IP网络地址由两部分组成:与计算机中的一个或多个网卡关联的IP地址,以及SQL Server实例专有的TCP端口地址。在默认情况下,数据库引擎的默认实例使用1433号TCP端口。但是,命名实例在首次启动时,会动态分配未使用的TCP 端口号。如果其他应用程序使用了原来的TCP端口号,命名实例在以后启动时也可以动态更改自己的TCP端口地址。仅当SQL Server当前正在侦听的端口是它自己动态选择的时,它才会动态更改为未使用的TCP端口;而如果静态分配的端口被其他应用程序占用,SQL Server将显示错误并继续侦听其他端口。但其他应用程序不太可能使用1433号端口,因为该端口是SQL Server数据库引擎的知名注册地址。
在对数据库引擎命名实例使用防火墙时,请使用SQL Server配置管理器来配置命名实例,使其侦听特定的TCP端口。必须选择同一计算机或群集上运行的其他应用程序未使用的TCP端口。有关各个应用程序已注册使用的知名端口列表,请访问 Internet Assigned Numbers Authority 网站http://www.iana.org。
网络管理员应配置防火墙,使之转发数据库引擎实例正在侦听的IP地址和TCP端口(默认实例使用的1433号TCP端口,或命名实例配置使用的TCP端口)上的SQL Server通信。而且,由于Microsoft SQL Server 2008使用1434号UDP端口从应用程序建立通信链接,因此网络管理员应该配置防火墙,使之转发对同一IP地址上的1434号UDP端口的请求。
例如,假设有一台计算机运行了SQL Server数据库引擎的一个默认实例和两个命名实例。配置该计算机,使这三个实例侦听的网络地址都具有相同的IP地址。默认实例侦听1433号TCP端口,而两个命名实例分别侦听1434号和1954号TCP端口。然后网络管理员应配置防火墙,使之转发对该IP地址上的1434号UDP端口以及1433号、1434号和1954号TCP端口的网络请求。
如何将防火墙配置为允许SQL Server访问
防火墙系统用于阻止对计算机资源的未经授权访问。若要通过防火墙访问Microsoft SQL Server数据库引擎实例,必须在运行SQL Server的计算机上配置此防火墙以允许访问。
注意:打开防火墙的端口可能会使服务器受到恶意攻击,请确保在打开端口之前了解防火墙系统。
为允许访问而执行的主要步骤如下:
将数据库引擎配置为使用特定的TCP/IP 端口。数据库引擎的默认实例使用端口 1433,但可以更改。
将防火墙配置为允许授权的用户或计算机访问此端口。
注意:使用SQL Server Browser服务,用户可以连接到不在侦听端口1433的数据库引擎实例,因而无须知道端口号。若要使用SQL Server Browser,必须打开UDP端口1434。若要提升最安全的环境,请停止SQL Server Browser服务,并将客户端配置为使用端口号进行连接。
在默认情况下,Microsoft Windows XP Service Pack 2将启用Windows防火墙,这会关闭端口1433,从而防止Internet计算机连接到你计算机上的默认SQL Server实例。重新打开端口1433之后,才可以使用TCP/IP连接到默认实例。
配置Windows XP防火墙的基本步骤如下:
打开Windows防火墙的端口以进行TCP访问。
在“控制面板”中,打开“网络连接”,右键单击活动连接,再单击“属性”命令。
单击“高级”选项卡,再单击“Windows防火墙设置”,在“Windows防火墙”对话框中,单击“异常”选项卡,再单击“添加端口”。
在“添加端口”对话框的“名称”文本框中,键入SQL Server<实例名>。在“端口号”文本框中,键入数据库引擎实例的端口号,例如默认实例的端口号1433。
验证是否已选中TCP,再单击“确定”按钮。
若要打开端口以显示SQL Server Browser服务,请单击“添加端口”,在“名称”文本框中键入SQL Server Browser,在“端口号”文本框中键入1434,选择UDP,再单击“确定”按钮。
关闭“Windows防火墙”对话框和“属性”对话框。
注意:若要允许通过防火墙进行Named Pipes访问,还必须通过防火墙启用文件和打印机共享。
单击“Windows防火墙”对话框中的“添加程序”以设置其他选项,例如授予访问特定程序的权限和限制访问某些IP地址或网络子网。
使用SQL Server配置管理器进行SQL本地客户端配置,其步骤如下:
配置工具➔SQL Server 配置管理器➔展开 SQL 本地客户端配置,对客户端协议和别名进行配置,如图1-17所示。
图1-17 配置客户端协议和别名
使用Client Protocols部分来配置客户端的网络协议属性,在这里配置的所有属性比如协议的顺序会应用到所有的连接中。要对某个协议进行配置,那么选中它并单击右键,可以看到有几个项,比如可以禁止或允许某个协议,可以管理协议的顺序,同时可以配置协议的属性。如选择属性项,则显示这个协议的属性面板,图1-18所示为TCP/IP协议的属性面板。
图1-18 TCP/IP协议的属性面板
使用Alias 部分可以针对一个单独的服务器连接进行网络协议的配置。要对别名进行配置,选中 Aliases,右键单击并选择新建别名,弹出“Alias-New”对话框,对其进行适当的配置,如图1-19所示。
图1-19 配置别名
那么在连接 ARRAYINC-KELVIN 服务器的时候就可以使用kelvin 来代替实际的服务器名ARRAYINC-KELVIN了,同时可以设置连接的协议和端口号,如图1-19设置的网络协议是TCP/IP,端口号是1433。
注意:连接某台服务器时既可以使用IP地址,也可以使用服务器名。
当要连接运行在同一台计算机上的SQL Server 2008时,可以使用(local)来代替服务器名,但是并不鼓励这么做。你也可以使用localhost或一点(.)来代替(local)。