Supporto per nomi SPN nelle connessioni client

A partire da SQL Server 2008, il supporto per i nomi SPN è stato esteso per consentire l'autenticazione reciproca tramite tutti i protocolli. Nelle versioni precedenti di SQL Server i nomi SPN sono supportati solo per Kerberos tramite TCP quando il nome SPN predefinito per l'istanza di SQL Server viene registrato con Active Directory.

I nomi SPN vengono utilizzati dal protocollo di autenticazione per determinare l'account utilizzato per l'esecuzione di un'istanza di SQL Server. Se l'account dell'istanza è noto, è possibile utilizzare l'autenticazione Kerberos per fornire autenticazione reciproca dal client e dal server. Se l'account dell'istanza non è noto, viene utilizzata l'autenticazione NTLM, che fornisce solo l'autenticazione del client da parte del server. Attualmente SQL Server Native Client esegue la ricerca dell'autenticazione, derivando il nome SPN dal nome dell'istanza e dalle proprietà di connessione di rete. Le istanze di SQL Server tenteranno di registrare i nomi SPN all'avvio. In alternativa, è possibile registrare manualmente i nomi SPN. La registrazione, tuttavia, non riuscirà se l'account dispone di diritti di accesso insufficienti per la registrazione dei nomi SPN.

Gli account di dominio e del computer vengono registrati automaticamente in Active Directory. Tali account possono essere utilizzati come nomi SPN oppure gli amministratori possono definire nomi SPN personalizzati. SQL Server 2008 rende più gestibile e affidabile l'autenticazione protetta consentendo ai client di specificare direttamente il nome SPN da utilizzare.

[!NOTA]

Un nome SPN specificato da un'applicazione client viene utilizzato solo quando viene stabilita una connessione con protezione integrata di Windows NT.

Per ulteriori informazioni su Kerberos, vedere gli articoli seguenti:

Utilizzo

Nella tabella seguente vengono descritti gli scenari più comuni in cui le applicazioni client possono abilitare l'autenticazione protetta.

Scenario

Descrizione

Un'applicazione legacy non specifica un nome SPN.

Questo scenario di compatibilità garantisce che non vi saranno differenze di comportamento per le applicazioni sviluppate per le versioni precedenti di SQL Server. Se non viene specificato alcun nome SPN, l'applicazione si basa sui nomi SPN generati e non è in grado di identificare il metodo di autenticazione utilizzato.

Un'applicazione client che utilizza la versione corrente di SQL Server Native Client specifica un nome SPN nella stringa di connessione come utente di dominio o account del computer, come nome SPN specifico dell'istanza o come stringa definita dall'utente.

È possibile utilizzare la parola chiave ServerSPN in una stringa del provider, di inizializzazione o di connessione per effettuare le operazioni seguenti:

  • Specificare l'account utilizzato dall'istanza di SQL Server per una connessione. Questa operazione semplifica l'accesso all'autenticazione Kerberos. Se è presente un centro distribuzione chiavi (KDC, Key Distribution Center) Kerberos ed è stato specificato l'account corretto, è più probabile che venga utilizzata l'autenticazione Kerberos anziché l'autenticazione NTLM. Il centro distribuzione chiavi si trova in genere nello stesso computer del controller di dominio.

  • Specificare un nome SPN per cercare l'account del servizio per l'istanza di SQL Server. Per ogni istanza di SQL Server vengono generati due nomi SPN predefiniti che possono essere utilizzati a questo scopo. Non è tuttavia garantito che tali chiavi siano presenti in Active Directory, pertanto in questa situazione non è garantita neanche l'autenticazione Kerberos.

  • Specificare un nome SPN che verrà utilizzato per cercare l'account del servizio per l'istanza di SQL Server. Può trattarsi di qualsiasi stringa definita dall'utente mappata all'account del servizio. In questo caso, la chiave deve essere registrata manualmente nel centro distribuzione chiavi e deve essere conforme alle regole relative ai nomi SPN definiti dall'utente.

È possibile utilizzare la parola chiave FailoverPartnerSPN per specificare il nome SPN per il server partner di failover. L'intervallo di valori per gli account e per le chiavi di Active Directory coincide con i valori che è possibile specificare per il server principale.

Un'applicazione ODBC specifica un nome SPN come attributo di connessione per il server principale o il server partner di failover.

È possibile utilizzare l'attributo di connessione SQL_COPT_SS_SERVER_SPN per specificare il nome SPN per una connessione al server principale.

È possibile utilizzare l'attributo di connessione SQL_COPT_SS_FAILOVER_PARTNER_SPN per specificare il nome SPN per il server partner di failover.

Un'applicazione OLE DB specifica un nome SPN come proprietà di inizializzazione dell'origine dati per il server principale o per un server partner di failover.

È possibile utilizzare la proprietà di connessione SSPROP_INIT_SERVER_SPN nel set di proprietà DBPROPSET_SQLSERVERDBINIT per specificare il nome SPN per una connessione.

È possibile utilizzare la proprietà di connessione SSPROP_INIT_FAILOVER_PARTNER_SPN nel set di proprietà DBPROPSET_SQLSERVERDBINIT per specificare il nome SPN per il server partner di failover.

Un utente specifica un nome SPN per un server o per un server partner di failover in un nome di origine dati ODBC.

È possibile specificare il nome SPN in un nome di origine dati ODBC tramite le finestre di dialogo di configurazione del nome dell'origine dati.

L'utente specifica un nome SPN per un server o per un server partner di failover in una finestra di dialogo Collegamento dati o Account di accesso OLE DB.

È possibile specificare il nome SPN in una finestra di dialogo Collegamento dati o Account di accesso. La finestra di dialogo Account di accesso può essere utilizzata con ODBC o OLE DB.

Un'applicazione ODBC determina il metodo di autenticazione utilizzato per stabilire una connessione.

Se una connessione è stata aperta correttamente, un'applicazione può eseguire una query sull'attributo di connessione SQL_COPT_SS_INTEGRATED_AUTHENTICATION_METHOD per determinare il metodo di autenticazione utilizzato. Alcuni dei valori possibili sono NTLM e Kerberos.

Un'applicazione OLE DB determina il metodo di autenticazione utilizzato per stabilire una connessione.

Se una connessione è stata aperta correttamente, un'applicazione può eseguire una query sulla proprietà di connessione SSPROP_AUTHENTICATION_METHOD nel set di proprietà DBPROPSET_SQLSERVERDATASOURCEINFO per determinare il metodo di autenticazione utilizzato. Alcuni dei valori possibili sono NTLM e Kerberos.

Failover

I nomi SPN non vengono archiviati nella cache di failover e pertanto non possono essere passati tra connessioni. I nomi SPN verranno utilizzati in tutti i tentativi di connessione al server principale e al partner se specificati nella stringa di connessione o negli attributi di connessione.

Pool di connessioni

Nelle applicazioni è necessario tenere presente che la specifica dei nomi SPN solo in alcune stringhe di connessione può implicare la frammentazione del pool.

Le applicazioni possono specificare a livello di programmazione i nomi SPN come attributi di connessione anziché specificare parole chiave della stringa di connessione. In questo modo, viene semplificata la gestione della frammentazione del pool di connessioni.

Nelle applicazioni è inoltre necessario tenere presente che i nomi SPN nelle stringhe di connessione possono essere sostituiti dagli attributi di connessione corrispondenti, mentre le stringhe di connessione utilizzate dal pool di connessioni utilizzeranno i valori della stringa di connessione ai fini del pool.

Comportamento dei server legacy

Poiché il nuovo comportamento di connessione viene implementato dal client, non è specifico di una determinata versione di SQL Server.

Server collegati e delega

Quando si creano server collegati, è possibile utilizzare il parametro @provstr di sp_addlinkedserver per specificare i nomi SPN del server e del server partner di failover. L'utilizzo di questo parametro offre gli stessi vantaggi ottenuti specificando i nomi SPN nelle stringhe di connessione del client e consente di stabilire in modo più semplice e affidabile connessioni che utilizzano l'autenticazione Kerberos.

La delega con server collegati richiede l'autenticazione Kerberos.

Per un elenco di requisiti, vedere Configurazione di server collegati per la delega.

Aspetti correlati alla gestione dei nomi SPN specificati dalle applicazioni

Nel determinare se specificare nomi SPN in un'applicazione (tramite stringhe di connessione) o a livello di programmazione tramite proprietà di connessione (anziché basandosi sui nomi SPN generati dal provider predefinito), considerare gli aspetti seguenti:

  • Protezione: verificare se il nome SPN specificato comporta la divulgazione di informazioni protette.

  • Affidabilità: per consentire l'utilizzo di nomi SPN predefiniti, è necessario che l'account del servizio utilizzato per l'esecuzione dell'istanza di SQL Server disponga di privilegi sufficienti per l'aggiornamento di Active Directory nel centro distribuzione chiavi.

  • Utilità e trasparenza a livello di posizione: valutare le conseguenze sui nomi SPN di un'applicazione se il database viene spostato in un'istanza diversa di SQL Server. Questa considerazione si applica sia al server principale sia al relativo partner di failover se si utilizza il mirroring del database. Se una modifica apportata al server comporta la modifica dei nomi SPN, valutare le conseguenze sulle applicazioni e determinare se sarà possibile gestire tutte le modifiche.

Definizione del nome SPN

È possibile specificare un nome SPN nelle finestre di dialogo e nel codice. In questa sezione viene descritto come specificare un nome SPN.

La lunghezza massima consentita per un nome SPN è 260 caratteri.

Di seguito viene indicata la sintassi utilizzata per i nomi SPN nella stringa di connessione o negli attributi di connessione:

Sintassi

Descrizione

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:port

Nome SPN predefinito generato dal provider quando si utilizza il protocollo TCP.

port è un numero di porta TCP.

MSSQLSvc/fqdn:InstanceName

Nome SPN predefinito generato dal provider per un'istanza denominata quando si utilizza un protocollo diverso da TCP.

InstanceName è il nome di un'istanza di SQL Server.

HOST/fqdn

HOST/MachineName

Nome SPN mappato ad account del computer predefiniti registrati automaticamente in Windows.

Username@Domain

Specifica diretta di un account di dominio.

Username è un nome di account utente di Windows.

Domain è un nome di dominio di Windows o un nome di dominio completo.

MachineName$@Domain

Specifica diretta di un account del computer.

Se il server a cui si stabilisce la connessione viene eseguito utilizzando l'account di sistema locale o del servizio di rete, per ottenere l'autenticazione Kerberos ServerSPN può utilizzare il formato MachineName$@Domain.

KDCKey/MachineName

Nome SPN specificato dall'utente.

KDCKey è una stringa alfanumerica conforme alle regole relative alle chiavi KDC.

Sintassi ODBC e OLE DB con supporto di nomi SPN

Per informazioni specifiche della sintassi, vedere gli argomenti seguenti:

Per informazioni sulle applicazioni di esempio in cui viene illustrata questa funzionalità, vedere Considerazioni per l'installazione di esempi e di database di esempio di SQL Server.