Condividi tramite


Registrazione di un nome dell'entità servizio per le connessioni Kerberos

Per usare l'autenticazione Kerberos con SQL Server è necessario che si verifichino entrambe le condizioni seguenti:

  • I computer client e server devono fare parte dello stesso dominio Windows o di domini trusted.

  • 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. Il nome SPN, dopo la registrazione, esegue il mapping all'account di Windows che ha avviato il servizio dell'istanza di SQL Server. 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.

    Nota

    Se il server non è in grado di eseguire la registrazione automatica del nome SPN, è necessario effettuare l'operazione manualmente. Vedere Registrazione manuale del nome SPN.

È possibile verificare che una connessione utilizzi Kerberos eseguendo una query sulla vista a gestione dinamica sys.dm_exec_connections. Eseguire la query seguente e controllare il valore della colonna auth_scheme. Se l'autenticazione Kerberos è abilitata, tale valore corrisponderà a "KERBEROS".

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

Suggerimento

Microsoft Kerberos Configuration Manager for SQL Server è uno strumento di diagnostica che semplifica la risoluzione dei problemi di connettività correlati a Kerberos con SQL Server. Per altre informazioni, vedere Microsoft Kerberos Configuration Manager per SQL Server.

Ruolo del nome SPN nell'autenticazione

Quando un'applicazione apre una connessione e usa l'autenticazione di Windows, SQL Server Native Client passa il nome del computer di SQL Server, il nome dell'istanza ed eventualmente un nome SPN. Se passato dalla connessione, il nome SPN viene utilizzato senza alcuna modifica.

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.

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. Se non è possibile ottenere un token di sicurezza, l'autenticazione utilizza NTLM.

Un nome dell'entità servizio (SPN) è 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 incluse in questo argomento si applicano anche a configurazioni di SQL Server che usano il clustering.

L'autenticazione di Windows è il metodo preferito per l'autenticazione in SQL Server da parte degli utenti. I client che utilizzano l'autenticazione di Windows vengono autenticati tramite NTLM o Kerberos. In un ambiente Active Directory l'autenticazione Kerberos viene sempre tentata per prima. L'autenticazione Kerberos non è disponibile per i client SQL Server 2005 tramite named pipe.

Autorizzazioni

Quando il servizio Motore di database viene avviato, prova a registrare il nome dell'entità servizio (SPN). Se l'account che avvia SQL Server non ha l'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. Per registrare il nome SPN, il motore di database deve essere in esecuzione con un account predefinito, ad esempio Sistema locale (scelta non consigliata) o SERVIZIO DI RETE o un account che dispone dell'autorizzazione per registrare un nome SPN, ad esempio un account amministratore di dominio. Quando SQL Server è in esecuzione nel sistema operativo Windows 7 o Windows Server 2008 R2, è possibile eseguire SQL Server usando un account virtuale o un account del servizio gestito.When SQL Server is running on the Windows 7 or Windows Server 2008 R2 operating system, you can run SQL Server using a virtual account or a managed service account (MSA). Entrambi gli account virtuali e MSA possono registrare un SPN. Se SQL Server non è in esecuzione con uno di questi account, il nome SPN non viene registrato all'avvio e l'amministratore di dominio deve registrare manualmente il nome SPN.

Nota

Quando il dominio di Windows è configurato per essere eseguito a un livello funzionale inferiore a quello di Windows Server 2008 R2, l'account del servizio gestito non disporrà delle autorizzazioni necessarie per registrare i nomi SPN per il servizio del motore di database di SQL Server. Se l'autenticazione Kerberos è richiesta, l'amministratore di dominio deve registrare manualmente i nomi SPN di SQL Server sull'account del servizio gestito.

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.

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)

Formati dei nomi SPN

A partire da SQL 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. 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.

    • porta è il numero di porta TCP.

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

Istanza predefinita

  • MSSQLSvc/FQDN:port|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 con 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 perché un utente sia in grado di connettersi usando l'autenticazione Kerberos.

MSSQLSvc/fqdn:port Nome SPN predefinito generato dal provider quando si utilizza il protocollo TCP. port è un numero di porta TCP.
MSSQLSvc/fqdn Nome SPN predefinito generato dal provider per un'istanza predefinita quando si utilizza un protocollo diverso da TCP. fqdn è un nome di dominio completo.
MSSQLSvc/fqdn:InstanceName Nome SPN predefinito generato dal provider per un'istanza denominata quando si usa un protocollo diverso da TCP. InstanceName è il nome di un'istanza di SQL Server.

Registrazione automatica del nome SPN

Quando viene avviata un'istanza del motore di database di SQL Server, SQL Server prova a registrare il nome SPN per il servizio SQL Server. Quando l'istanza viene arrestata, SQL Server prova ad annullare la registrazione del nome SPN. Per una connessione TCP/IP, il nome SPN viene registrato nel formato MSSQLSvc/<FQDN>:<tcpport>. Entrambe le istanze denominate e l'istanza predefinita vengono registrate come MSSQLSvc, basandosi sul <valore tcpport> per distinguere le istanze.

Per altre connessioni che supportano Kerberos, il nome SPN viene registrato nel formato MSSQLSvc/<FQDN>:<instancename> per un'istanza denominata. Il formato per la registrazione dell'istanza predefinita è 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.

Registrazione manuale del nome SPN

Per registrare manualmente il nome SPN, l'amministratore deve usare lo strumento di Setspn.exe fornito con gli strumenti di supporto di Microsoft Windows Server 2003. Per altre 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 dell'entità servizio (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 quella predefinita.

Per le named pipe e le connessioni di memoria condivisa, viene usato un nome SPN nel formatoFQDNMSSQLSvc/:instancename per un'istanza denominata e per l'istanza predefinita viene usato ilnome di dominio completo MSSQLSvc/.

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 Sistema locale o NETWORK SERVICES.

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 di autenticazione predefinite

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

Scenario Metodo di autenticazione
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. ad esempio sistema locale o NETWORK SERVICE.

Nota: corretto significa che l'account mappato dal nome SPN registrato è l'account in cui è in esecuzione il servizio SQL Server.
Le connessioni locali utilizzano l'autenticazione NTLM, mentre quelle remote utilizzano l'autenticazione Kerberos.
Il nome SPN è l'account di dominio, l'account virtuale, l'account dei servizi gestiti (MSA) o l'account predefinito corretto.

Nota: corretto significa che l'account mappato dal nome SPN registrato è l'account in cui è in esecuzione il servizio SQL Server.
Le connessioni locali utilizzano l'autenticazione NTLM, mentre quelle remote utilizzano l'autenticazione 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. Errore di autenticazione
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. Le connessioni locali e remote utilizzano l'autenticazione NTLM.

Commenti

La connessione amministrativa dedicata (DAC) 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 log degli errori di SQL Server e la procedura di avvio continua.

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

Vedere anche

Supporto del nome dell'entità servizio (SPN) nelle connessioni client
Nomi dell'entità servizio (SPN) nelle connessioni client (OLE DB)
Nomi SPN (Service Principal Name) nelle connessioni client (ODBC)
Funzionalità di SQL Server Native Client
Gestire problemi di autenticazione Kerberos in un ambiente Reporting Services