このモニターは、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 に再接続を試みます。
setspn コマンドにおいて /S または –A パラメーターを使用することもできます。後者は使用されなくなりますが、Windows Server の古いバージョン (2012, 2012 R2) ではまだ使用することができます。
仮想アカウント (たとえば、ローカル システムまたは NT Service\MSSQL Server) を使用した場合は、setspn コマンドの <Account> 値は、コンピューター ホスト名で提示される必要があります。
または、SQL サービス アカウントに適切なアクセス許可を与え、SQL が必要な SPN を自動的に生成できるようにします。
注: SPN が欠落していても接続失敗という結果にはなりませんが、アプリケーションは Kerberos 認証を使用できなくなります。
ケース 2: 間違っている SPN を解決する方法
1. 次のコマンドを実行して間違っている SPN を削除します。
setspn –D <SPN> <Account>
2. クライアント コンピューターで、ログオフして再度ログインするか、次のコマンドを実行して、Kerberos チケットのキャッシュを消去します。
klist による消去
3. クライアント アプリケーションを使用して SQL Server に再接続を試みます。
注: アプリケーションから Kerberos を使用するには、前のケース 1 の解決策を使用して正しい SPN を構成する必要があります。
ケース 3: 重複している SPN を解決する方法
1. 重複していて削除する必要がある SPN を特定します。
2. 次のコマンドを実行して、重複している各 SPN を削除します。
setspn –D <SPN> <Account>
3. クライアント コンピューターで、ログオフして再度ログインするか、次のコマンドを実行して、Kerberos チケットのキャッシュを消去します。
klist による消去
4. クライアント アプリケーションを使用して SQL Server に再接続を試みます。
名前 | 説明 | 既定値 |
アラートの優先度 | アラートの優先順位を定義します。 | 中 |
アラートの重要度 | アラートの重大度を定義します。 | 警告 |
有効 | ワークフローを有効または無効にします。 | はい |
アラートを生成する | ワークフローがアラートを生成するかどうかを定義します。 | はい |
間隔 (秒) | ワークフローを実行する定期的な実行間隔 (秒)。 | 900 |
検索範囲 | 検索範囲がドメインまたは組織単位の場合、LDAP 検索を使用します。 検索範囲がフォレストの場合、グローバル カタログ (GC) 検索を使用して、パーティション内のクエリを解決できます。 値のリスト: LDAP GC | LDAP |
同期時刻 | 24 時間形式で指定した同期時刻。省略可能です。 |
|
タイムアウト (秒) | ワークフローが終了して失敗とマークされるまでの、ワークフローの許容実行時間を指定します。 | 300 |
Target | Microsoft.SQLServer.2014.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.2014.DBEngine.Configuration.SPNStatus | ||
Remotable | True | ||
Accessibility | Public | ||
Alert Message |
| ||
RunAs | Default |
<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>