适用于SQL Server的 Kerberos Configuration Manager概述
适用于: SQL Server
原始 KB 编号: 2985455
网络中错误的 Kerberos 配置可能会导致 Microsoft SQL Server中出现各种连接错误。 适用于SQL Server的 Kerberos Configuration Manager是一种诊断工具,可帮助你排查影响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 实例和Always On可用性组侦听器的信息。
- 报告服务器上的所有服务主体名称 (SPN) 和委派配置。
- 确定 SPN 和委托中的潜在问题。
- 修复潜在的 SPN 问题。
使用方案
此工具可帮助你排查以下异常:
- 401
注意: 此错误消息适用于 HTTP 错误、SSRS 错误和其他类似错误。
- 无法生成 SSPI 上下文
- 用户“NTAUTHORITY\ANONYMOUS LOGON”登录失败
- 用户登录失败 '(null)'
- 用户登录失败, (空)
注意
在开始排查问题之前,建议先查看先决条件,然后完成常规清单,排查与连接相关的错误。
注意
如果对基于 SQL Server 的计算机具有管理员访问权限,还可以在该计算机上运行 SQL 连接设置检查工具,然后查看输出以检查 SQL Server 实例的 SPN 配置。
下载工具
可从 Microsoft 下载中心下载此工具:
适用于 SQL Server 的 Microsoft Kerberos Configuration Manager
注意
可以在域中可连接到基于 SQL Server 的计算机的任何计算机上下载并安装该工具。
权限
若要排查影响 SQL、SSRS 和 SSAS 的连接问题,请使用对该计算机具有管理权限的域用户帐户连接到承载服务) 的目标计算机 (。
可选:如果要使用该工具修复该工具标识的任何 SPN 问题,则域帐户应具有 “已验证对服务主体名称的写入” 权限。
使用工具
安装完成后,导航到安装文件夹,启动 KerberosConfigMgr.exe 二进制文件。 默认情况下,SQL Server的位置为 C:\Program Files\Microsoft\Kerberos Configuration Manager。
有关如何以管理员或其他用户身份启动应用的信息,请参阅 使用运行以管理员身份启动应用。
使用以下选项之一开始故障排除:
若要连接到基于远程SQL Server的计算机,请为“服务器名称”、“域用户名”和“密码”输入相应的值。
注意
Kerberos Configuration Manager工具使用 Windows API 来查询和显示有关SQL Server计算机的 Kerberos 配置的信息。 因此,始终输入托管 SQL Server 实例的计算机的名称,即使对命名实例的 Kerberos 相关问题进行故障排除也是如此。
若要连接到本地服务器,请选择“ 连接 ”以分析 Kerberos 配置。 在这种情况下,无需指定服务器名称、域用户名或密码。
注意
启动该工具的帐户应是本地管理员帐户。 有关如何以管理员或其他用户身份启动应用的信息,请参阅 使用运行以管理员身份启动应用。
连接成功后,以下屏幕截图中显示了所有相关 SPN。
在此屏幕截图中,UI 具有以下选项卡:
系统:显示用户信息和计算机信息。
SPN:显示服务主体名称 (SPN) 有关目标服务器上找到的每个SQL Server实例的信息,并提供所需的 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 Connections注册服务主体名称。
委派:使用 委派 标识影响服务帐户的委派配置的任何问题。 这对于排查链接服务器问题特别有用。 例如,如果 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服务”。
在“详细信息”中,为
<instance name>
选择“SQL Server”。选择“重启”以停止并重启SQL Server服务。 有关详细信息,请参阅 启用或禁用服务器网络协议部分。
状态 - 动态端口
详细信息:对于使用动态端口 (默认配置) 的命名实例,将显示此状态。 在需要使用 Kerberos 连接到SQL Server的环境中,应将命名实例设置为使用静态端口,并在注册 SPN 时使用该端口。 否则,在 Active Directory 中注册的 SPN 将在下一次命名实例开始侦听新端口(而不是 SPN 注册到的端口)时,在 Active Directory 中注册的 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 地址。 对于设置为 Enabled 的地址,删除 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 Connections注册服务主体名称。
注意
在群集化 SQL 的环境中,不建议自动注册 SPN,因为在 Active Directory 中注销 SPN 和重新注册 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
。 - 选择工具栏上的 “帮助 ”按钮。