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


Функция 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 в случае успешного выполнения или ошибки службы RPC или службы каталогов Win32 при неудачном выполнении.

Замечания

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

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

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

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

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

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

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

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

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

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

Заметка

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

Требования

Требование Ценность
минимальные поддерживаемые клиентские Windows Vista
минимальный поддерживаемый сервер Windows Server 2008
целевая платформа Виндоус
заголовка ntdsapi.h
библиотеки Ntdsapi.lib
DLL Ntdsapi.dll

См. также

DS_SPN_WRITE_OP

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

DsBind

DsBindWithCred

DsGetSpn