Server principal name windows

Server principal name windows

Всем привет, сегодня хочу вам рассказать как настраивать 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 -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

В диалоговом окне «Дополнительные параметры безопасности» (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

Читайте также:  Windows has determined the driver software is up to date

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

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

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

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

Как удалить SPN

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

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

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

Service Principal Name (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 (Service Principal Name)

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

Читайте также:  Установка matplotlib под windows

Как мы видим, ни на учетной записи компьютера ни на учетной записи пользователя нет 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 изменился…

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

sys.server_principals (Transact-SQL) sys.server_principals (Transact-SQL)

Применимо к: Applies to: SQL Server SQL Server (все поддерживаемые версии) SQL Server SQL Server (all supported versions) Управляемый экземпляр SQL Azure Azure SQL Managed Instance Управляемый экземпляр SQL Azure Azure SQL Managed Instance Параллельное хранилище данных Parallel Data Warehouse Параллельное хранилище данных Parallel Data Warehouse Применимо к: Applies to: SQL Server SQL Server (все поддерживаемые версии) SQL Server SQL Server (all supported versions) Управляемый экземпляр SQL Azure Azure SQL Managed Instance Управляемый экземпляр SQL Azure Azure SQL Managed Instance Параллельное хранилище данных Parallel Data Warehouse Параллельное хранилище данных Parallel Data Warehouse

Содержит одну строку для каждого участника уровня сервера. Contains a row for every server-level principal.

Имя столбца Column name Тип данных Data type Описание Description
name name sysname sysname Имя участника. Name of the principal. Уникален в пределах сервера. Is unique within a server.
principal_id principal_id int int Идентификатор участника. ID number of the Principal. Уникален в пределах сервера. Is unique within a server.
трансляцию sid varbinary(85) varbinary(85) Идентификатор SID (Security-IDentifier, идентификатор защиты) участника. SID (Security-IDentifier) of the principal. Для участника Windows соответствует идентификатору SID Windows. If Windows principal, then it matches Windows SID.
type type char(1) char(1) Тип участника: Principal type:

S = имя входа SQL S = SQL login

U = имя входа Windows U = Windows login

G = группа Windows G = Windows group

R = роль сервера R = Server role

C = имя входа, сопоставленное сертификату C = Login mapped to a certificate

E = внешнее имя входа из Azure Active Directory E = External Login from Azure Active Directory

X = Внешняя группа из группы или приложений Azure Active Directory X = External group from Azure Active Directory group or applications

K = имя входа, сопоставленное асимметричному ключу K = Login mapped to an asymmetric key

type_desc type_desc nvarchar(60) nvarchar(60) Описание типа участника: Description of the principal type:

ASYMMETRIC_KEY_MAPPED_LOGIN ASYMMETRIC_KEY_MAPPED_LOGIN

is_disabled is_disabled int int 1 = имя входа отключено. 1 = Login is disabled.
create_date create_date datetime datetime Время создания участника. Time at which the principal was created.
modify_date modify_date datetime datetime Время последнего изменения определения участника. Time at which the principal definition was last modified.
default_database_name default_database_name sysname sysname База данных участника по умолчанию. Default database for this principal.
default_language_name default_language_name sysname sysname Язык участника по умолчанию. Default language for this principal.
credential_id credential_id int int Идентификатор учетных данных, связанный с участником. ID of a credential associated with this principal. Если с участником не связаны никакие учетные данные, идентификатор credential_id будет иметь значение NULL. If no credential is associated with this principal, credential_id will be NULL.
owning_principal_id owning_principal_id int int Principal_id владельца роли сервера. The principal_id of the owner of a server role. NULL, если участник не является ролью сервера. NULL if the principal is not a server role.
is_fixed_role is_fixed_role bit bit Возвращает значение 1, если участник является одной из встроенных ролей сервера с фиксированными разрешениями. Returns 1 if the principal is one of the built-in server roles with fixed permissions. Дополнительные сведения см. в статье Роли уровня сервера. For more information, see Server-Level Roles.

Разрешения Permissions

Любое имя входа может видеть собственное имя входа, системные имена входа и предопределенные роли сервера. Any login can see their own login name, the system logins, and the fixed server roles. Для просмотра других имен входа требуется разрешение ALTER ANY LOGIN или разрешение на имя входа. To see other logins, requires ALTER ANY LOGIN, or a permission on the login. Для просмотра определяемых пользователем ролей сервера необходимо иметь разрешение ALTER ANY SERVER ROLE или быть членом роли. To see user-defined server roles, requires ALTER ANY SERVER ROLE, or membership in the role.

Видимость метаданных в представлениях каталогов ограничивается защищаемыми объектами, которыми пользователь владеет или на которые ему были предоставлены разрешения. The visibility of the metadata in catalog views is limited to securables that a user either owns or on which the user has been granted some permission. Дополнительные сведения см. в разделе Metadata Visibility Configuration. For more information, see Metadata Visibility Configuration.

Примеры Examples

Следующий запрос перечисляет разрешения, явно предоставленные или отклоненные для участников на уровне сервера. The following query lists the permissions explicitly granted or denied to server principals.

Читайте также:  Java bin file linux
Оцените статью