Registrazione di nomi SPN Kerberos utilizzando Http.sys
Servizi Web XML nativi è una funzionalità deprecata. Questa caratteristica verrà rimossa a partire da una delle prossime versioni di Microsoft SQL Server. Evitare di utilizzare questa caratteristica in un nuovo progetto di sviluppo e prevedere interventi di modifica nelle applicazioni in cui è attualmente implementata.
Quando si creano o modificano endpoint HTTP tramite CREATE ENDPOINT o ALTER ENDPOINT, è necessario specificare il tipo di autenticazione utilizzata per autenticare gli utenti che inviano richieste SOAP HTTP all'endpoint. Per ulteriori informazioni, vedere CREATE ENDPOINT (Transact-SQL) e ALTER ENDPOINT (Transact-SQL).
Utilizzando CREATE ENDPOINT ALTER ENDPOINT è possibile configurare endpoint per il supporto dell'autenticazione Kerberos nei modi seguenti:
Se si imposta AUTHENTICATION=KERBEROS, Kerberos verrà utilizzato come unico mezzo di autenticazione HTTP.
Se si imposta AUTHENTICATION=INTEGRATED, l'autenticazione HTTP per l'endpoint può offrire le seguenti opzioni come parte della richiesta di autenticazione: NEGOTIATE, KERBEROS e NTLM. Per l'opzione NEGOTIATE, il client e il server tentano di stabilire un'autenticazione basata su Kerberos. Se Kerberos non è supportato dal client o la negoziazione non è possibile, l'autenticazione verrà reimpostata come NTLM. Per impedire che il client passi all'autenticazione NTLM quando si utilizza NEGOTIATE, è consigliabile impostare AUTHENTICATION=KERBEROS per il client nell'endpoint.
Per supportare l'autenticazione reciproca in Kerberos, è necessario che un'istanza di SQL Server associ un nome SPN all'account in cui verrà eseguita, ad esempio un account di sistema locale o un account utente di dominio. I dettagli per la registrazione del nome SPN tramite un'istanza specifica di SQL Server sono determinati dal tipo di account del servizio configurato per l'istanza. Se SQL Server viene eseguito nel contesto di un account di sistema locale o di un account del servizio di rete, i nomi SPN devono essere registrati con il nome computer. Se SQL Server viene eseguito nel contesto di un account utente di dominio, i nomi SPN devono essere registrati con il nome utente di dominio.
Utilizzo di SetSPN.exe
Per attivare l'associazione di un nome SPN all'account in cui è in esecuzione l'istanza di SQL Server, utilizzare lo strumento di supporto di Windows SetSPN.exe. Tale strumento aggiunge il nome SPN per il nome computer in cui viene eseguita l'istanza di SQL Server nel contesto dell'account utente di dominio Windows incluso in Active Directory. In questo scenario è possibile utilizzare lo strumento SetSPN.exe per aggiungere due nomi SPN: uno per il nome NetBIOS e un altro per il nome di dominio DNS completo.
Se, ad esempio, lo strumento SetSPN.exe viene eseguito dall'istanza di SQL Server in esecuzione in MyComputer, i due nomi SPN seguenti verranno associati all'account nel cui contesto viene eseguita l'istanza di SQL Server e dovranno essere aggiunti alla directory:
HTTP/MyComputer;
HTTP/MyComputer.fully.qualified.domain.name.com
Si noti che un singolo account può essere associato a più nomi SPN, ma un nome SPN può essere registrato per un solo account.
Utilizzare SetSPN.exe anche per eliminare questi due nomi SPN, ovvero il nome NetBIOS e il nome di dominio DNS completo.
Considerazioni
Analogamente a Httpcfg.exe, SetSPN.exe è disponibile con Windows Server 2003 e viene installato quando si utilizza la procedura per installare Httpcfg.exe e altri strumenti di supporto di Windows. Per ulteriori informazioni, vedere Configurazione del driver HTTP in modalità kernel (Http.sys).
Se un'istanza di SQL Server non viene eseguita come account di sistema locale, solo gli utenti dell'autenticazione integrata che dispongono di privilegi DOMAIN ADMIN possono modificare la registrazione del nome SPN utilizzando lo strumento SetSPN.exe.
Se un'istanza di SQL Server viene eseguita come account di sistema locale, solo i membri del ruolo predefinito del server sysadmin di SQL Server possono modificare le registrazioni del nome SPN utilizzando lo strumento SetSPN.exe.
Se l'account del servizio è LocalSystem, il nome SPN viene aggiunto nell'account di Active Directory del computer senza che sia necessario utilizzare lo strumento SetSPN.exe.
Sintassi per SetSPN.exe
Di seguito viene indicata la sintassi per SetSPN.exe:
setspn { -ASPN | -DSPN | -L } service_account
Argomenti
-A
Aggiunge il nome SPN specificato all'account.-D
Elimina il nome SPN specificato dall'account.-L
Elenca tutti i nomi SPN registrati nell'account.
Esempi
Se un'istanza di SQL Server viene eseguita come utente di dominio (MyDomain\MySQLAccount) in un computer denominato MySQLHost, è possibile utilizzare i comandi seguenti per impostare i nomi SPN appropriati:
setspn –A http/MySQLHost MyDomain\MySQLAccount
setspn –A http/MySqlHost.Mydomain.Mycorp.com MyDomain\MySQLAccount
Si noti che un account può essere associato a più nomi SPN, uno per ogni servizio o nome host, ma un nome SPN può essere registrato in un solo account. Se si registra un nome SPN in più account, l'autenticazione Kerberos ha esito negativo.
Per l'account MyDomain\MySQLAccount, ad esempio, è possibile registrare i diversi nomi SPN seguenti. I primi due comandi sono per due servizi diversi, http e rpc. L'ultimo comando è per un nome host diverso, supponendo che il computer disponga di più nomi host.
setspn –A http/MySQLHost MyDomain\MySQLAccount
setspn –A rpc/MySQLHost MyDomain\MySQLAccount
setspn –A http/MySecondHost MyDomain\MySQLAccount
Viceversa, lo scenario seguente provocherà un errore Kerberos:
setspn –A http/MySQLHost MyDomain\MySQLAccountOne
setspn –A http/MySQLHost MyDomain\MySQLAccountTwo
L'errore si verifica in quanto sono presenti due istanze di SQL Server in un computer in esecuzione nel contesto di due account del servizio diversi, MySQLAccountOne e MySQLAccountTwo. La registrazione di entrambi i nomi SPN, uno per ogni istanza di SQL Server, non rappresenta uno scenario supportato.
Ciò ha implicazioni quando più istanze di SQL Server vengono eseguite nello stesso computer nel contesto di account diversi. Il nome SPN può essere registrato solo per un account. Se si registrano più istanze di SQL Server, ad esempio Inst1 e Inst2, affinché coesistano accanto ad altre applicazioni, ad esempio IIS, e si desidera utilizzare l'autenticazione Kerberos HTTP per tutti i servizi, adottare una delle soluzioni seguenti per risolvere i conflitti relativi alla registrazione del nome SPN:
Fare in modo che tutte le istanze e le applicazioni vengano eseguite con lo stesso account.
Ad esempio, fare in modo che Inst1, Inst2 e IIS vengano eseguite tutte come LocalSystem o Mydomain\MyServiceAccount.
Registrare più nomi host per lo stesso computer e fare in modo che ogni istanza e applicazione sia in attesa su un host diverso. In questo caso, pertanto, sarà necessario eseguire le operazioni seguenti:
Creare tre nomi host diversi per il computer.
Assegnare ogni host a un'applicazione diversa.
Registrare tre set di nomi SPN, uno per ogni combinazione di nome host e applicazione.
Risoluzione dei problemi relativi alla registrazione del nome SPN Kerberos
I problemi più comuni relativi alla registrazione del nome SPN Kerberos sono i seguenti:
Un nome SPN non è registrato.
Quando un nome SPN non è registrato, l'autenticazione Kerberos funziona dal computer locale in cui viene eseguita l'istanza di SQL Server, ma ha esito negativo nei computer client remoti.
Un nome SPN viene registrato più di una volta.
Vi sono diversi scenari in cui un amministratore può duplicare i nomi SPN nella directory dominio che provocano un esito negativo dell'autenticazione Kerberos. Di seguito vengono descritti alcuni di questi scenari:
Modifica dell'account di dominio nel cui contesto viene eseguita l'istanza di SQL Server
Se SetSpn.exe viene eseguito durante l'esecuzione di un'istanza di SQL Server come account di dominio, ad esempio DOMAIN\User1, e l'account di dominio utilizzato per eseguire SQL Server viene modificato, ad esempio in DOMAIN\User2, quando SetSPN.exe viene nuovamente eseguito provocherà l'inserimento dello stesso nome SPN nella directory utilizzando entrambi gli account.
Installazione di più istanze di SQL Server in esecuzione nel contesto di account diversi
Se si installano più istanze di SQL Server, si esegue ogni istanza nel contesto di un account diverso e SetSpn.exe viene eseguito in ogni istanza, saranno presenti account duplicati nella directory nel contesto di ogni account del servizio SQL Server. Questo comportamento si verifica per entrambe le istanze in esecuzione con un utente di dominio e anche nel contesto dell'account LocalSystem.
Rimozione e reinstallazione di un'istanza di SQL Server nel contesto di un account diverso
Se si installa SQL Server nel contesto di un account, si registrano i nomi SPN, si rimuove e reinstalla SQL Server nel contesto di un account diverso e quindi si registrano nuovamente i nomi SPN, ogni account di dominio avrà gli stessi nomi SPN. Ciò comporterà nomi SPN duplicati.
In ognuno degli scenari descritti, il problema è rappresentato dal fatto che l'endpoint HTTP passerà nuovamente all'autenticazione NTLM fino alla correzione dell'errore. Questo comportamento implica la ricerca di nomi SPN duplicati o non aggiornati nella directory e la relativa rimozione manuale.