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

Обновлено 02.03.2020

Как настроить 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

Автор - Сёмин Иван

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

  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 и при его отсутствии добавить, можно через редактор атрибутов или через командную строку.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *