Função DsWriteAccountSpnA (ntdsapi.h)

A função DsWriteAccountSpn grava uma matriz de SPNs (nomes de entidade de serviço) no atributo servicePrincipalName de um objeto de conta de usuário ou computador especificado em Active Directory Domain Services. A função pode registrar ou cancelar o registro dos SPNs.

Sintaxe

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

Parâmetros

[in] hDS

Contém um identificador de serviço de diretório obtido da função DSBind ou DSBindWithCred .

[in] Operation

Contém um dos valores DS_SPN_WRITE_OP que especifica a operação que DsWriteAccountSpn executará.

[in] pszAccount

Ponteiro para uma cadeia de caracteres terminada em nulo constante que especifica o nome diferenciado de um objeto de usuário ou computador em Active Directory Domain Services. O chamador deve ter acesso de gravação à propriedade servicePrincipalName desse objeto.

[in] cSpn

Especifica o número de SPNs em rpszSpn. Se esse valor for zero e Operation contiver DS_SPN_REPLACE_SPN_OP, a função removerá todos os valores do atributo servicePrincipalName da conta especificada.

[in] rpszSpn

Ponteiro para uma matriz de cadeias de caracteres terminadas em nulo constantes que especificam os SPNs a serem adicionados ou removidos da conta identificada pelo parâmetro pszAccount . A função DsGetSpn é usada para compor SPNs para um serviço.

Retornar valor

Retorna ERROR_SUCCESS se tiver êxito ou um erro win32, RPC ou serviço de diretório, se não for bem-sucedido.

Comentários

A função DsWriteAccountSpn registra os SPNs para uma ou mais instâncias de um serviço. Os SPNs são usados por clientes, em conjunto com um serviço de autenticação confiável, para autenticar o serviço. Para proteger contra ataques de segurança em que um aplicativo ou serviço registra fraudulentamente um SPN que identifica algum outro serviço, a DACL padrão em contas de usuário e computador permite que apenas administradores de domínio registrem SPNs na maioria dos casos.

Uma exceção a essa regra é que um serviço em execução na conta LocalSystem pode chamar DsWriteAccountSpn para registrar um SPN simples do formulário "ServiceClass/Host:Port" se o host especificado no SPN for o nome DNS ou NetBIOS do computador no qual o serviço está em execução.

Outra exceção é que a DACL padrão em contas de computador permite que os chamadores registrem SPNs em si mesmos, sujeitos a determinadas restrições. Por exemplo, uma conta de computador pode ter SPNs em relação ao nome do computador, do formulário "host/<nome do> computador". Como o nome do computador está contido no SPN, o SPN é permitido.

Nenhuma das regras acima se aplicará se o DSA estiver configurado para permitir que qualquer SPN seja gravado. No entanto, isso reduz a segurança, portanto, não é recomendável.

Os SPNs passados para DsWriteAccountSpn são, na verdade, adicionados ao atributo Service-Principal-Name do objeto de computador em pszAccount. Essa chamada é feita usando rpc para o controlador de domínio onde o objeto de conta é armazenado para que ele possa impor com segurança a política sobre quais SPNs são permitidos na conta. O uso do LDAP para gravar diretamente na propriedade SPN não é permitido; todas as gravações devem vir por meio dessa chamada RPC. Leituras usando LDAP são permitidas.

Permissões necessárias para definir SPNs

Para escrever um SPN arbitrário em uma conta, o gravador requer o direito "Write ServicePrincipalName", que não é concedido por padrão à pessoa que criou a conta. Essa pessoa tem o direito "Gravar SPN validado" (presente apenas em contas de computador).

Veja abaixo um resumo dos direitos por usuário em contas de computador:

Tipo de Usuário Direitos
Pessoa criando a conta Gravar SPN validado
Opers. de contas Gravar SPN e gravar SPN validado
Usuários Autenticados Nenhum
(self) Gravar SPN validado
 

Em contas de usuário, não há nenhuma propriedade "SPN validado" ou o direito "Gravar SPN". Em vez disso, o conjunto de propriedades "Gravar informações públicas" concede a capacidade de criar SPNs arbitrários.

Observação

O cabeçalho ntdsapi.h define DsWriteAccountSpn como um alias que seleciona automaticamente a versão ANSI ou Unicode dessa função com base na definição da constante de pré-processador UNICODE. Misturar o uso do alias neutro de codificação com código que não seja neutro em codificação pode levar a incompatibilidades que resultam em erros de compilação ou de runtime. Para obter mais informações, consulte Convenções para protótipos de função.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows Vista
Servidor mínimo com suporte Windows Server 2008
Plataforma de Destino Windows
Cabeçalho ntdsapi.h
Biblioteca Ntdsapi.lib
DLL Ntdsapi.dll

Confira também

DS_SPN_WRITE_OP

Funções de gerenciamento de replicação e controlador de domínio

DsBind

DsBindWithCred

DsGetSpn