Funzione DsWriteAccountSpnA (ntdsapi.h)

La funzione DsWriteAccountSpn scrive una matrice di nomi dell'entità servizio (SPN) nell'attributo servicePrincipalName di un oggetto utente o account computer specificato in Active Directory Domain Services. La funzione può registrare o annullare la registrazione dei nomi SPN.

Sintassi

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

Parametri

[in] hDS

Contiene un handle del servizio directory ottenuto dalla funzione DSBind o DSBindWithCred.

[in] Operation

Contiene uno dei valori DS_SPN_WRITE_OP che specifica l'operazione eseguita da DsWriteAccountSpn .

[in] pszAccount

Puntatore a una stringa con terminazione null costante che specifica il nome distinto di un utente o di un oggetto computer in Active Directory Domain Services. Il chiamante deve avere accesso in scrittura alla proprietà servicePrincipalName di questo oggetto.

[in] cSpn

Specifica il numero di SPN in rpszSpn. Se questo valore è zero e Operation contiene DS_SPN_REPLACE_SPN_OP, la funzione rimuove tutti i valori dall'attributo servicePrincipalName dell'account specificato.

[in] rpszSpn

Puntatore a una matrice di stringhe con terminazione null costante che specificano gli SPN da aggiungere o rimuovere dall'account identificato dal parametro pszAccount . La funzione DsGetSpn viene usata per comporre i nomi SPN per un servizio.

Valore restituito

Restituisce ERROR_SUCCESS se ha esito positivo o un errore del servizio directory Win32, RPC o directory se non è riuscito.

Commenti

La funzione DsWriteAccountSpn registra gli SPN per una o più istanze di un servizio. Gli SPN vengono usati dai client, insieme a un servizio di autenticazione attendibile, per autenticare il servizio. Per proteggere dagli attacchi di sicurezza in cui un'applicazione o un servizio registra in modo fraudolento un SPN che identifica un altro servizio, l'elenco dati predefinito negli account utente e computer consente solo agli amministratori di dominio di registrare gli SPN nella maggior parte dei casi.

Un'eccezione a questa regola è che un servizio in esecuzione nell'account LocalSystem può chiamare DsWriteAccountSpn per registrare un semplice SPN del modulo "ServiceClass/Host:Port" se l'host specificato nel nome SPN è il nome DNS o NetBIOS del computer in cui è in esecuzione il servizio.

Un'altra eccezione è che l'elenco dati predefinito negli account computer consente ai chiamanti di registrare gli SPN in sé, soggetti a determinati vincoli. Ad esempio, un account computer può avere SPN rispetto al nome computer, del formato "host/<computername>". Poiché il nome computer è contenuto nel nome SPN, il nome spn è consentito.

Nessuna delle regole precedenti si applica se la DSA è configurata per consentire la scrittura di qualsiasi SPN. Ciò riduce tuttavia la sicurezza, pertanto non è consigliabile.

Gli SPN passati a DsWriteAccountSpn vengono effettivamente aggiunti all'attributo Service-Principal-Name dell'oggetto computer in pszAccount. Questa chiamata viene eseguita usando RPC al controller di dominio in cui viene archiviato l'oggetto account in modo che possa applicare in modo sicuro i criteri sugli SPN consentiti nell'account. L'uso di LDAP per scrivere direttamente nella proprietà SPN non è consentito; tutte le scritture devono venire tramite questa chiamata RPC. Le letture che usano LDAP sono consentite.

Autorizzazioni necessarie per impostare i nomi SPN

Per scrivere un SPN arbitrario in un account, il writer richiede il diritto "Write ServicePrincipalName", che non viene concesso per impostazione predefinita alla persona che ha creato l'account. Tale persona ha il diritto 'Write validated SPN" (presente solo negli account del computer).

Di seguito è riportato un riepilogo dei diritti per utente in account computer:

Tipo di utente Diritti
Persona che crea l'account SpN convalidato in scrittura
Account Operators Scrivere SPN e SPN convalidato in scrittura
Utenti autenticati Nessuno
(self) SpN convalidato scrittura
 

Per gli account utente non è presente alcuna proprietà "SPN convalidata" o "SpN di scrittura" destra. Invece, il set di proprietà "Scrivere informazioni pubbliche" concede la possibilità di creare SPN arbitrari.

Nota

L'intestazione ntdsapi.h definisce DsWriteAccountSpn come alias che seleziona automaticamente la versione ANSI o Unicode di questa funzione in base alla definizione della costante preprocessore UNICODE. La combinazione dell'utilizzo dell'alias di codifica neutrale con il codice che non è neutrale dalla codifica può causare errori di corrispondenza che causano errori di compilazione o runtime. Per altre informazioni, vedere Convenzioni per i prototipi di funzione.

Requisiti

Requisito Valore
Client minimo supportato Windows Vista
Server minimo supportato Windows Server 2008
Piattaforma di destinazione Windows
Intestazione ntdsapi.h
Libreria Ntdsapi.lib
DLL Ntdsapi.dll

Vedi anche

DS_SPN_WRITE_OP

Funzioni di gestione del controller di dominio e della replica

DsBind

DsBindWithCred

DsGetSpn