此监视器检查 Microsoft® SQL Server™ 实例服务主体名称配置的状态。
此监视器检查 Microsoft® SQL Server™ 实例的服务主体名称(SPN)的配置。这是通过将 SQL Server 服务和域控制器配置进行比较来执行的。
Note that the monitor is always in "Healthy" state for non-domain joined machines.
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 Service\MSSQL Server),则应由计算机主机名显示 setspn 命令的 <帐户> 值。此外,你可以向 SQL 服务帐户提供适当的权限以允许 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。
You may experience connectivity issues to SQL Server if SPNs are misconfigured(如果错误配置 SPN,你可能会遇到针对 SQL Server 的连接问题)
名称 | 说明 | 默认值 |
警报优先级 | 定义警报优先级。 | 正常 |
警报严重性 | 定义警报严重性。 | 警告 |
已启用 | 启用或禁用工作流。 | 是 |
生成警报 | 定义工作流是否生成警报。 | 是 |
间隔(秒) | 运行工作流的重复间隔时间(秒)。 | 900 |
搜索范围 | 当搜索范围为域或组织单元时,使用 LDAP 搜索。当搜索范围为林时,可通过使用全局编录(GC)搜索在任何分区内解析查询。值列表: LDAP GC | LDAP |
同步时间 | 使用 24 小时格式指定的同步时间。可以忽略。 |
|
超时(秒) | 指定允许工作流在被关闭并标记为失败之前运行的时间。 | 300 |
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>