Функция 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 |