Registrazione di un nome SPN

Un nome SPN (Service Principal Name) è il nome con cui un client identifica in modo univoco un'istanza di un servizio. Questo nome può essere utilizzato dal servizio di autenticazione Kerberos per l'autenticazione di un servizio. Per connettersi a un servizio, un client individua un'istanza del servizio, compone un nome SPN per l'istanza, esegue la connessione al servizio e presenta il nome SPN al servizio per l'autenticazione.

Nota

Le informazioni fornite in questo argomento si applicano anche a configurazioni di SQL Server che utilizzano il clustering.

L'autenticazione di Windows rappresenta il metodo preferito per autenticare gli utenti in SQL Server. I client che utilizzano l'autenticazione di Windows vengono autenticati tramite NTLM o Kerberos. Nell'ambiente Active Directory viene sempre tentata prima l'autenticazione Kerberos. L'autenticazione Kerberos non è disponibile per client SQL Server 2000 e SQL Server 2005 che utilizzano named pipe.

Autorizzazioni

Quando il servizio Motore di database viene avviato, viene eseguito il tentativo di registrazione del nome SPN (Service Principal Name). Se l'account che avvia SQL Server non dispone dell'autorizzazione per la registrazione di un nome SPN nei Servizi di dominio Active Directory, la chiamata non riesce e un messaggio di avviso viene registrato nel registro eventi dell'applicazione e nel log degli errori di SQL Server. Per registrare il nome SPN, è necessario che il Motore di database sia in esecuzione con un account predefinito, ad esempio di sistema locale (non consigliato) o Servizio di rete, o con un account che dispone dell'autorizzazione per registrare un nome SPN, ad esempio un account di amministratore di dominio. Se SQL Server non è in esecuzione con uno di questi account, il nome SPN non viene registrato all'avvio e l'amministratore di dominio lo dovrà registrare manualmente.

Per ulteriori informazioni sulla concessione dell'autorizzazione di lettura o scrittura su un nome SPN a un account diverso da quello di amministratore di dominio, vedere l'articolo della Knowledge Base relativo all'utilizzo dell'autenticazione Kerberos in SQL Server.

Ulteriori informazioni sono disponibili in Come implementare la delega vincolata da Kerberos con SQL Server 2008

Formati del nome SPN

A partire da SQL Server 2008, il formato del nome SPN è stato modificato per supportare l'autenticazione Kerberos con il protocollo TCP/IP, le named pipe e la memoria condivisa. Di seguito sono riportati i formati del nome SPN supportati per le istanze denominate e predefinite.

Istanza denominata

  • MSSQLSvc/FQDN:[porta**|**nomeistanza], dove:

    • MSSQLSvc è il servizio da registrare.

    • FQDN è il nome di dominio completo del server.

    • port è il numero di porta TCP.

    • nomeistanza è il nome dell'istanza di SQL Server.

Istanza predefinita

  • MSSQLSvc/FQDN:porta**|**MSSQLSvc/FQDN, dove:

    • MSSQLSvc è il servizio da registrare.

    • FQDN è il nome di dominio completo del server.

    • port è il numero di porta TCP.

Per il nuovo formato del nome SPN non è necessario specificare un numero di porta. Di conseguenza, un server a più porte o un protocollo che non utilizza numeri di porta può utilizzare l'autenticazione Kerberos.

Nota

Nel caso di una connessione TCP/IP, in cui la porta TCP è inclusa nel nome SPN, in SQL Server è necessario abilitare il protocollo TCP in modo che un utente sia in grado di connettersi utilizzando l'autenticazione Kerberos.

Registrazione automatica del nome SPN

Quando viene avviata un'istanza del Motore di database di SQL Server, in SQL Server viene effettuato un tentativo di registrare il nome SPN per il servizio SQL Server. Quando l'istanza viene arrestata, SQL Server tenta di annullare la registrazione del nome SPN. Per una connessione TCP/IP, il nome SPN viene registrato nel formato MSSQLSvc/<FQDN>:<portatcp>. Sia le istanze denominate che quella predefinita vengono registrate come MSSQLSvc e differenziate in base al valore <portatcp>.

Per altre connessioni che supportano l'autenticazione Kerberos, il nome SPN viene registrato nel formato MSSQLSvc/<FQDN>:<nomeistanza> per un'istanza denominata e nel formato MSSQLSvc/<FQDN> per l'istanza predefinita.

Se l'account di servizio non dispone delle autorizzazioni richieste per eseguire queste azioni, potrebbe essere necessario intervenire manualmente per registrare o annullare la registrazione del nome SPN.

Registrazione manuale del nome SPN

Per registrare manualmente il nome SPN, l'amministratore deve utilizzare lo strumento Setspn.exe disponibile negli strumenti di supporto Microsoft di Windows Server 2003 e inclusi in Windows Server 2003 Service Pack 1 (SP1). Per ulteriori informazioni, vedere l'articolo della Knowledge Base Strumenti di supporto di Windows Server 2003 Service Pack 1.

Setspn.exe è un'utilità della riga di comando che consente di leggere, modificare ed eliminare la proprietà della directory del nome SPN. Questo strumento consente inoltre di visualizzare i nomi SPN correnti, reimpostare i nomi SPN predefiniti dell'account e aggiungere o eliminare nomi SPN supplementari.

Nell'esempio seguente viene illustrata la sintassi utilizzata per registrare manualmente un nome SPN per una connessione TCP/IP.

setspn -A MSSQLSvc/myhost.redmond.microsoft.com:1433 accountname

Nota   Se un nome SPN esiste già, è necessario eliminarlo prima che sia possibile registrarlo nuovamente. Per eseguire questa operazione, utilizzare il comando setspn con l'opzione -D. Negli esempi seguenti viene illustrato come registrare manualmente un nuovo nome SPN basato su un'istanza. Per un'istanza predefinita, utilizzare il formato seguente:

setspn –A MSSQLSvc/myhost.redmond.microsoft.com accountname

Per un'istanza denominata, utilizzare il formato seguente:

setspn –A MSSQLSvc/myhost.redmond.microsoft.com:instancename accountname

Connessioni client

I nomi SPN specificati dall'utente sono supportati nei driver client. Se non viene specificato, tuttavia, il nome SPN verrà generato automaticamente in base al tipo di una connessione client. Per una connessione TCP, il formato del nome SPN è MSSQLSvc/FQDN:[porta] sia per le istanze denominate che per quelle predefinite.

Per le connessioni con named pipe e con memoria condivisa, il formato del nome SPN è MSSQLSvc/FQDN:nomeistanza per un'istanza denominata e MSSQLSvc/FQDN per l'istanza predefinita.

Utilizzo di un account di servizio come nome SPN

Come nome SPN è possibile utilizzare gli account di servizio, specificati mediante l'attributo di connessione per l'autenticazione Kerberos nei formati seguenti:

  • nomeutente@dominio o dominio\nomeutente per un account utente di dominio

  • computer$@dominio o host\FQDN per un account di dominio di computer, ad esempio di sistema locale o Servizio di rete.

Per determinare il metodo di autenticazione di una connessione, eseguire la query seguente.

SELECT net_transport, auth_scheme 
FROM sys.dm_exec_connections 
WHERE session_id = @@SPID;

Impostazioni predefinite relative all'autenticazione

Nella tabella seguente vengono descritte le impostazioni predefinite relative all'autenticazione utilizzate in base agli scenari di registrazione del nome SPN.

Scenario

Metodo di autenticazione

Il nome SPN viene mappato all'account di dominio o predefinito corretto, ad esempio di sistema locale o Servizio di rete.

NotaNota
Con il termine corretto si intende che l'account mappato dal nome SPN registrato è quello utilizzato per eseguire il servizio SQL Server.

Le connessioni locali utilizzano l'autenticazione NTLM, mentre quelle remote utilizzano l'autenticazione Kerberos.

Il nome SPN è rappresentato dall'account di dominio o predefinito corretto.

NotaNota
Con il termine corretto si intende che l'account mappato dal nome SPN registrato è quello utilizzato per eseguire il servizio SQL Server.

Le connessioni locali utilizzano l'autenticazione NTLM, mentre quelle remote utilizzano l'autenticazione Kerberos.

Il nome SPN viene mappato a un account di dominio o predefinito non corretto.

Errore di autenticazione

La ricerca del nome SPN ha esito negativo o non esegue il mapping a un account di dominio o predefinito corretto oppure il nome SPN non è un account di dominio o predefinito corretto.

Le connessioni locali e remote utilizzano l'autenticazione NTLM.

Commenti

In SQL Server 2008 la connessione amministrativa dedicata (DAC, Dedicated Administrator Connection) utilizza un nome di istanza basato sul nome SPN. Se tale nome è stato registrato in modo corretto, è possibile utilizzare l'autenticazione Kerberos con una connessione DAC. In alternativa, un utente può specificare il nome dell'account come nome SPN.

Se la registrazione del nome SPN ha esito negativo in fase di avvio, l'errore viene registrato nel registro errori di SQL Server e la procedura di avvio continua.

Se l'annullamento del nome SPN ha esito negativo in fase di arresto, l'errore viene registrato nel log degli errori di SQL Server e la procedura di arresto continua.