Как настроить SPN (Service Principal Name) в SQL Server и динамическая регистрация SPN

Как настроить SPN (Service Principal Name) в SQL Server и динамическая регистрация SPN-01

Всем привет, сегодня хочу вам рассказать как настраивать SPN в Active Directory, на примере SPN для MS SQL Server 2012. В процессе загрузки свежее установленного экземпляра SQL Server в его логе можно обнаружить ошибку регистрации SPN, в случае если службы SQL Server запускаются от имени пользовательской доменной учетной записи. Необходимо зарегистрировать имя участника-службы (SPN — Service Principal Name) для учетной записи службы SQL Server, чтобы в работе службы могла использоваться проверка подлинности с помощью протокола Kerberos.

Для того чтобы получить информацию о том, что на доменной учетной записи, от имени которой производится запуск SQL Server действительно не зарегистрировано SPN связанных с SQL с помощью утилиты SetSPN выполним команду:

SetSPN -L <domainSQL Service Account>

В нашем примере KOM-AD01-DB03 — это имя сервера SQL, а s-KOM-AD01-DB03-SQL01 — это имя пользовательской доменной учетной записи, из под которой запускаются службы SQL Server на этом сервере.

Как настроить SPN (Service Principal Name) в SQL Server и динамическая регистрация SPN-02
Как настроить SPN (Service Principal Name) в SQL Server и динамическая регистрация SPN-02

Как мы видим, ни на учетной записи компьютера ни на учетной записи пользователя нет SPN содержащих указатели MSSQLSvc. Помимо утилиты SetSPN мы можем воспользоваться оснасткой “AD Users and Computers” (dsa.msc) с включенным режимом отображения дополнительных компонент…

Как настроить SPN (Service Principal Name) в SQL Server и динамическая регистрация SPN-03
Как настроить SPN (Service Principal Name) в SQL Server и динамическая регистрация SPN-03

открыв свойства соответствующей учётной записи и перейдя на вкладку редактирования атрибутов можно посмотреть и изменить значение атрибута servicePrincipalName

Как настроить SPN (Service Principal Name) в SQL Server и динамическая регистрация SPN-04
Как настроить SPN (Service Principal Name) в SQL Server и динамическая регистрация SPN-04

Особенности работы с Kerberos аутентификацией в SQL Server (и в частности управление SPN) рассмотрены в статье KB319723 — How to use Kerberos authentication in SQL Server

Для того чтобы обеспечить нужное для корректной работы Kerberos содержание атрибута servicePrincipalName можно пойти двумя путями:

  • Создать необходимую SPN запись вручную с помощью утилиты SetSPN. Синтаксис команд будет следующий:

setspn –S MSSQLSvc/SQLServerFQDN:1433 DomainSQLAccount
setspn –S MSSQLSvc/SQLServerFQDN DomainSQLAccount

пример setspn -S MSSQLSvc/server19.contoso.com:1433 sqlservice (имя учетки запуска)

setspn -S MSSQLSvc/server19.contoso.com:MSSQL2012 sqlservice

  • Разрешить учетной записи, от имени которой запускается SQL Server, динамическое обновление атрибута servicePrincipalName, выдав разрешения на чтение и запись атрибута servicePrincipalName. Для того чтобы выполнить второй вариант, откроем оснастку ADSIEdit.msc, перейдём к свойствам объекта – учетной записи. На закладке “Безопасность” (Security) нажмём кнопу “Дополнительно” (Advanced)
Как настроить SPN (Service Principal Name) в SQL Server и динамическая регистрация SPN-05
Как настроить SPN (Service Principal Name) в SQL Server и динамическая регистрация SPN-05

В диалоговом окне «Дополнительные параметры безопасности» (Advanced Security Settings) нажмём кнопку «Добавить» (Add)

Как настроить SPN (Service Principal Name) в SQL Server и динамическая регистрация SPN-06
Как настроить SPN (Service Principal Name) в SQL Server и динамическая регистрация SPN-06

введём SELF и в открывшемся окне перейдём на закладку «Свойства» (Properties). В окне выбора области применения выберем пункт «Только этот объект» (This object only) и в списке разрешений отметим два пункта:

  • Read servicePrincipalName
  • Write servicePrincipalName
Как настроить SPN (Service Principal Name) в SQL Server и динамическая регистрация SPN-07
Как настроить SPN (Service Principal Name) в SQL Server и динамическая регистрация SPN-07

Сохраним внесённые изменения и затем, при запуске службы SQL Server, сможем убедиться в том, что в журнале регистрации событий появилась запись об успешном создании SPN

Как настроить SPN (Service Principal Name) в SQL Server и динамическая регистрация SPN-08
Как настроить SPN (Service Principal Name) в SQL Server и динамическая регистрация SPN-08

а так же увидим что вывод утилиты SetSPN изменился

Как настроить SPN (Service Principal Name) в SQL Server и динамическая регистрация SPN-09
Как настроить SPN (Service Principal Name) в SQL Server и динамическая регистрация SPN-09

Как  удалить SPN

setspn -d MSSQLSvc/server19.ваш домен:1433 имя учетной записи от имени которой запускается sql
setspn -d MSSQLSvc/server19.ваш домен:MSSQL2012 имя учетной записи от имени которой запускается sql

Пример:

setspn -D MSSQLSvc/virt163.contoso.com:1433 sqlservice
setspn -D MSSQLSvc/virt163.contoso.com sqlservice

Вот пример ситуации когда нужно удаление. Был раньше сервер virt105 и использовался под одни нужды, сервер удален. После по этому же имени virt105 подняли другой сервер, и столкнулись с тем, что SPN уже был занят. Вот запрос на проверку SPN у virt105

Как настроить SPN (Service Principal Name)-01

Далее попытка его зарегистрировать, и видим, что он уже есть на учетную запись Семина Ивана

Как настроить SPN (Service Principal Name)-02

После удаления старого SPN, по новому все зарегистрировалось.

Как настроить SPN (Service Principal Name)-03

Оцените статью
Настройка серверов windows и linux
Добавить комментарий

  1. Савелий

    Полезно. Спасибо!

  2. Иван Семин автор

    Рад, что помог!

  3. Дмитрий

    Добрый день.
    На этапе «Как мы видим, ни на учетной записи компьютера ни на учетной записи пользователя нет SPN содержащих указатели MSSQLSvc. » у меня есть запись для сервера, но нет для учетной записи под которой работает служба sql. Что делать?

  4. Дмитрий

    Добрый день.
    Команда
    SetSPN -L
    для имени сервера выдает наличие MSSQLSvc, а для имени пользователя, под которым работает служба sql — нет. Что делать?

  5. Andrey.ka

    Подскажите пожалуйста как обновить SPN для репликации AD?
    KCCEvent пишет ошибку:
    Доменным службам Active Directory не удалось выполнить проверенный удаленный вызов процедуры (RPC) на другом
    сервере службы каталогов, так как нужное имя субъекта-службы (SPN) для конечного сервера службы каталогов не зарегистри
    ровано на сервере службы каталогов, являющемся центром распространения ключей (KDC) и разрешающем SPN.

  6. Иван Семин автор

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