服务主体名称配置状态

Microsoft.SQLServer.2014.DBEngine.Configuration.SPNStatusMonitor (UnitMonitor)

此监视器将检查 Microsoft SQL Server 实例服务主体名称配置的状态。

Knowledge Base article:

摘要

此监视器将检查 Microsoft SQL Server 实例的服务主体名称(SPN)的配置。这是通过将 SQL Server 服务和域控制器配置进行比较实现的。

原因

SQL Server 数据库引擎的服务主体名称 (SPN) 可能缺失、错误放置或者与域的 Active Directory 中配置的其他 SPN 重复。

注意: 错误放置的 SPN 是在 Active Directory 中的错误帐户上配置的 SPN。

解决方法

可以使用 setspn.exeklist.exe 程序解决该问题。

在 Windows Server 2008 和更高版本中随附这两种工具。对于之前的 Windows 版本,您可能需要单独从 Microsoft 下载中心下载这两种工具,或者从 Windows 支持工具包获取它们。

情况 1: 如何解决缺失的 SPN:

1. 运行以下命令以便添加缺失的 SPN:

setspn –A <SPN> <帐户>

2. 尝试使用您的客户端应用程序重新连接到 SQL Server。

或者,您可以向 SQL Service 帐户提供正确权限,以便允许 SQL 自动生成所需的 SPN。

注意: 缺失的 SPN 可能不会导致连接失败,但将阻止应用程序使用 Kerberos 身份验证。

情况 2: 如何解决错误放置的 SPN:

1. 运行以下命令以解决错误放置的 SPN:

setspn –D <SPN> <帐户>

2. 在客户端计算机上,或者注销后重新登录,或者通过运行以下命令清除 Kerberos 票证缓存:

klist purge

3. 尝试使用您的客户端应用程序重新连接到 SQL Server。

注意: 如果您想要从您的应用程序使用 Kerberos,则需要使用上面的情况 1 中的解决方法配置正确的 SPN。

情况 3: 如何解决重复的 SPN:

1. 标识重复并且必须删除的 SPN。

2. 运行以下命令以删除每个重复的 SPN:

setspn –D <SPN> <帐户>

3. 在客户端计算机上,或者注销后重新登录,或者通过运行以下命令清除 Kerberos 票证缓存:

klist purge

4. 尝试使用您的客户端应用程序重新连接到 SQL Server。

外部

如果错误配置 SPN,您可能会遇到针对 SQL Server 的连接问题

可替代参数

名称

说明

默认值

已启用

 

生成警报

 

间隔(秒)

运行工作流的重复间隔时间(秒)。

900

同步时间

使用 24 小时格式指定的同步时间。可以忽略。

 

超时(秒)

指定允许工作流在被关闭并标记为失败之前运行的时间。

300

搜索范围

当搜索范围为域或组织单元时,使用 LDAP 搜索。 当搜索范围为林时,可通过使用全局编录 (GC) 搜索在任何分区内解析查询。 值列表: LDAP GC

LDAP

Element properties:

TargetMicrosoft.SQLServer.2014.DBEngine
Parent MonitorSystem.Health.ConfigurationState
CategoryAvailabilityHealth
EnabledTrue
Alert GenerateTrue
Alert SeverityWarning
Alert PriorityNormal
Alert Auto ResolveTrue
Monitor TypeMicrosoft.SQLServer.2014.DBEngine.Configuration.SPNStatus
RemotableTrue
AccessibilityPublic
Alert Message
MSSQL 2014: SQL Server 无法使用 Kerberos 进行身份验证,因为服务主体名称(SPN)缺失、错误放置或重复。
SQL Server 无法使用 Kerberos 进行身份验证,因为服务主体名称(SPN)缺失、错误放置或重复。
服务帐户: {0}
缺失的 SPN: {1}
错误放置的 SPN: {2}
重复的 SPN: {3}
RunAsDefault

Source Code:

<UnitMonitor ID="Microsoft.SQLServer.2014.DBEngine.Configuration.SPNStatusMonitor" Accessibility="Public" Enabled="true" Target="SQL2014Core!Microsoft.SQLServer.2014.DBEngine" ParentMonitorID="SystemHealth!System.Health.ConfigurationState" Remotable="true" Priority="Normal" TypeID="Microsoft.SQLServer.2014.DBEngine.Configuration.SPNStatus" ConfirmDelivery="false">
<Category>AvailabilityHealth</Category>
<AlertSettings AlertMessage="Microsoft.SQLServer.2014.DBEngine.Configuration.SPNStatusMonitor.AlertMessage">
<AlertOnState>Warning</AlertOnState>
<AutoResolve>true</AutoResolve>
<AlertPriority>Normal</AlertPriority>
<AlertSeverity>Warning</AlertSeverity>
<AlertParameters>
<AlertParameter1>$Target/Property[Type="SQL2014Core!Microsoft.SQLServer.2014.DBEngine"]/Account$</AlertParameter1>
<AlertParameter2>$Data/Context/Property[@Name='MissingSpnList']$</AlertParameter2>
<AlertParameter3>$Data/Context/Property[@Name='MisplacedSpnList']$</AlertParameter3>
<AlertParameter4>$Data/Context/Property[@Name='DuplicateSpnList']$</AlertParameter4>
</AlertParameters>
</AlertSettings>
<OperationalStates>
<OperationalState ID="Good" MonitorTypeStateID="Good" HealthState="Success"/>
<OperationalState ID="Bad" MonitorTypeStateID="Bad" HealthState="Warning"/>
</OperationalStates>
<Configuration>
<ComputerNetworkName>$Target/Host/Property[Type="Windows!Microsoft.Windows.Computer"]/NetworkName$</ComputerNetworkName>
<NetbiosComputerName>$Target/Host/Property[Type="Windows!Microsoft.Windows.Computer"]/NetbiosComputerName$</NetbiosComputerName>
<InstanceName>$Target/Property[Type="SQL2014Core!Microsoft.SQLServer.2014.ServerRole"]/InstanceName$</InstanceName>
<Account>$Target/Property[Type="SQL2014Core!Microsoft.SQLServer.2014.DBEngine"]/Account$</Account>
<ServiceName>$Target/Property[Type="SQL2014Core!Microsoft.SQLServer.2014.DBEngine"]/ServiceName$</ServiceName>
<IntervalSeconds>900</IntervalSeconds>
<SyncTime/>
<TimeoutSeconds>300</TimeoutSeconds>
<SearchScope>LDAP</SearchScope>
</Configuration>
</UnitMonitor>