Cette analyse vérifie l'état de la configuration du nom de principal du service de l'instance Microsoft® SQL Server™.
Ce moniteur vérifie la configuration du nom de principal du service (SPN) de l'instance Microsoft® SQL Server™. Cette opération s'effectue en comparant la configuration du service SQL Server et celle du contrôleur de domaine.
Note that the monitor is always in "Healthy" state for non-domain joined machines.
Un nom de principal du service (SPN) pour le moteur de base de données de SQL Server peut être absent, mal placé ou bien dupliquer un autre SPN configuré dans l'environnement Active Directory du domaine.
Remarque : un SPN mal placé est un SPN qui est configuré sur le compte incorrect dans Active Directory.
Les programmes setspn.exe et klist.exe peuvent être utilisés pour résoudre le problème.
Ces deux outils sont fournis avec Windows Server 2008 et versions ultérieures. Concernant les versions antérieures de Windows, vous devrez peut-être télécharger ces composants séparément du Centre de téléchargement Microsoft ou vous les procurer dans le package d'outils de support de Windows.
Cas 1 : procédure pour résoudre un nom SPN manquant :
1. Exécutez la commande suivante pour ajouter le SPN manquant :
setspn –S <SPN> <Compte>
2. Essayez de rétablir la connexion à SQL Server avec votre application cliente.
Vous pouvez également utiliser le paramètre /S ou -A pour la commande setspn. Bien que ce dernier soit considéré comme déconseillé, il peut encore fonctionner dans les versions plus anciennes de Windows Server (2012, 2012 R2).
Notez que dans le cas de l'utilisation d'un compte virtuel (comme Système local ou NT Service\MSSQL Server), la valeur de <Compte> pour la commande setspn doit être présentée par le nom d'hôte de l'ordinateur. Sinon, vous pouvez fournir les autorisations appropriées au compte de service SQL pour permettre à SQL de générer automatiquement les noms de principaux du service nécessaires.
Remarque : Un SPN manquant peut ne pas entraîner un échec de connectivité, mais empêche l'application d'utiliser l'authentification Kerberos.
Cas 2 : Comment résoudre un SPN mal placé :
1. Exécutez la commande suivante pour supprimer le SPN mal placé :
setspn –D <Compte> <SPN>
2. Sur l’ordinateur client, fermez, puis rouvrez une session ou effacez le cache de ticket Kerberos en exécutant la commande suivante :
klist purge
3. Essayez de rétablir la connexion à SQL Server avec votre application cliente.
Remarque : Si vous voulez utiliser Kerberos à partir de votre application, vous devez configurer le SPN correct en utilisant la résolution du cas 1 ci-dessus.
Cas 3 : Comment résoudre un SPN en doublon :
1. Identifiez les SPN qui sont en double et doivent être supprimés.
2. Exécutez la commande suivante pour supprimer tous les noms SPN dupliqués :
setspn –D <Compte> <SPN>
3. Sur l’ordinateur client, fermez, puis rouvrez une session ou effacez le cache de ticket Kerberos en exécutant la commande suivante :
klist purge
4. Essayez de rétablir la connexion à SQL Server avec votre application cliente.
Vous pouvez rencontrer des problèmes de connectivité à SQL Server si les SPN sont mal configurés
Nom | Description | Valeur par défaut |
Priorité de l'alerte | Définit la priorité de l'alerte. | Normal |
Gravité de l'alerte | Définit la gravité de l'alerte. | Avertissement |
Activé | Active ou désactive le flux de travail. | Oui |
Génère des alertes | Définit si le flux de travail génère une alerte. | Oui |
Intervalle (en secondes) | L'intervalle de temps récurrent en secondes pendant lequel le workflow est exécuté. | 900 |
Étendue de la recherche | Utilisez une recherche LDAP quand l'étendue d'une recherche est un domaine ou une unité d'organisation. Quand l'étendue d'une recherche est la forêt, la requête peut être résolue dans n'importe quelle partition en utilisant une recherche dans le catalogue global (GC). Liste de valeurs : Catalogue global LDAP | LDAP |
Heure de synchronisation | L'heure de synchronisation spécifiée dans un format de 24 heures. Peut être omise. |
|
Délai d'expiration (en secondes) | Spécifie la durée pendant laquelle le workflow est autorisé à être exécuté avant d'être fermé et marqué comme un échec. | 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>