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

Microsoft.SQLServer.2012.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 Database Engine отсутствует, перемещено или повторяется с другим именем участника-службы, настроенным в Active Directory домена.

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

Решения

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

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

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

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

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

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

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

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

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

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

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

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

очистка klist

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

Внешнее

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

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

Имя

Описание

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

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

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

Обычные

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

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

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

Включено

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

Да

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

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

Да

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

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

900

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

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

LDAP

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

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

 

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

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

300

Element properties:

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

Source Code:

<UnitMonitor ID="Microsoft.SQLServer.2012.DBEngine.Configuration.SPNStatusMonitor" Accessibility="Public" Enabled="true" Target="SQL2012Core!Microsoft.SQLServer.2012.DBEngine" ParentMonitorID="SystemHealth!System.Health.ConfigurationState" Remotable="true" Priority="Normal" TypeID="Microsoft.SQLServer.2012.DBEngine.Configuration.SPNStatus" ConfirmDelivery="false">
<Category>AvailabilityHealth</Category>
<AlertSettings AlertMessage="Microsoft.SQLServer.2012.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>