此监视器将检查 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 –S <SPN> <帐户>
2. 尝试使用你的客户端应用程序重新连接到 SQL Server。
你还可以使用 /S 或–A 参数来执行 setspn 命令。尽管后者被认为是过时的,但它仍可以在旧版的 Windows Server 版本(2012、2012 R2)中运行。
请注意,如果使用虚拟帐户(如本地系统或 NT 服务\MSSQL Server),则应由计算机主机名显示 setspn 命令的 <Account> 值。
或者,您可以向 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。
名称 | 说明 | 默认值 |
警报优先级 | 定义警报优先级。 | 正常 |
警报严重性 | 定义警报严重性。 | 警告 |
已启用 | 启用或禁用工作流。 | 是 |
生成警报 | 定义工作流是否生成警报。 | 是 |
间隔(秒) | 运行工作流的重复间隔时间(秒)。 | 900 |
搜索范围 | 当搜索范围为域或组织单元时,使用 LDAP 搜索。 当搜索范围为林时,可通过使用全局编录 (GC) 搜索在任何分区内解析查询。 值列表: LDAP GC | LDAP |
同步时间 | 使用 24 小时格式指定的同步时间。可以忽略。 |
|
超时(秒) | 指定工作流在关闭之前允许运行的时间,并标记为失败。 | 300 |
Target | Microsoft.SQLServer.Windows.LocalDBEngine | ||
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.Windows.DBEngine.Configuration.SPNStatus | ||
Remotable | True | ||
Accessibility | Public | ||
Alert Message |
| ||
RunAs | Default |
<UnitMonitor ID="Microsoft.SQLServer.Windows.DBEngine.Configuration.SPNStatusMonitor" Accessibility="Public" Enabled="true" Target="SqlDiscW!Microsoft.SQLServer.Windows.LocalDBEngine" ParentMonitorID="Health!System.Health.ConfigurationState" Remotable="true" Priority="Normal" TypeID="Microsoft.SQLServer.Windows.DBEngine.Configuration.SPNStatus" ConfirmDelivery="false">
<Category>AvailabilityHealth</Category>
<AlertSettings AlertMessage="Microsoft.SQLServer.Windows.DBEngine.Configuration.SPNStatusMonitor.AlertMessage">
<AlertOnState>Warning</AlertOnState>
<AutoResolve>true</AutoResolve>
<AlertPriority>Normal</AlertPriority>
<AlertSeverity>Warning</AlertSeverity>
<AlertParameters>
<AlertParameter1>$Data/Context/Property[@Name='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>
<MachineName>$Target/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/MachineName$</MachineName>
<InstanceName>$Target/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/InstanceName$</InstanceName>
<ConnectionString>$Target/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/ConnectionString$</ConnectionString>
<MonitoringType>$Target/Property[Type="SqlDiscW!Microsoft.SQLServer.Windows.DBEngine"]/MonitoringType$</MonitoringType>
<SqlTimeoutSeconds>15</SqlTimeoutSeconds>
<TimeoutSeconds>300</TimeoutSeconds>
<IntervalSeconds>900</IntervalSeconds>
<SyncTime/>
<PrincipalName>$Target/Property[Type="SqlDiscW!Microsoft.SQLServer.Windows.DBEngine"]/PrincipalName$</PrincipalName>
<SearchScope>LDAP</SearchScope>
</Configuration>
</UnitMonitor>