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