此监视器检查 Microsoft® SQL Server™ 实例服务主体名称配置的状态。
此监视器检查 Microsoft® SQL Server™ 实例的服务主体名称(SPN)的配置。这是通过将 SQL Server 服务和域控制器配置进行比较实现的。
SQL Server 数据库引擎的服务主体名称 (SPN) 可能缺失、错误放置或者与域的 Active Directory 中配置的其他 SPN 重复。
注意: 错误放置的 SPN 是在 Active Directory 中的错误帐户上配置的 SPN。
可以使用 setspn.exe 和 klist.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。
Target | Microsoft.SQLServer.2008.DBEngine | ||
Parent Monitor | System.Health.ConfigurationState | ||
Category | AvailabilityHealth | ||
Enabled | True | ||
Alert Generate | True | ||
Alert Severity | Warning | ||
Alert Priority | Normal | ||
Alert Auto Resolve | True | ||
Monitor Type | Microsoft.SQLServer.2008.DBEngine.Configuration.SPNStatus | ||
Remotable | True | ||
Accessibility | Public | ||
Alert Message |
| ||
RunAs | Default |
<UnitMonitor ID="Microsoft.SQLServer.2008.DBEngine.Configuration.SPNStatusMonitor" Accessibility="Public" Enabled="true" Target="SQL2008Core!Microsoft.SQLServer.2008.DBEngine" ParentMonitorID="SystemHealth!System.Health.ConfigurationState" Remotable="true" Priority="Normal" TypeID="Microsoft.SQLServer.2008.DBEngine.Configuration.SPNStatus" ConfirmDelivery="false">
<Category>AvailabilityHealth</Category>
<AlertSettings AlertMessage="Microsoft.SQLServer.2008.DBEngine.Configuration.SPNStatusMonitor.AlertMessage">
<AlertOnState>Warning</AlertOnState>
<AutoResolve>true</AutoResolve>
<AlertPriority>Normal</AlertPriority>
<AlertSeverity>Warning</AlertSeverity>
<AlertParameters>
<AlertParameter1>$Target/Property[Type="SQL!Microsoft.SQLServer.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="SQL!Microsoft.SQLServer.ServerRole"]/InstanceName$</InstanceName>
<Account>$Target/Property[Type="SQL!Microsoft.SQLServer.DBEngine"]/Account$</Account>
<ServiceName>$Target/Property[Type="SQL!Microsoft.SQLServer.DBEngine"]/ServiceName$</ServiceName>
<IntervalSeconds>900</IntervalSeconds>
<SyncTime/>
<TimeoutSeconds>300</TimeoutSeconds>
<SearchScope>LDAP</SearchScope>
</Configuration>
</UnitMonitor>