Состояние настройки имени участника-службы

Microsoft.SQLServer.2016.DBEngine.Configuration.SPNStatusMonitor (UnitMonitor)

Этот монитор проверяет состояние конфигурации имени службы-участника экземпляра Microsoft SQL Server.

Knowledge Base article:

Сводка

Этот монитор проверяет конфигурацию имени субъекта-службы (SPN) экземпляра Microsoft SQL Server путем сравнения конфигураций службы SQL Server и контроллера домена.

Note that the monitor is always in "Healthy" state for non-domain joined machines.

Причины

Имя субъекта-службы (SPN) для ядра СУБД SQL Server отсутствует, перемещено или совпадает с другим именем субъекта-службы, настроенным в домене Active Directory.

Примечание. Перемещенное имя участника-службы — это имя участника-службы, настроенное для неправильно указанной учетной записи в Active directory.

Решения

Для решения этой проблемы можно использовать программы setspn.exe и klist.exe.

Обе эти программы поставляются в Windows Server 2008 и более поздних версиях. Для предыдущих версий Windows можно загрузить их отдельно в Центре загрузки Майкрософт или получить из пакета средств поддержки Windows.

Случай 1. Разрешение проблемы при отсутствии имени участника-службы.

1. Выполните следующую команду для добавления отсутствующего имени субъекта-службы SPN:

setspn –S <имя_субъекта-службы> <учетная_запись>

2. Попробуйте заново подключиться к SQL Server из клиентского приложения.

Также можно использовать параметр /S или –A для команды setspn. Хотя последний параметр считается устаревшим, он продолжает работать в старых версиях Windows Server (2012, 2012 R2).

Обратите внимание, что при использовании виртуальной учетной записи (например, Local System или NT Service\MSSQL Server) значение <учетная запись> для команды setspn должно содержаться в имени узла компьютера.

Кроме того, можно предоставить необходимые разрешения учетной записи службы SQL, чтобы разрешить SQL автоматически формировать нужные имена участников-служб.

Примечание. Отсутствующее имя субъекта-службы может не привести к ошибке обмена данными, но не дает приложению использовать проверку подлинности Kerberos.

Случай 2. Разрешение проблемы при перемещенном имени участника-службы.

1. Выполните следующую команду для удаления перемещенного имени субъекта-службы SPN:

setspn –D <SPN> <учетная_запись>

2. На клиентском компьютере либо выйдите из системы и войдите снова, либо сбросьте кэш билетов Kerberos, выполнив следующую команду:

klist purge

3. Попробуйте повторно подключиться к SQL Server из клиентского приложения.

Примечание. Если вы хотите использовать протокол Kerberos из приложения, необходимо настроить правильное имя субъекта-службы, используя приведенное выше решение для случая 1.

Случай 3. Разрешение проблемы при повторяющемся имени участника-службы.

1. Определите SPN, которые дублируются и должны быть удалены.

2. Выполните следующую команду, чтобы удалить все дублирующиеся имена служб-участников:

setspn –D <SPN> <учетная_запись>

3. На клиентском компьютере либо выйдите из системы и войдите снова, либо сбросьте кэш билетов Kerberos, выполнив следующую команду:

klist purge

4. Попробуйте повторно подключиться к SQL Server из клиентского приложения.

Переопределяемые параметры

Название

Описание

Значение по умолчанию

Приоритет предупреждения

Определяет приоритет предупреждения.

Обычные

Серьезность предупреждения

Определяет серьезность предупреждения.

Предупреждение

Включено

Включает или отключает рабочий процесс.

Да

Создает предупреждения

Определяет, создает ли рабочий процесс предупреждения.

Да

Интервал (в секундах)

Повторяющийся интервал времени в секундах, по истечении которого запускается рабочий процесс.

900

Область поиска

Используйте поиск LDAP, если областью поиска является домен или организационная единица. Если областью поиска является лес, запрос можно разрешить в любом разделе с использованием поиска в глобальном каталоге (GC). Список значений: LDAP GC

LDAP

Время синхронизации

Время синхронизации указывается в 24-часовом формате и может быть опущено.

 

Время ожидания (в секундах)

Определяет время, в течение которого возможно выполнение рабочего процесса перед закрытием и пометкой как сбойный.

300

Element properties:

TargetMicrosoft.SQLServer.2016.DBEngine
Parent MonitorSystem.Health.ConfigurationState
CategoryAvailabilityHealth
EnabledTrue
Alert GenerateTrue
Alert SeverityWarning
Alert PriorityNormal
Alert Auto ResolveTrue
Monitor TypeMicrosoft.SQLServer.2016.DBEngine.Configuration.SPNStatus
RemotableTrue
AccessibilityPublic
Alert Message
MSSQL 2016: SQL Server не может проверить подлинность с помощью Kerberos, потому что имя службы-участника (SPN) отсутствует, неправильно размещено или дублируется.
SQL Server не может проверить подлинность с помощью Kerberos, потому что имя службы-участника (SPN) отсутствует, неправильно размещено или дублируется.
Учетная запись службы: {0}
Отсутствующие SPN: {1}
Неправильно размещенные SPN: {2}
Дублирующиеся SPN: {3}
RunAsDefault

Source Code:

<UnitMonitor ID="Microsoft.SQLServer.2016.DBEngine.Configuration.SPNStatusMonitor" Accessibility="Public" Enabled="true" Target="SQL2016Core!Microsoft.SQLServer.2016.DBEngine" ParentMonitorID="SystemHealth!System.Health.ConfigurationState" Remotable="true" Priority="Normal" TypeID="Microsoft.SQLServer.2016.DBEngine.Configuration.SPNStatus" ConfirmDelivery="false">
<Category>AvailabilityHealth</Category>
<AlertSettings AlertMessage="Microsoft.SQLServer.2016.DBEngine.Configuration.SPNStatusMonitor.AlertMessage">
<AlertOnState>Warning</AlertOnState>
<AutoResolve>true</AutoResolve>
<AlertPriority>Normal</AlertPriority>
<AlertSeverity>Warning</AlertSeverity>
<AlertParameters>
<AlertParameter1>$Target/Property[Type="SQL2016Core!Microsoft.SQLServer.2016.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="SQL2016Core!Microsoft.SQLServer.2016.ServerRole"]/InstanceName$</InstanceName>
<Account>$Target/Property[Type="SQL2016Core!Microsoft.SQLServer.2016.DBEngine"]/Account$</Account>
<ServiceName>$Target/Property[Type="SQL2016Core!Microsoft.SQLServer.2016.DBEngine"]/ServiceName$</ServiceName>
<IntervalSeconds>900</IntervalSeconds>
<SyncTime/>
<TimeoutSeconds>300</TimeoutSeconds>
<SearchScope>LDAP</SearchScope>
</Configuration>
</UnitMonitor>