运行 Transact-SQL 调试器之前配置防火墙规则

适用范围:SQL Server

必须配置 Windows 防火墙规则,以便在连接到数据库引擎的实例(运行该实例的计算机不同于运行数据库引擎查询编辑器的计算机)时启用 Transact-SQL 调试。

配置 Transact-SQL 调试器

Transact-SQL 调试器包括服务器端和客户端组件。 服务器端调试程序组件与 SQL Server 数据库引擎的每个实例一起安装。 包括客户端调试器组件:

  • 在安装 Microsoft Visual Studio 2019 或更高版本时

  • 从 Web 下载安装 SQL Server Data Tools (SSDT) 时

如果 SQL Server Data Tools 与 SQL Server Database Engine 的实例在同一台计算机上运行,则对于运行 Transact-SQL 调试程序没有配置要求。 但是,若要在 Transact-SQL 调试器连接到数据库引擎的远程实例时运行此调试器,必须在两台计算机上的 Windows 防火墙中启用程序和端口规则。 如果您在尝试打开远程调试会话时系统显示错误,则请确保在您的计算机上定义以下防火墙规则。

使用 “高级安全 Windows 防火墙” 应用程序管理防火墙规则。 在 Windows 7 和 Windows Server 2008 R2 中,依次打开“控制面板”和“Windows 防火墙”,然后选择“高级设置”。 在 Windows Server 2008 R2 中,还可以打开“服务管理器”,在左侧的窗格中展开“配置”,然后展开“高级安全 Windows 防火墙”

注意

在“Windows 防火墙”中启用规则可能会导致你的计算机暴露在防火墙在设计上可以阻止的安全风险之中。 为远程调试启用规则将取消阻止在本主题中列出的端口和程序。

服务器上的防火墙规则

在运行数据库引擎实例的计算机上,使用“高级安全 Windows 防火墙”可以指定以下信息:

  • sqlservr.exe 添加入站程序规则。 对于需要支持远程调试会话的每个实例,您必须具有一个规则。

    1. 在“高级安全 Windows 防火墙”的左窗格中,右键单击“入站规则”,然后在操作窗格中选择“新建规则”

    2. 在“规则类型”对话框中,选择“程序”,然后选择“下一步”

    3. 在“程序”对话框中,选择“此程序路径:”,然后输入指向此实例的 sqlservr.exe 的完整路径。 默认情况下,sqlservr.exe 安装在 C:\Program Files\Microsoft SQL Server\MSSQL16.<InstanceName>\MSSQL\Binn 中,其中 <InstanceName> 对于默认实例为 MSSQLSERVER,对于任何命名实例则为相应实例的名称。

    4. 在“操作”对话框中,选择“允许连接”,然后选择“下一步”

    5. 在“配置文件”对话框中,选择在想要打开针对该实例的调试会话时描述计算机连接环境的任何配置文件,然后选择“下一步”

    6. 在“名称”对话框中,键入此规则的名称和说明,然后选择“完成”

    7. 在“入站规则”列表中,右键单击创建的规则,然后在操作窗格中选择“属性”

    8. 选择 “协议和端口” 选项卡。

    9. 在“协议类型:”框中选择“TCP”,在“本地端口:”框中选择“RPC 动态端口”,选择“应用”,然后选择“确定”

  • 添加针对 svchost.exe 的入站程序规则,以便从远程调试程序会话启用分布式组件对象模型 (DCOM) 通信。

    1. 在“高级安全 Windows 防火墙”的左窗格中,右键单击“入站规则”,然后在操作窗格中选择“新建规则”

    2. 在“规则类型”对话框中,选择“程序”,然后选择“下一步”。

    3. 在“程序”对话框中,选择“此程序路径:”,然后输入指向 svchost.exe 的完整路径。 默认情况下,svchost.exe 安装在 %systemroot%\System32\svchost.exe 中。

    4. 在“操作”对话框中,选择“允许连接”,然后选择“下一步”。

    5. 在“配置文件”对话框中,选择在想要打开针对该实例的调试会话时描述计算机连接环境的任何配置文件,然后选择“下一步”

    6. 在“名称”对话框中,键入此规则的名称和说明,然后选择“完成”

    7. 在“入站规则”列表中,右键单击创建的规则,然后在操作窗格中选择“属性”

    8. 选择“协议和端口”选项卡。

    9. 在“协议类型:”框中选择“TCP”,在“本地端口:”框中选择“RPC 端点映射程序”,选择“应用”,然后选择“确定”

  • 如果域策略要求通过 IPSec 进行网络通信,还必须添加打开 UDP 端口 4500 和 UDP 端口 500 的入站规则。

客户端上的防火墙规则

在运行数据引擎查询编辑器的计算机上,将 Windows 防火墙配置为允许远程调试。

如果您在尝试打开远程调试会话时系统显示错误,则可以通过使用 “高级安全 Windows 防火墙” 配置防火墙规则来手动配置程序和端口例外:

  • 为 svchost 添加程序条目:

    1. 在“高级安全 Windows 防火墙”的左窗格中,右键单击“入站规则”,然后在操作窗格中选择“新建规则”

    2. 在“规则类型”对话框中,选择“程序”,然后选择“下一步”。

    3. 在“程序”对话框中,选择“此程序路径:”,然后输入指向 svchost.exe 的完整路径。 默认情况下,svchost.exe 安装在 %systemroot%\System32\svchost.exe 中。

    4. 在“操作”对话框中,选择“允许连接”,然后选择“下一步”。

    5. 在“配置文件”对话框中,选择在想要打开针对该实例的调试会话时描述计算机连接环境的任何配置文件,然后选择“下一步”

    6. 在“名称”对话框中,键入此规则的名称和说明,然后选择“完成”

    7. 在“入站规则”列表中,右键单击创建的规则,然后在操作窗格中选择“属性”

    8. 选择“协议和端口”选项卡。

    9. 在“协议类型:”框中选择“TCP”,在“本地端口:”框中选择“RPC 端点映射程序”,选择“应用”,然后选择“确定”

  • 为承载 SQL Server 数据库引擎查询编辑器的应用程序添加程序条目。 如果需要在同一台计算机上从 SQL Server Data Tools 的多个安装都打开远程调试会话,则必须为这两者都添加一个程序规则:

    1. 在“高级安全 Windows 防火墙”的左窗格中,右键单击“入站规则”,然后在操作窗格中选择“新建规则”

    2. 在“规则类型”对话框中,选择“程序”,然后选择“下一步”。

    3. “程序” 对话框中,选择 “此程序路径:” ,然后输入以下三个值之一。

      • 对于 SQL Server Data Tools,输入指向 devenv.exe 的完整路径:

        1. 默认情况下,Visual Studio 2022 的 devenv.exe 位于 C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE 中。

        2. 默认情况下,Visual Studio 2019 的 devenv.exe 位于 C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE 中。

        3. 你可以从用来启动 SQL Server Data Tools 的快捷方式中找到指向 devenv.exe 的路径。 右键单击该快捷方式并选择“属性”。 可执行文件和路径将在 “目标” 框中列出。

    4. 在“操作”对话框中,选择“允许连接”,然后选择“下一步”。

    5. 在“配置文件”对话框中,选择在想要打开针对该实例的调试会话时描述计算机连接环境的任何配置文件,然后选择“下一步”

    6. 在“名称”对话框中,键入此规则的名称和说明,然后选择“完成”

    7. 在“入站规则”列表中,右键单击创建的规则,然后在操作窗格中选择“属性”

    8. 选择 “协议和端口” 选项卡。

    9. 在“协议类型:”框中选择“TCP”,在“本地端口:”框中选择“RPC 动态端口”,选择“应用”,然后选择“确定”。

启动调试器的要求

启动 Transact-SQL 调试器的所有尝试还必须满足以下要求:

  • SQL Server Data Tools 必须在作为 sysadmin 固定服务器角色成员的 Windows 帐户下运行。

  • 数据库引擎查询编辑器窗口必须使用 Windows 身份验证来连接,或使用作为 sysadmin 固定服务器角色成员的 SQL Server 身份验证登录名来连接。

  • 数据库引擎查询编辑器窗口必须连接到 SQL Server 数据库引擎的实例。 如果查询编辑器窗口连接到处于单用户模式下的实例,将无法运行调试器。

  • 服务器需要通过 RPC 回复客户端通信。 运行 SQL Server 服务的帐户必须具有对客户端的身份验证权限。