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