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
Funções de gerenciamento de replicação e controlador de domínio