Registrazione di un nome dell'entità servizio per le connessioni KerberosRegister a Service Principal Name for Kerberos Connections

Per utilizzare l'autenticazione Kerberos con SQL ServerSQL Server è necessario che si verifichino entrambe le seguenti condizioni:To use Kerberos authentication with SQL ServerSQL Server requires both the following conditions to be true:

  • I computer client e server devono fare parte dello stesso dominio Windows o di domini trusted.The client and server computers must be part of the same Windows domain, or in trusted domains.

  • Un nome dell'entità servizio (SPN, Service Principal Name) deve essere stato registrato in Active Directory, che presuppone il ruolo del centro di distribuzione chiavi (KDC) in un dominio Windows.A Service Principal Name (SPN) must be registered with Active Directory, which assumes the role of the Key Distribution Center in a Windows domain. Una volta registrato, il nome SPN esegue il mapping all'account Windows che ha avviato il servizio dell'istanza di SQL ServerSQL Server .The SPN, after it is registered, maps to the Windows account that started the SQL ServerSQL Server instance service. Se la registrazione del nome SPN non è stata eseguita o ha avuto esito negativo, il livello di sicurezza di Windows non è in grado di determinare l'account associato al nome SPN e l'autenticazione Kerberos non verrà utilizzata.If the SPN registration has not been performed or fails, the Windows security layer cannot determine the account associated with the SPN, and Kerberos authentication will not be used.

    Nota

    Se il server non è in grado di eseguire la registrazione automatica del nome SPN, è necessario effettuare l'operazione manualmente.If the server cannot automatically register the SPN, the SPN must be registered manually. Vedere Registrazione manuale del nome SPN.See Manual SPN Registration.

    È possibile verificare che una connessione utilizzi Kerberos eseguendo una query sulla vista a gestione dinamica sys.dm_exec_connections.You can verify that a connection is using Kerberos by querying the sys.dm_exec_connections dynamic management view. Eseguire la query seguente e controllare il valore della colonna auth_scheme. Se l'autenticazione Kerberos è abilitata, tale valore corrisponderà a "KERBEROS".Run the following query and check the value of the auth_scheme column, which will be "KERBEROS" if Kerberos is enabled.

SELECT auth_scheme FROM sys.dm_exec_connections WHERE session_id = @@spid ;  
Suggerimento

MicrosoftMicrosoft Kerberos Configuration Manager per SQL ServerSQL Server è uno strumento di diagnostica che semplifica la risoluzione dei problemi di connettività correlati a Kerberos con SQL ServerSQL Server. MicrosoftMicrosoft Kerberos Configuration Manager for SQL ServerSQL Server is a diagnostic tool that helps troubleshoot Kerberos related connectivity issues with SQL ServerSQL Server. Per altre informazioni, vedere Microsoft Kerberos Configuration Manager per SQL Server.For more information, see Microsoft Kerberos Configuration Manager for SQL Server.

Ruolo del nome SPN nell'autenticazione The Role of the SPN in Authentication

Quando un'applicazione apre una connessione e utilizza l'autenticazione di Windows, SQL ServerSQL Server Native Client passa il nome del computer di SQL ServerSQL Server , il nome dell'istanza ed eventualmente un nome SPN.When an application opens a connection and uses Windows Authentication, SQL ServerSQL Server Native Client passes the SQL ServerSQL Server computer name, instance name and, optionally, an SPN. Se passato dalla connessione, il nome SPN viene utilizzato senza alcuna modifica.If the connection passes an SPN it is used without any changes.

Se non viene passato un nome SPN, viene costruito un nome SPN predefinito in base al protocollo utilizzato, al nome del server e al nome di istanza.If the connection does not pass an SPN, a default SPN is constructed based on the protocol used, server name, and the instance name.

In entrambi gli scenari indicati in precedenza, il nome SPN viene inviato al centro di distribuzione chiavi per ottenere un token di sicurezza per l'autenticazione della connessione.In both of the preceding scenarios, the SPN is sent to the Key Distribution Center to obtain a security token for authenticating the connection. Se non è possibile ottenere un token di sicurezza, l'autenticazione utilizza NTLM.If a security token cannot be obtained, authentication uses NTLM.

Un nome dell'entità servizio (SPN) è il nome con cui un client identifica in modo univoco un'istanza di un servizio.A service principal name (SPN) is the name by which a client uniquely identifies an instance of a service. Questo nome può essere utilizzato dal servizio di autenticazione Kerberos per l'autenticazione di un servizio.The Kerberos authentication service can use an SPN to authenticate a service. 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.When a client wants to connect to a service, it locates an instance of the service, composes an SPN for that instance, connects to the service, and presents the SPN for the service to authenticate.

Nota

Le informazioni incluse in questo argomento si applicano anche a configurazioni di SQL ServerSQL Server che utilizzano il clustering.The information that is provided in this topic also applies to SQL ServerSQL Server configurations that use clustering.

L'autenticazione di Windows è il metodo preferito per l'autenticazione in SQL Server da parte degli utenti.Windows Authentication is the preferred method for users to authenticate to SQL Server. I client che utilizzano l'autenticazione di Windows vengono autenticati tramite NTLM o Kerberos.Clients that use Windows Authentication are authenticated by either using NTLM or Kerberos. In un ambiente Active Directory l'autenticazione Kerberos viene sempre tentata per prima.In an Active Directory environment, Kerberos authentication is always attempted first. L'autenticazione Kerberos non è disponibile per client SQL Server 2005SQL Server 2005 che utilizzano named pipe.Kerberos authentication is not available for SQL Server 2005SQL Server 2005 clients using named pipes.

Autorizzazioni Permissions

Quando il servizio Motore di databaseDatabase Engine viene avviato, tenta di registrare il nome dell'entità servizio (SPN).When the Motore di databaseDatabase Engine service starts, it attempts to register the Service Principal Name (SPN). Se l'account che avvia SQL Server non dispone dell'autorizzazione necessaria per registrare un nome SPN in Servizi di dominio Active Directory, questa chiamata non riesce e viene registrato un messaggio di avviso nel registro eventi applicazioni nonché nel log degli errori di SQL Server.If the account starting SQL Server doesn’t have permission to register a SPN in Active Directory Domain Services, this call will fail and a warning message will be logged in the Application event log as well as the SQL Server error log. Per registrare il nome SPN, è necessario che il Motore di databaseDatabase Engine venga eseguito con un account predefinito, ad esempio Sistema locale (non consigliato) o NETWORK SERVICE, oppure con un account che dispone dell'autorizzazione necessaria per registrare un nome SPN, ad esempio un account di amministratore di dominio.To register the SPN, the Motore di databaseDatabase Engine must be running under a built-in account, such as Local System (not recommended), or NETWORK SERVICE, or an account that has permission to register an SPN, such as a domain administrator account. Quando SQL ServerSQL Server viene eseguito nel sistema operativo Windows 7Windows 7 o Windows Server 2008 R2Windows Server 2008 R2 , è possibile eseguire SQL ServerSQL Server utilizzando un account virtuale o un account dei servizi gestiti (MSA).When SQL ServerSQL Server is running on the Windows 7Windows 7 or Windows Server 2008 R2Windows Server 2008 R2 operating system, you can run SQL ServerSQL Server using a virtual account or a managed service account (MSA). Entrambi gli account virtuali e MSA possono registrare un SPN.Both virtual accounts and MSA’s can register an SPN. Se SQL ServerSQL Server non viene eseguito con nessuno di questi account, il nome SPN non viene registrato all'avvio e l'amministratore di dominio lo dovrà registrare manualmente.If SQL ServerSQL Server is not running under one of these accounts, the SPN is not registered at startup and the domain administrator must register the SPN manually.

Nota

Quando il dominio di Windows è configurato per essere eseguito a un livello funzionale inferiore a quello di Windows Server 2008 R2Windows Server 2008 R2 Windows Server 2008 R2, l'Account dei servizi gestiti non disporrà delle autorizzazioni necessarie per registrare i nomi SPN per il servizio Motore di database di SQL ServerSQL Server Database Engine .When the Windows domain is configured to run at less than the Windows Server 2008 R2Windows Server 2008 R2 Windows Server 2008 R2 functional level, then the Managed Service Account will not have the necessary permissions to register the SPNs for the Motore di database di SQL ServerSQL Server Database Engine service. Se l'autenticazione Kerberos è richiesta, l'amministratore di dominio deve registrare manualmente i nomi SPN di SQL ServerSQL Server sull'Account dei servizi gestiti.If Kerberos authentication is required, the Domain Administrator should manually register the SQL ServerSQL Server SPNs on the Managed Service Account.

Per altre informazioni su come concedere l'autorizzazione di lettura o scrittura per un nome SPN a un account diverso da quello di amministratore di dominio, vedere l'articolo della Knowledge Base Utilizzo dell'autenticazione Kerberos in SQL Server.The KB article, How to use Kerberos authentication in SQL Server, contains information about how to grant read or write permission to an SPN for an account that is not a Domain Administrator.

Maggiori informazioni sono disponibili nell'articolo How to Implement Kerberos Constrained Delegation with SQL Server 2008(Come implementare la delega vincolata Kerberos con SQL Server 2008)Additional information is available at How to Implement Kerberos Constrained Delegation with SQL Server 2008

Formati dei nomi SPN SPN Formats

A partire da SQL Server 2008SQL Server 2008, il formato dei nomi SPN è stato modificato per supportare l'autenticazione Kerberos con il protocollo TCP/IP, le named pipe e la memoria condivisa.Beginning with SQL Server 2008SQL Server 2008, the SPN format is changed in order to support Kerberos authentication on TCP/IP, named pipes, and shared memory. Di seguito sono riportati i formati del nome SPN supportati per le istanze denominate e predefinite.The supported SPN formats for named and default instances are as follows.

Istanza denominataNamed instance

  • MSSQLSvc/FQDN:[porta|nomeistanza], dove:MSSQLSvc/FQDN:[port|instancename], where:

    • MSSQLSvc è il servizio da registrare.MSSQLSvc is the service that is being registered.

    • FQDN è il nome di dominio completo del server.FQDN is the fully qualified domain name of the server.

    • porta è il numero di porta TCP.port is the TCP port number.

    • nomeistanza è il nome dell'istanza di SQL ServerSQL Server .instancename is the name of the SQL ServerSQL Server instance.

    Istanza predefinitaDefault instance

  • MSSQLSvc/FQDN:porta|MSSQLSvc/FQDN, dove:MSSQLSvc/FQDN:port|MSSQLSvc/FQDN, where:

    • MSSQLSvc è il servizio da registrare.MSSQLSvc is the service that is being registered.

    • FQDN è il nome di dominio completo del server.FQDN is the fully qualified domain name of the server.

    • porta è il numero di porta TCP.port is the TCP port number.

    Per il nuovo formato del nome SPN non è necessario specificare un numero di porta.The new SPN format does not require a port number. Di conseguenza, un server con più porte o un protocollo che non utilizza numeri di porta può utilizzare l'autenticazione Kerberos.This means that a multiple-port server or a protocol that does not use port numbers can use Kerberos authentication.

Nota

Nel caso di una connessione TCP/IP, in cui la porta TCP è inclusa nel nome SPN, in SQL ServerSQL Server è necessario abilitare il protocollo TCP perché un utente sia in grado di connettersi utilizzando l'autenticazione Kerberos.In the case of a TCP/IP connection, where the TCP port is included in the SPN, SQL ServerSQL Server must enable the TCP protocol for a user to connect by using Kerberos authentication.

MSSQLSvc/fqdn:portaMSSQLSvc/fqdn:port Nome SPN predefinito generato dal provider quando si utilizza il protocollo TCP.The provider-generated, default SPN when TCP is used. port è un numero di porta TCP.port is a TCP port number.
MSSQLSvc/fqdnMSSQLSvc/fqdn Nome SPN predefinito generato dal provider per un'istanza predefinita quando si utilizza un protocollo diverso da TCP.The provider-generated, default SPN for a default instance when a protocol other than TCP is used. fqdn è un nome di dominio completo.fqdn is a fully-qualified domain name.
MSSQLSvc/fqdn/NomeIstanzaMSSQLSvc/fqdn/InstanceName Nome SPN predefinito generato dal provider per un'istanza denominata quando si usa un protocollo diverso da TCP.The provider-generated, default SPN for a named instance when a protocol other than TCP is used. NomeIstanza è il nome di un'istanza di SQL ServerSQL Server.InstanceName is the name of an instance of SQL ServerSQL Server.

Registrazione automatica del nome SPN Automatic SPN Registration

Quando viene avviata un'istanza del Motore di database di SQL ServerSQL Server Database Engine , SQL ServerSQL Server tenta di registrare il nome SPN per il servizio SQL ServerSQL Server .When an instance of the Motore di database di SQL ServerSQL Server Database Engine starts, SQL ServerSQL Server tries to register the SPN for the SQL ServerSQL Server service. Quando l'istanza viene arrestata, SQL ServerSQL Server tenta di annullare la registrazione del nome SPN.When the instance is stopped, SQL ServerSQL Server tries to unregister the SPN. Per una connessione TCP/IP, il nome SPN viene registrato nel formato MSSQLSvc/<FQDN>:<tcpport>. Sia le istanze denominate che quella predefinita vengono registrate come MSSQLSvc e differenziate in base al valore <tcpport>.For a TCP/IP connection the SPN is registered in the format MSSQLSvc/<FQDN>:<tcpport>.Both named instances and the default instance are registered as MSSQLSvc, relying on the <tcpport> value to differentiate the instances.

Per altre connessioni che supportano l'autenticazione Kerberos, il nome SPN viene registrato nel formato MSSQLSvc/<FQDN>/<nomeistanza> per un'istanza denominataFor other connections that support Kerberos the SPN is registered in the format MSSQLSvc/<FQDN>/<instancename> for a named instance. e nel formato MSSQLSvc/<FQDN> per l'istanza predefinita.The format for registering the default instance is MSSQLSvc/<FQDN>.

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.Manual intervention might be required to register or unregister the SPN if the service account lacks the permissions that are required for these actions.

Registrazione manuale del nome SPN Manual SPN Registration

Per registrare manualmente il nome SPN, l'amministratore deve utilizzare lo strumento Setspn.exe disponibile negli strumenti di supporto Microsoft di Windows Server 2003Windows Server 2003 .To register the SPN manually, the administrator must use the Setspn.exe tool that is provided with the Microsoft Windows Server 2003Windows Server 2003 Support Tools. Per altre informazioni, vedere l'articolo della Knowledge Base Strumenti di supporto di Windows Server 2003 Service Pack 1 .For more information, see the Windows Server 2003 Service Pack 1 Support Tools KB article.

Setspn.exe è un'utilità della riga di comando che consente di leggere, modificare ed eliminare la proprietà della directory del nome dell'entità servizio (SPN).Setspn.exe is a command line tool that enables you to read, modify, and delete the Service Principal Names (SPN) directory property. Questo strumento consente inoltre di visualizzare i nomi SPN correnti, reimpostare i nomi SPN predefiniti dell'account e aggiungere o eliminare nomi SPN supplementari.This tool also enables you to view the current SPNs, reset the account's default SPNs, and add or delete supplemental SPNs.

Nell'esempio seguente viene illustrata la sintassi utilizzata per registrare manualmente un nome SPN per una connessione TCP/IP.The following example illustrates the syntax used to register manually register an SPN for a TCP/IP connection.

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

Nota Se un nome SPN esiste già, è necessario eliminarlo prima che sia possibile registrarlo nuovamente.Note If an SPN already exists, it must be deleted before it can be reregistered. Per eseguire questa operazione, utilizzare il comando setspn con l'opzione -D .You do this by using the setspn command together with the -D switch. Negli esempi seguenti viene illustrato come registrare manualmente un nuovo nome SPN basato su un'istanza.The following examples illustrate how to manually register a new instance-based SPN. Per un'istanza predefinita, utilizzare il formato seguente:For a default instance, use:

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

Per un'istanza denominata, utilizzare il formato seguente:For a named instance, use:

setspn -A MSSQLSvc/myhost.redmond.microsoft.com/instancename accountname  

Connessioni client Client Connections

I nomi SPN specificati dall'utente sono supportati nei driver client.User-specified SPNs are supported in client drivers. Se non viene specificato, tuttavia, il nome SPN verrà generato automaticamente in base al tipo di una connessione client.However, if an SPN is not provided, it will be generated automatically based on the type of a client connection. Per una connessione TCP, il formato del nome SPN è MSSQLSvc/FQDN:[porta] sia per le istanze denominate che per quella predefinita.For a TCP connection, an SPN in the format MSSQLSvc/FQDN:[port] is used for both the named and default instances.

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.For named pipes and shared memory connections, an SPN in the format MSSQLSvc/FQDN:instancename is used for a named instance and MSSQLSvc/FQDN is used for the default instance.

Utilizzo di un account di servizio come nome SPNUsing a service account as an SPN

Come nome SPN è possibile utilizzare gli account di servizio,Service accounts can be used as an SPN. specificati mediante l'attributo di connessione per l'autenticazione Kerberos nei formati seguenti:They are specified through the connection attribute for the Kerberos authentication and take the following formats:

  • username@domain o dominio\nomeutente per un account utente di dominiousername@domain or domain\username for a domain user account

  • computer$@domain o host\FQDN per un account di dominio di computer, ad esempio Sistema locale o NETWORK SERVICES.machine$@domain or host\FQDN for a computer domain account such as Local System or NETWORK SERVICES.

    Per determinare il metodo di autenticazione di una connessione, eseguire la query seguente.To determine the authentication method of a connection, execute the following query.

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

Impostazioni di autenticazione predefinite Authentication Defaults

Nella tabella seguente vengono descritte le impostazioni di autenticazione predefinite utilizzate in base agli scenari di registrazione del nome SPN.The following table describes the authentication defaults that are used based on SPN registration scenarios.

ScenarioScenario Metodo di autenticazioneAuthentication method
Viene eseguito il mapping del nome SPN all'account di dominio, all'account virtuale, all'account dei servizi gestiti (MSA) o all'account predefinito corretto.The SPN maps to the correct domain account, virtual account, MSA, or built-in account. ad esempio sistema locale o NETWORK SERVICE.For example, Local System or NETWORK SERVICE. Le connessioni locali utilizzano l'autenticazione NTLM, mentre quelle remote utilizzano l'autenticazione Kerberos.Local connections use NTLM, remote connections use Kerberos.
Il nome SPN è l'account di dominio, l'account virtuale, l'account dei servizi gestiti (MSA) o l'account predefinito corretto.The SPN is the correct domain account, virtual account, MSA, or built-in account. Le connessioni locali utilizzano l'autenticazione NTLM, mentre quelle remote utilizzano l'autenticazione Kerberos.Local connections use NTLM, remote connections use Kerberos.
Viene eseguito il mapping del nome SPN a un account di dominio, a un account virtuale, a un account dei servizi gestiti (MSA) o a un account predefinito non corretto.The SPN maps to an incorrect domain account, virtual account, MSA, or built-in account Errore di autenticazioneAuthentication fails.
La ricerca del nome SPN ha esito negativo o non viene eseguito il mapping a un account di dominio, a un account virtuale, a un account dei servizi gestiti (MSA) o a un account predefinito non corretto, oppure non è un account di dominio, un account virtuale, un account dei servizi gestiti o un account predefinito corretto.The SPN lookup fails or does not map to a correct domain account, virtual account, MSA, or built-in account, or is not a correct domain account, virtual account, MSA, or built-in account. Le connessioni locali e remote utilizzano l'autenticazione NTLM.Local and remote connections use NTLM.
Nota

Con il termine corretto si intende che l'account per il quale è stato eseguito il mapping dal nome SPN registrato è quello usato per eseguire il servizio SQL Server.'Correct' means that the account mapped by the registered SPN is the account that the SQL Server service is running under.

Commenti Comments

La connessione amministrativa dedicata (DAC) utilizza un nome di istanza basato sul nome SPN.The Dedicated Administrator Connection (DAC) uses an instance name based SPN. Se tale nome è stato registrato in modo corretto, è possibile utilizzare l'autenticazione Kerberos con una connessione DAC.Kerberos authentication can be used with a DAC if that SPN is registered successfully. In alternativa, un utente può specificare il nome dell'account come nome SPN.As an alternative a user can specify the account name as an SPN.

Se la registrazione del nome SPN ha esito negativo in fase di avvio, l'errore viene registrato nel log degli errori di SQL ServerSQL Server e la procedura di avvio continua.If SPN registration fails during startup, this failure is recorded in the SQL ServerSQL Server error log, and startup continues.

Se l'annullamento del nome SPN non riesce in fase di arresto, l'errore viene registrato nel log degli errori di SQL ServerSQL Server e la procedura di arresto continua.If SPN de-registration fails during shutdown, this failure is recorded in the SQL ServerSQL Server error log, and shutdown continues.

Vedere ancheSee Also

Supporto per nomi SPN nelle connessioni client Service Principal Name (SPN) Support in Client Connections
Nomi SPN (Service Principal Name) nelle connessioni client (OLE DB) Service Principal Names (SPNs) in Client Connections (OLE DB)
Nomi SPN (Service Principal Name) nelle connessioni client (ODBC) Service Principal Names (SPNs) in Client Connections (ODBC)
Funzionalità di SQL Server Native Client SQL Server Native Client Features
Gestire problemi di autenticazione Kerberos in un ambiente Reporting ServicesManage Kerberos Authentication Issues in a Reporting Services Environment