Compartilhar via


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 no 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 será executada.

[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 no Active Directory Domain Services. O chamador deve ter acesso de gravação à propriedade servicePrincipalName deste objeto.

[in] cSpn

Especifica o número de SPNs em rpszSpn. Se esse valor for zero e a Operação 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.

Valor de retorno

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

Observações

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, o DACL padrão em contas de usuário e computador permite que apenas os 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á sendo executado.

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 a DSA estiver configurada 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 a política com segurança 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 de "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 que está criando a conta Gravar SPN validado
Operadores de conta 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 "Gravar SPN" direito. Em vez disso, o conjunto de propriedades "Gravar informações públicas" concede a capacidade de criar SPNs arbitrários.

Nota

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 do pré-processador UNICODE. A combinação do uso do alias neutro de codificação com código que não é neutro em codificação pode levar a incompatibilidades que resultam em erros de compilação ou de runtime. Para obter mais informações, consulte Conventions for Function Prototypes.

Requisitos

Requisito Valor
de cliente com suporte mínimo Windows Vista
servidor com suporte mínimo Windows Server 2008
da Plataforma de Destino Windows
cabeçalho ntdsapi.h
biblioteca Ntdsapi.lib
de DLL Ntdsapi.dll

Consulte também

DS_SPN_WRITE_OP

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

DsBind

DsBindWithCred

DsGetSpn