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

Si applica a: SQL Server

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. Dopo la registrazione, il nome SPN esegue il mapping all'account 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 viene usata.

    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 che corrisponderà a KERBEROS se l'autenticazione Kerberos è abilitata.

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 usato senza alcuna modifica.

Se non viene passato un nome SPN, viene costruito un nome SPN predefinito in base al protocollo usato, 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 usa NTLM.

Un SPN è il nome in base al quale 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 in questo articolo 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.

Autorizzazioni

Quando il servizio Motore di database viene avviato, prova a registrare il nome dell'entità servizio (SPN). Si supponga che l'account che avvia SQL Server non sia autorizzato a registrare un nome dell'entità servizio in Active Directory Domain Services. In tale caso, la chiamata ha esito negativo e viene registrato un messaggio di avviso nel log eventi dell'applicazione e nel log degli errori di SQL Server.

Per registrare il nome SPN, è necessario che il Motore di database venga eseguito con un account predefinito, ad esempio Local System (non consigliato) o NETWORK SERVICE, oppure con un account che ha l'autorizzazione necessaria per registrare un nome SPN. È possibile registrare un nome SPN usando un account amministratore di dominio, ma questo approccio non è consigliato in un ambiente di produzione. È possibile eseguire SQL Server usando un account virtuale o un account del servizio gestito (MSA). Sia gli account virtuali che gli account MSA possono registrare un SPN. Se SQL Server non viene eseguito con uno di questi account, il nome SPN non viene registrato all'avvio e l'amministratore di dominio lo dovrà registrare manualmente.

Formati dei nomi SPN

Il formato dei nomi SPN supporta 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.
    • <instancename> è 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.
Formato dei nomi SPN Descrizione
MSSQLSvc/<FQDN>:<port> 1 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.

1 Per il nuovo formato del nome SPN non è necessario specificare un numero di porta. Un server con più porte o un protocollo che non usa numeri di porta possono comunque usare l'autenticazione Kerberos.

Per 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.

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 l'autenticazione Kerberos, il nome SPN viene registrato nel formato MSSQLSvc/<FQDN>:<instancename> per un'istanza denominata. Il formato per registrare l'istanza predefinita è MSSQLSvc/<FQDN>.

Per concedere le autorizzazioni all'account di avvio di SQL Server per registrare e modificare il nome SPN, eseguire le operazioni seguenti:

  1. Nel controller di dominio aprire Utenti e computer di Active Directory.

  2. Selezionare Visualizza > Avanzate.

  3. In Computer individuare il computer SQL Server, quindi fare clic con il pulsante destro del mouse e scegliere Proprietà.

  4. Nella scheda Protezione, selezionare Avanzate.

  5. Se l'account di avvio di SQL Server non è elencato, nell’elenco selezionare Aggiungi per aggiungerlo. Una volta aggiunto, eseguire i seguenti passaggi:

    1. Selezionare l'account e quindi Modifica.

    2. In Autorizzazioni selezionare Scrittura convalidata servicePrincipalName.

    3. Scorrere verso il basso e in Proprietà selezionare:

      • Lettura servicePrincipalName
      • Scrittura servicePrincipalName
    4. Selezionare OK due volte.

  6. Chiudere Utenti e computer di Active Directory.

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, è possibile usare lo strumento setspn integrato in Windows. 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.

Per altre informazioni sullo strumento setspn, sulle autorizzazioni necessarie ed esempi su come usarlo, vedere setspn.

L'esempio seguente illustra la sintassi usata per registrare manualmente un nome SPN per una connessione TCP/IP mediante un account utente di dominio:

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

Nota

Se un nome SPN esiste già, è necessario eliminarlo prima che sia possibile registrarlo nuovamente. A tale scopo, usare setspn e l'opzione -D. Negli esempi seguenti viene illustrato come registrare manualmente un nuovo nome SPN basato su un'istanza. Per un'istanza predefinita con un account utente di dominio, usare:

setspn -S MSSQLSvc/myhost.redmond.microsoft.com redmond\accountname

Per un'istanza denominata, utilizzare il formato seguente:

setspn -S MSSQLSvc/myhost.redmond.microsoft.com:instancename redmond\accountname

Per altre informazioni sulle configurazioni dei gruppi di disponibilità AlwaysOn, vedere Listener e Kerberos (SPN).

Connessioni client

I nomi SPN specificati dall'utente sono supportati nei driver client. Tuttavia, se il nome SPN non è specificato, viene generato automaticamente in base al tipo di connessione client. Per una connessione TCP, il formato del nome SPN è MSSQLSvc/FQDN:[<port>] sia per le istanze denominate che per quella predefinita.

Per le connessioni con named pipe e con memoria condivisa, il formato del nome SPN è MSSQLSvc/<FQDN>:<instancename> 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:

  • username\@domain o domain\username per un account utente di dominio

  • machine$\@domain o host\FQDN per un account di dominio del computer, ad esempio Local System o NETWORK SERVICE.

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 Authentication 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. Ad esempio, Local System o NETWORK SERVICE. 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. 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 del servizio gestito o a un account predefinito corretto, oppure non è un account di dominio, un account virtuale, un account del servizio gestito o un account predefinito corretto. Le connessioni locali e remote utilizzano l'autenticazione 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.

Osservazioni:

La connessione amministrativa dedicata (DAC) usa un nome SPN basato sul nome dell'istanza. 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.