Поделиться через


Функция DsWriteAccountSpnA (ntdsapi.h)

Функция DsWriteAccountSpn записывает массив имен субъектов-служб (SPN) в атрибут servicePrincipalName указанного объекта учетной записи пользователя или компьютера в доменные службы Active Directory. Функция может регистрировать или отменять регистрацию имен субъектов-служб.

Синтаксис

NTDSAPI DWORD DsWriteAccountSpnA(
  [in] HANDLE          hDS,
  [in] DS_SPN_WRITE_OP Operation,
  [in] LPCSTR          pszAccount,
  [in] DWORD           cSpn,
  [in] LPCSTR          *rpszSpn
);

Параметры

[in] hDS

Содержит дескриптор службы каталогов, полученный от функции DSBind или DSBindWithCred .

[in] Operation

Содержит одно из DS_SPN_WRITE_OP значений, указывающее операцию, которую будет выполнять DsWriteAccountSpn .

[in] pszAccount

Указатель на константную строку, заканчивающуюся null, которая указывает различающееся имя пользователя или объекта-компьютера в доменные службы Active Directory. Вызывающий объект должен иметь доступ на запись к свойству servicePrincipalName этого объекта.

[in] cSpn

Указывает количество имен субъектов-служб в rpszSpn. Если это значение равно нулю и операция содержит DS_SPN_REPLACE_SPN_OP, функция удаляет все значения из атрибута servicePrincipalName указанной учетной записи.

[in] rpszSpn

Указатель на массив строк с константой, заканчивающихся null, которые указывают имена субъектов-служб для добавления или удаления из учетной записи, определяемой параметром pszAccount . Функция DsGetSpn используется для создания имен субъектов-служб для службы.

Возвращаемое значение

Возвращает ERROR_SUCCESS в случае успешного выполнения или ошибку Win32, RPC или службы каталогов в случае неудачи.

Комментарии

Функция DsWriteAccountSpn регистрирует имена субъектов-служб для одного или нескольких экземпляров службы. Имена субъектов-служб используются клиентами в сочетании с доверенной службой проверки подлинности для проверки подлинности службы. Для защиты от атак безопасности, когда приложение или служба обманным путем регистрирует имя субъекта-службы, которое идентифицирует какую-либо другую службу, в большинстве случаев daCL для учетных записей пользователей и компьютеров позволяет регистрировать имена субъектов-служб только администраторам домена.

Одним из исключений из этого правила является то, что служба, запущенная под учетной записью LocalSystem, может вызывать DsWriteAccountSpn для регистрации простого имени субъекта-службы в формате ServiceClass/Host:Port, если узел, указанный в имени субъекта-службы, является DNS-или NetBIOS-именем компьютера, на котором выполняется служба.

Еще одним исключением является то, что daCL по умолчанию для учетных записей компьютеров позволяет вызывающим абонентам регистрировать имена субъектов-служб самостоятельно, при условии соблюдения определенных ограничений. Например, учетная запись компьютера может иметь имена субъектов-служб относительно имени компьютера в формате host/<computername>. Так как имя_компьютера содержится в имени субъекта-службы, имя субъекта-службы является допустимым.

Ни одно из приведенных выше правил не применяется, если DSA настроено на запись любого имени субъекта-службы. Однако это снижает безопасность, поэтому не рекомендуется.

Имена субъектов-служб, передаваемые в DsWriteAccountSpn , фактически добавляются в атрибут Service-Principal-Name объекта-компьютера в pszAccount. Этот вызов выполняется с помощью RPC к контроллеру домена, на котором хранится объект учетной записи, чтобы обеспечить безопасное применение политики в отношении разрешенных имен субъектов-служб в учетной записи. Использование ПРОТОКОЛА LDAP для записи непосредственно в свойство имени субъекта-службы не допускается; все операции записи должны выполняться через этот вызов RPC. Операции чтения с использованием ПРОТОКОЛА LDAP разрешены.

Разрешения, необходимые для установки имен субъектов-служб

Для записи произвольного имени субъекта-службы в учетной записи требуется право "Запись ServicePrincipalName", которое по умолчанию не предоставляется пользователю, создавшему учетную запись. Этот пользователь имеет право на запись проверенного имени субъекта-службы (присутствует только в учетных записях компьютеров).

Ниже приведена сводка прав на каждого пользователя в учетных записях компьютеров.

Тип пользователя Права
Пользователь, создающий учетную запись Запись проверенного имени субъекта-службы
Операторы учета Запись имени субъекта-службы и запись проверенного имени субъекта-службы
Прошедшие проверку пользователи None
(self) Запись проверенного имени субъекта-службы
 

В учетных записях пользователей отсутствует свойство "Проверенное имя субъекта-службы" или "Запись имени субъекта-службы". Вместо этого набор свойств "Запись общедоступных сведений" предоставляет возможность создавать произвольные имена субъектов-служб.

Примечание

Заголовок ntdsapi.h определяет DsWriteAccountSpn в качестве псевдонима, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора ЮНИКОД. Сочетание использования псевдонима, не зависящий от кодировки, с кодом, не зависящим от кодировки, может привести к несоответствиям, которые приводят к ошибкам компиляции или среды выполнения. Дополнительные сведения см. в разделе Соглашения для прототипов функций.

Требования

Требование Значение
Минимальная версия клиента Windows Vista
Минимальная версия сервера Windows Server 2008
Целевая платформа Windows
Header ntdsapi.h
Библиотека Ntdsapi.lib
DLL Ntdsapi.dll

См. также раздел

DS_SPN_WRITE_OP

Функции управления контроллером домена и репликацией

DsBind

DsBindWithCred

DsGetSpn