Spn запись что это

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

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

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

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

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

Как настроить 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 -a MSSQLSvc/server19.contoso.com:1433 sqlservice (имя учетки запуска)

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

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

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

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

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

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

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

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

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

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

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

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

Содержание

Общая информация

Service Principal Name (SPN) — Первичное имя сервиса. Это в некотором роде Windows аналог /etc/hosts в Linux. Здесь указываются имена сервера, которые используются установленными на нём сервисами. Только в SPN могут заводиться записи не только для компьютеров, но и для пользователей. Официальное название объекта в SPN: участник-служба.

Команда setspn

  • Посмотреть все записи SPN можно командой:
  • Добавить новый новое DNS имя newname.domain.local для сервера servname можно командой:
  • команда setspn запущенная без параметров, покажет как и для чего ей можно пользоваться, а также предоставит примеры.

Работа над ошибками

Не доступны сетевые ресурсы сервера по DNS имени

Такое может произойти в случае если DNS имя компьютера не совпадает c "простым" NetBIOS именем.

Например, у нас компьютера (сервер) имеет несколько имён:

  • Alfa — простое имя компьютера, имя NetBIOS
  • alfa.domain.local — имя в домене , но мы также создали ему псевдоним (алиас, alias, CNAME запись в DNS)
  • music.domain.local — псевдоним (алиас, alias, CNAME запись в DNS) по выполняемой функции
  • zeta.domain2.local — DNS имя (CNAME запись) в другом домене

В описанном случае замечались проблемы с получением списка SMB ресурсов сервера по DNS имени, хотя все имена разрешались (резолвились) корректно и пинговались (ping). Причём проблема была при обращение с компьютеров Windows XP, с Windows 7 все ресурсы были доступны.

Решается проблема добавлением SPN записей на сервере (не всегда [1] ). Для нашего случая это выполняется командами, запускаемыми на alfa:

В процессе загрузки свежее установленного экземпляра 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 можно пойти двумя путями:

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

2) Разрешить учетной записи, от имени которой запускается SQL Server, динамическое обновление атрибута servicePrincipalName, выдав разрешения на чтение и запись этого атрибута.

Для того чтобы выполнить второй вариант, откроем оснастку ADSIEdit.msc, перейдём к свойствам объекта – учетной записи. На закладке “Безопасность” (Security) нажмём кнопу “Дополнительно” (Advanced)

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

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

  • Read servicePrincipalName
  • Write servicePrincipalName

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

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

Дополнительная информация:

Оцените статью
Ремонт оргтехники
Добавить комментарий