睿诚科技协会

SQL Server网络配置如何正确配置与排查?

  1. 核心概念:SQL Server 使用的网络库
  2. 主要配置工具
  3. 配置步骤详解(以 SQL Server Configuration Manager 为例)
  4. 常见网络协议详解
  5. 常见问题与解决方案
  6. 安全建议

核心概念:SQL Server 使用的网络库

当客户端连接 SQL Server 时,它并不是直接与数据库引擎对话,而是通过一个叫做 网络库 的中间层,网络库负责处理底层的网络通信,如建立连接、数据打包和解析等。

SQL Server网络配置如何正确配置与排查?-图1
(图片来源网络,侵删)

SQL Server 支持多种网络库,对应不同的网络协议:

协议/网络库 说明 默认端口 适用场景
TCP/IP 最常用、最可靠的协议,通过套接字进行通信,支持局域网和广域网。 1433 强烈推荐,几乎所有场景下的首选。
Named Pipes 一种进程间通信机制,在早期的 Windows 版本中性能较好,但在现代网络环境中不如 TCP/IP 稳定和高效。 (动态) 已不推荐,主要用于旧版应用或特定 Windows 环境下的本地连接。
Shared Memory 最快的连接方式,因为它不需要通过网络,仅在客户端和 SQL Server 位于同一台机器时使用。 (专用) 仅用于本地连接,无法用于远程连接。
VIA (Virtual Interface Adapter) 一种专用的、高性能的网络协议,需要特定的硬件支持。 (动态) 已过时,现代 SQL Server 版本中已移除。

对于绝大多数现代应用,TCP/IP 是唯一需要启用的协议


主要配置工具

配置 SQL Server 网络主要有两种官方工具:

  1. SQL Server Configuration Manager (SSCM)

    SQL Server网络配置如何正确配置与排查?-图2
    (图片来源网络,侵删)
    • 推荐工具,这是专门为 SQL Server 设计的图形化管理工具,是进行网络配置最直观、最安全的方式。
    • 它是一个 Microsoft Management Console (MMC) 管理单元,通常随 SQL Server 安装一起提供。
  2. SQL Server 网络配置存储过程

    • 通过执行 Transact-SQL 命令来配置。
    • 主要存储过程:sp_configurereconfigure
    • 适用场景:自动化部署、脚本化配置或在没有图形界面的服务器上进行配置。
    • 示例
      -- 启用 named pipes 协议
      EXEC sp_configure 'show advanced options', 1;
      RECONFIGURE;
      EXEC sp_configure 'network packet size', 4096; -- 只是示例,并非直接启用协议
      -- 真正启用协议需要修改系统表,不推荐直接操作,建议使用 SSCM

本文将主要介绍使用 SQL Server Configuration Manager 的配置方法。


配置步骤详解 (以 SQL Server Configuration Manager 为例)

假设你已经以管理员身份登录了服务器。

步骤 1:打开 SQL Server Configuration Manager

在开始菜单中找到并打开 "SQL Server Configuration Manager"。

SQL Server网络配置如何正确配置与排查?-图3
(图片来源网络,侵删)

步骤 2:定位到网络配置

在左侧的树形视图中,展开 SQL Server Network Configuration

你会看到两个重要的节点:

  • Protocols for SQLEXPRESS (或你的实例名,如 MSSQLSERVER 代表默认实例):这里配置的是特定实例的网络协议,如果你有多个 SQL Server 实例,每个实例都有自己的协议列表。
  • SQL Server Client Protocols:这里配置的是客户端将尝试使用的网络库顺序,通常我们只需要配置服务器端,客户端会自动检测。

步骤 3:启用/禁用协议

  1. 选择要配置的实例,我们选择 Protocols for SQLEXPRESS
  2. 你会在右侧看到一个协议列表,如 Named Pipes, Shared Memory, TCP/IP
  3. 启用 TCP/IP
    • 右键点击 TCP/IP,选择 Enable
    • 启用后,该协议的状态会变为 Enabled
  4. 禁用不需要的协议
    • 对于 Named Pipes,除非有特殊需求,否则建议右键点击并选择 Disable
    • Shared Memory 无法禁用,它是为本地连接保留的。

步骤 4:配置 TCP/IP 属性(关键步骤)

这是网络配置中最核心的部分,决定了 SQL Server 如何监听和接受连接。

  1. 右键点击 TCP/IP,选择 Properties

  2. IP 地址 选项卡

    • 这里列出了服务器上所有的网络接口卡。
    • IPAll:这是最重要的设置,它为所有未明确配置的 IP 地址提供默认设置。
    • TCP 动态端口
      • 如果设置为 0,表示 SQL Server 将使用一个随机、可变的端口进行监听。
      • 注意:如果使用动态端口,客户端连接时就不能指定 1433,而必须使用 SQL Server Browser 服务 来查询实例的实际端口号,这会增加配置的复杂性。
    • TCP 端口
      • 这是 SQL Server 的静态端口,默认值是 1433
      • 强烈建议:将此值设置为一个固定、非默认的端口号1433351433),这样做可以避免端口被其他程序占用,并且能增强安全性,因为端口扫描工具不会轻易发现它。

    推荐配置

    • 对于 IPAll
      • TCP 动态端口:留空或设置为 0
      • TCP 端口:设置为 14333 (或其他你选择的端口)。
    • 对于具体的 IP 地址(如 IP1, IP2):
      • Active:设置为 Yes,表示该 IP 地址接受连接。
      • TCP 动态端口:留空。
      • TCP 端口:留空,让它继承 IPAll 的设置。
  3. 标志 选项卡

    • HideInstance:如果勾选,SQL Server 实例将不会在网络上“广播”自己的存在,客户端无法通过 SQL Server Browser 发现该实例,必须知道确切的计算机名、实例名和端口号才能连接,这可以提供一定的安全性。
  4. 证书 选项卡

    用于配置 SSL 加密,确保客户端和服务器之间的通信是加密的,这是生产环境的安全最佳实践。

步骤 5:重启 SQL Server 服务

所有配置更改只有在服务重启后才能生效。

  1. 在 SSCM 左侧,展开 SQL Server Services
  2. 找到对应的 SQL Server 服务(如 SQL Server (SQLEXPRESS))。
  3. 右键点击,选择 Restart

常见网络协议详解

TCP/IP

  • 优点
    • 跨平台:支持 Windows、Linux、macOS 等各种操作系统。
    • 稳定可靠:是互联网通信的基础,经过了长期和广泛的验证。
    • 性能好:在现代网络中性能卓越。
    • 功能丰富:支持端口配置、IP 限制、加密等高级功能。
  • 配置要点:如上所述,设置静态端口是关键。

Named Pipes

  • 工作原理:在 Windows 环境下,它使用命名管道文件(如 \\.\pipe\sql\query)作为通信通道。
  • 缺点
    • 性能较差:在跨网络连接时,性能远不如 TCP/IP。
    • 安全性问题:在混合认证模式下,Named Pipes 可能会强制使用 Windows 身份验证,导致无法使用 SQL Server 身份验证。
    • 兼容性问题:在非 Windows 平台(如 Linux)上不可用。
  • 何时使用:基本不需要,除非你有一个非常古老的、无法修改的客户端应用程序,它只支持 Named Pipes。

Shared Memory

  • 工作原理:数据在同一个计算机的内存中直接传递,不经过网络栈。
  • 优点:速度最快,延迟最低。
  • 限制仅限本地连接,连接字符串中必须使用 localhost(local)
  • 用途:非常适合 DBA 在同一台服务器上使用 SQL Server Management Studio (SSMS) 进行管理和开发。

常见问题与解决方案

问题 1:无法连接到 SQL Server,错误提示 "Cannot connect to ..." 或 "Network-related or instance-specific error"

  • 原因分析
    1. SQL Server 服务未启动
    2. 防火墙阻止了连接:Windows 防火墙或网络防火墙可能阻止了 1433 (或你设置的静态端口)。
    3. 网络协议未启用:TCP/IP 协议被禁用。
    4. 端口不正确:客户端连接字符串中的端口号与服务器端配置的不一致。
    5. SQL Server Browser 服务未启动:如果服务器使用动态端口或命名实例,而客户端没有指定端口号,则需要此服务。
  • 排查步骤
    1. 确认 SQL Server 服务正在运行。
    2. 在服务器上使用 telnetTest-NetConnection (PowerShell) 测试端口是否开放:
      Test-NetConnection <服务器IP地址> -Port <端口号,如14333>

      如果显示 TcpTestSucceeded: True,则说明网络可达。

    3. 检查防火墙规则,为 SQL Server 端口添加入站规则。
    4. 检查 SSCM 中的协议和端口配置。
    5. 如果使用命名实例或动态端口,确保 SQL Server Browser 服务已启动并设置为自动。

问题 2:连接超时

  • 原因分析:通常是网络延迟、防火墙规则配置不当(如只允许特定IP访问)或服务器负载过高导致。
  • 解决方案:检查网络路径、优化防火墙规则、监控服务器性能。

安全建议

  1. 禁用 Named Pipes:除非有明确需求,否则始终禁用。
  2. 使用静态端口:将 TCP/IP 端口从默认的 1433 修改为一个非标准端口。
  3. 配置防火墙:只允许来自受信任 IP 地址的连接访问 SQL Server 的端口。
  4. 启用 TCP/IP 端口过滤:在 TCP/IP 属性的 IP 地址 选项卡中,可以为每个 IP 地址单独设置允许的端口,进一步限制访问。
  5. 使用强密码:确保所有 SQL Server 登录账户都使用强密码。
  6. 启用加密:在 TCP/IP 属性的 证书 选项卡中配置 SSL/TLS,对连接进行加密,防止数据在传输过程中被窃听。

希望这份详细的指南能帮助你全面理解和配置 SQL Server 的网络环境!

分享:
扫描分享到社交APP
上一篇
下一篇