Как настроить SPN (Service Principal Name) в SQL Server и динамическая регистрация SPN
Всем привет, сегодня хочу вам рассказать как настраивать 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 выполним команду:
В нашем примере KOM-AD01-DB03 — это имя сервера SQL, а s-KOM-AD01-DB03-SQL01 — это имя пользовательской доменной учетной записи, из под которой запускаются службы SQL Server на этом сервере.
Как мы видим, ни на учетной записи компьютера ни на учетной записи пользователя нет SPN содержащих указатели MSSQLSvc. Помимо утилиты SetSPN мы можем воспользоваться оснасткой “AD Users and Computers” (dsa.msc) с включенным режимом отображения дополнительных компонент…
открыв свойства соответствующей учётной записи и перейдя на вкладку редактирования атрибутов можно посмотреть и изменить значение атрибута servicePrincipalName
Особенности работы с Kerberos аутентификацией в SQL Server (и в частности управление SPN) рассмотрены в статье KB319723 — How to use Kerberos authentication in SQL Server
Для того чтобы обеспечить нужное для корректной работы Kerberos содержание атрибута servicePrincipalName можно пойти двумя путями:
- Создать необходимую SPN запись вручную с помощью утилиты SetSPN. Синтаксис команд будет следующий:
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)
В диалоговом окне «Дополнительные параметры безопасности» (Advanced Security Settings) нажмём кнопку «Добавить» (Add)
введём SELF и в открывшемся окне перейдём на закладку «Свойства» (Properties). В окне выбора области применения выберем пункт «Только этот объект» (This object only) и в списке разрешений отметим два пункта:
- Read servicePrincipalName
- Write servicePrincipalName
Сохраним внесённые изменения и затем, при запуске службы SQL Server, сможем убедиться в том, что в журнале регистрации событий появилась запись об успешном создании SPN
а так же увидим что вывод утилиты SetSPN изменился
Как удалить SPN
setspn -d MSSQLSvc/server19.ваш домен:MSSQL2012 имя учетной записи от имени которой запускается sql
Пример:
setspn -D MSSQLSvc/virt163.contoso.com sqlservice
Вот пример ситуации когда нужно удаление. Был раньше сервер virt105 и использовался под одни нужды, сервер удален. После по этому же имени virt105 подняли другой сервер, и столкнулись с тем, что SPN уже был занят. Вот запрос на проверку SPN у virt105
Далее попытка его зарегистрировать, и видим, что он уже есть на учетную запись Семина Ивана
После удаления старого SPN, по новому все зарегистрировалось.
Полезно. Спасибо!
Рад, что помог!
Добрый день.
На этапе «Как мы видим, ни на учетной записи компьютера ни на учетной записи пользователя нет SPN содержащих указатели MSSQLSvc. » у меня есть запись для сервера, но нет для учетной записи под которой работает служба sql. Что делать?
Добрый день.
Команда
SetSPN -L
для имени сервера выдает наличие MSSQLSvc, а для имени пользователя, под которым работает служба sql — нет. Что делать?
Подскажите пожалуйста как обновить SPN для репликации AD?
KCCEvent пишет ошибку:
Доменным службам Active Directory не удалось выполнить проверенный удаленный вызов процедуры (RPC) на другом
сервере службы каталогов, так как нужное имя субъекта-службы (SPN) для конечного сервера службы каталогов не зарегистри
ровано на сервере службы каталогов, являющемся центром распространения ключей (KDC) и разрешающем SPN.
нужно определиться на какую именно сущность он ругается, найти ее в редакторе атрибутов или схеме. проверить наличие SPN и при его отсутствии добавить, можно через редактор атрибутов или через командную строку.