适用于 SQL Server 的 Kerberos Configuration Manager 概述
适用范围:SQL Server
原始 KB 数: 2985455
网络中不正确的 Kerberos 配置可能会导致MICROSOFT SQL Server 中的各种连接错误。 适用于 SQL Server 的 Kerberos Configuration Manager 是一种诊断工具,可帮助你排查与 Kerberos 相关的连接问题,这些问题会影响 SQL Server、SQL Server Reporting Services (SSRS)和 SQL Server Analysis Services (SSAS)。 本文介绍如何使用 Kerberos Configuration Manager 工具以及如何解释该工具的输出以修复影响 SQL Server 的 Kerberos 问题。
注意
Kerberos Configuration Manager 按原样提供,不提供任何技术支持或更新。 尚未更新为使用 SQL Server 2022 及更高版本的 WMI 提供程序。 若要排查和诊断与 SQL Server 相关的 Kerberos 配置问题,请参阅 SQLCheck。
Kerberos Configuration Manager 的函数
Kerberos Configuration Manager 可以执行以下任务:
- 收集有关服务器上安装的 OS、Microsoft SQL Server 实例和 AlwaysOn 可用性组侦听器的信息。
- 报告服务器上的所有服务主体名称(SPN)和委派配置。
- 确定 SPN 和委派中的潜在问题。
- 修复潜在的 SPN 问题。
使用方案
此工具可帮助你排查以下异常:
- 401
注意: 此错误消息适用于 HTTP 错误、SSRS 错误和其他类似错误。
- 无法生成 SSPI 上下文
- 用户“NTAUTHORITY\ANONYMOUS LOGON”登录失败
- 用户登录失败 '(null)'
- 用户登录失败(空)
注意
在开始排查问题之前,建议查看先决条件,然后浏览常规清单以排查与连接相关的错误。
注意
如果具有对基于 SQL Server 的计算机的管理员访问权限,还可以在该计算机上运行 SQL 连接设置检查工具,然后查看输出以检查 SQL Server 实例的 SPN 配置。
下载工具
此工具可从Microsoft下载中心下载:
Microsoft适用于 SQL Server 的 Kerberos Configuration Manager
注意
可以在域中可连接到基于 SQL Server 的计算机的任何计算机上下载并安装该工具。
权限
若要排查影响 SQL、SSRS 和 SSAS 的连接问题,请使用对该计算机具有管理权限的域用户帐户连接到目标计算机(承载服务)。
可选:如果要使用该工具修复该工具标识的任何 SPN 问题,域帐户应具有 对服务主体名称 权限的验证写入。
使用工具
安装完成后,导航到安装文件夹,启动 KerberosConfigMgr.exe 二进制文件。 默认情况下,位置为 C:\Program Files\Microsoft\Kerberos Configuration Manager for SQL Server。
有关如何以管理员或其他用户身份启动应用的信息,请参阅 “使用运行”以管理员身份启动应用。
使用以下选项之一开始故障排除:
若要连接到基于 SQL Server 的远程计算机,请输入服务器 名称、 域名和 密码的适当值。
注意
Kerberos Configuration Manager 工具使用 Windows API 查询和显示有关 SQL Server 计算机的 Kerberos 配置的信息。 因此,始终输入托管 SQL Server 实例的计算机的名称,即使对命名实例的 Kerberos 相关问题进行故障排除也是如此。
若要连接到本地服务器,请选择“连接”以分析 Kerberos 配置。 在这种情况下,无需指定服务器名称、域用户名或密码。
注意
启动该工具的帐户应该是本地管理员帐户。 有关如何以管理员或其他用户身份启动应用的信息,请参阅 “使用运行”以管理员身份启动应用。
连接成功后,以下屏幕截图中显示了所有相关 SPN。
在此屏幕截图中,UI 具有以下选项卡:
系统:显示用户信息和计算机信息。
SPN:显示有关目标服务器上找到的每个 SQL Server 实例的服务主体名称(SPN)信息,并提供所需的 SPN 及其状态等详细信息。
生成:帮助你查找缺失和配置的 SPN。 它还有助于生成 SPN 生成脚本。
- 然后选择“生成” 。
- 在打开的对话框中,提供名称(在本例中为“generateSPNs”),将“另存为类型”设置为 Kerberos Config Mgr(.cmd)文件,然后选择“保存”。
generateSPNss.cmd文件已创建,可以在命令提示符下运行此文件。 generateSPNss.cmd文件的内容类似于以下示例:
:: This script is generated by the Microsoft® SQL Server® Kerberos Configuration Manager tool.
:: The script may update the system information, SPN settings and Delegation configurations of a given server.
:: SPN and Delegation configuration updates require Windows Domain Administrator permission to execute.
:: A Domain Admin should review the configurations recommended by this tool and take appropriate actions to enable Kerberos authentication.
:: Please contact Microsoft Support if Kerberos connection problem persists.
:: The file is intended to be run in domain `<DomainName>.com`"
:: Corrections for MSSQLSvc/`<HostName>.<DomainName>.com` **SetSPN -s MSSQLSvc/`<HostName>`. `<DomainName>`.com UserName**
使用 SetSPN 在 SQL Server 的服务帐户下创建 SPN。
使用 “修复” 修复问题并添加 SPN。 仅当具有所需权限时,才能添加 SPN。 选择“修复”时,将显示以下工具提示:
注意
该工具仅针对具有静态端口的默认实例和命名实例提供 Fix 和 Generate 命令。 对于使用动态端口的命名实例,我们建议你从动态端口切换到静态端口,或者为服务帐户提供必要的权限,以便在每次启动 SQL 服务时注册和注销 SPN。 否则,必须在启动服务时手动注销并重新注册相应的 SPN。 有关详细信息,请参阅 为 Kerberos 连接注册服务主体名称。
委派:使用 委派 确定影响服务帐户配置委派的任何问题。 这对于排查链接服务器问题特别有用。 例如,如果 SPN 签出正常,但仍遇到影响链接服务器查询的问题,这可能表示服务帐户未配置为委托凭据。 有关详细信息,请参阅“为委派配置链接服务器”中的联机丛书主题。
解释和操作 Kerberos Configuration Manager 中的诊断
通过引用“状态”列查看工具的诊断。 根据状态,按照相应的步骤解决问题。
状态 - 良好
详细信息:检查的项目已正确配置。 转到输出中的下一项。
操作:无需执行任何操作。
状态 - 缺少必需的 SPN
详细信息:如果 Active Directory 中 SQL Server 启动帐户缺少所需的 SPN 列中提到的服务主体名称(SPN ),则会报告此状态。
操作:按照以下步骤检查 SPN 问题是否已解决:
- 选择“修复”以查看“警告”对话框中的信息。
- 选择“是”,将缺少的 SPN 添加到 Active Directory。
- 如果域帐户具有更新 Active Directory 所需的权限,则所需的 SPN 将添加到 Active Directory。
- 如果域帐户没有更新 Active Directory 所需的权限,请使用“生成”或“生成全部”来生成脚本,以帮助 Active Directory 管理员添加缺少的 SPN。
- 添加 SPN 后,再次运行 Kerberos Configuration Manager 以验证是否已解决 SPN 问题。
状态 - 必须启用 TCP 才能使用 Kerberos 配置。
详细信息:如果未在客户端计算机上启用 TCP,则会显示此状态。
操作:按照以下步骤为 SQL Server 实例启用 TCP/IP 协议:
在 SQL Server 配置管理器 - 控制台中,展开 SQL Server 网络配置。
在控制台中,选择 “协议” 。
<instance name>
在“详细信息”中,选择“TCP/IP”,然后选择“启用”。
在 控制台中,选择 “SQL Server 服务”。
在“详细信息”中,选择 SQL Server for
<instance name>
.选择“重启”以停止并重启 SQL Server 服务。 有关详细信息,请参阅 “启用或禁用服务器网络协议”部分。
状态 - 动态端口
详细信息:对于使用动态端口(默认配置)的命名实例,将显示此状态。 在需要使用 Kerberos 连接到 SQL Server 的环境中,应将命名实例设置为使用静态端口,并在注册 SPN 时使用该端口。 否则,在 Active Directory 中注册的 SPN 下次开始侦听 SPN 时,除 SPN 注册到的新端口之外,命名实例将失效。
注意
此建议仅适用于依赖于手动 SPN 注册的环境。
操作:按照以下步骤将 SQL Server 实例配置为使用静态端口:
- 在 SQL Server 配置管理器 - 控制台中,展开 SQL Server 网络配置,展开协议,
<instance name>
然后双击 TCP/IP。 - 在 TCP/IP 属性中,选择“协议中的所有侦听”。
- 如果 “全部 侦听”设置为 “是”,请切换到 IP 地址,并滚动到窗口底部以查找 IPAll 设置。
- 删除 TCP 动态端口中的当前值,并在 TCP 端口中输入端口号。
- 选择“确定”,然后重启 SQL Server 实例。 有关详细信息,请参阅配置服务器以侦听特定 TCP 端口。
- 如果 “全部 侦听”设置为 “否”,请切换到 IP 地址,并检查 IP1 和 IP2 节点中显示的每个 IP 地址。 对于设置为“已启用”的地址,请删除 TCP 动态端口中的当前值,然后在 TCP 端口中设置值。
- 选择“确定”,然后重启 SQL Server 实例,使设置生效。 有关详细信息,请参阅配置服务器以侦听特定 TCP 端口。
- 在 SQL Server 配置管理器 - 控制台中,展开 SQL Server 网络配置,展开协议,
状态 - 重复 SPN
详细信息:如果在 Active Directory 中的不同帐户下注册了同一 SPN,则可能会遇到这种情况。
操作:按照以下步骤将 SPN 添加到 Active Directory:
选择“修复”。
选中“警告”对话框中的信息。
选择“是”,将缺少的 SPN 添加到 Active Directory。
如果域帐户具有更新 Active Directory 所需的权限,将删除不正确的 SPN。
如果域帐户没有更新 Active Directory 的必要权限,请使用“生成”或“生成全部”来生成可提供给 Active Directory 管理员以删除重复 SPN 的必要脚本。
删除 SPN 后,重新运行 Kerberos Configuration Manager 以验证是否已解决 SPN 问题。
注意
当 SQL Server 数据库引擎 的实例启动时,SQL Server 将尝试为 SQL Server 服务注册 SPN。 实例停止时,SQL Server 将尝试取消此 SPN 的注册。 为此,SQL Server 服务帐户需要 Active Directory 中的相应权限。 但是,如果服务帐户没有这些权限,则不会发生自动 SPN 注册,并且你必须与 Active Directory 管理员合作来注册这些 SPN,以便 SQL 实例可以启用 Kerberos 身份验证。 有关详细信息,请参阅 为 Kerberos 连接注册服务主体名称。
注意
在群集 SQL 的环境中,不建议自动注册 SPN,因为可能需要花费更多时间来注销 SPN 并在 Active Directory 中重新注册 SPN,而不是 SQL Server 联机所需的时间。 如果 SPN 注册未及时发生,这可能会阻止 SQL Server 联机,因为群集管理员无法连接到 SQL Server 实例。
其他选项
若要从命令行生成 SPN 列表,
转到命令行。
注意
若要排查影响 SSRS 的连接问题,请打开管理命令提示符窗口。
切换到包含 KerberosConfigMgr.exe的文件夹。
输入
KerberosConfigMgr.exe -q -l
。有关更多命令行选项,请键入
KerberosConfigMgr.exe -h
。
保存服务器的 Kerberos 配置信息:
- 连接到目标 Windows 服务器。
- 选择“保存”。
- 指定要将文件保存到的位置。 它可以位于本地驱动器或网络共享上。 该文件将以.xml格式保存。
若要查看保存文件中服务器的 Kerberos 配置信息,请执行以下操作:
- 选择“加载”。
- 打开 Kerberos Configuration Manager 生成的 XML 文件。
若要查看此工具的日志文件,请执行以下操作:
默认情况下,每次应用程序在应用程序数据文件夹中运行时都会生成一个日志文件: %APPDATA%\Microsoft\KerberosConfigMgr。
若要获取帮助,请使用以下任一方法:
- 将鼠标指针悬停在命令上以生成工具提示。
- 在命令提示符下运行
KerberosConfigMgr.exe -h
。 - 选择 工具栏上的“帮助 ”按钮。