Condividi tramite


Procedura: Attivazione dell'autenticazione Kerberos in un cluster di failover di SQL Server

Data aggiornamento: 15 settembre 2007

Kerberos è un protocollo di autenticazione di rete progettato per fornire un'autenticazione avanzata alle applicazioni client/server. Oltre a offrire un'infrastruttura di interoperabilità, il protocollo Kerberos aumenta la protezione dell'autenticazione estesa all'intera azienda.

L'autenticazione Kerberos può essere utilizzata con istanze autonome di Microsoft SQL Server 2005 oppure con istanze di cluster di failover eseguite su Microsoft Windows 2000 Service Pack 3 (SP3). SQL Server 2005 supporta questa funzionalità come parte di una tipica installazione di un dominio Active Directory di Microsoft Windows 2000.

Quando la risorsa del nome di rete da cui dipende SQL Server si trova in un cluster basato su Windows 2000, è possibile utilizzare l'autenticazione Kerberos sulla risorsa dopo aver aggiornato il computer a Windows 2000 Service Pack 3. Per ulteriori informazioni sull'attivazione di Kerberos in cluster di server, vedere l'articolo "Kerberos support on Windows 2000-based server clusters" della Microsoft Knowledge Base.

La sezione seguente descrive come effettuare una connessione a un server che esegue Microsoft Internet Information Services (IIS) al fine di creare una connessione Kerberos a un server che esegue SQL Server.

Prerequisiti

È possibile utilizzare questa funzionalità solo se il sistema operativo è Windows 2000 Service Pack 3.

Prima di eseguire la procedura di configurazione, scaricare le utilità Kerbtray e SetSPN.

  • Per scaricare l'utilità Kerbtray, visitare questo sito Web Microsoft. Kerbtray.exe consente con semplicità di verificare i ticket Kerberos, rimuovere ticket Kerberos o eseguire entrambe le operazioni da uno qualsiasi dei computer associati utilizzati.
  • Per scaricare l'utilità SetSPN visitare questo sito Web Microsoft.

SQL Server utilizza Kerberos solo se il client utilizza il protocollo TCP/IP per connettersi a SQL Server. Se ad esempio un client utilizza il protocollo named pipe, il protocollo Kerberos non viene utilizzato. Nel caso di più istanze di SQL Server su un singolo computer, è necessario configurare un nome SPN per ogni istanza di SQL Server dato che ciascuna di esse utilizza una porta TCP-IP univoca.

Attivazione di Kerberos per SQL Server 2005

Connessione a un server che esegue Microsoft Internet Information Services e creazione di una connessione Kerberos con SQL Server 2005

  1. Passaggio 1: configurazione del controller di dominio

Eseguire le operazioni seguenti in Utenti e computer di Active Directory su un controller di dominio:

  1. Fare clic con il pulsante destro del mouse sul computer che si desidera configurare per la delega (server dei servizi IIS) e quindi scegliere Considera attendibile il computer per la delega. Se il computer che esegue SQL Server è lo stesso che viene visualizzato come ultimo computer contattato ma al tempo stesso ha un server collegato, è necessario concedere a esso anche le autorizzazioni per la delega. Se il computer non è l'ultimo della catena, è necessario considerare attendibili per la delega tutti i computer intermedi.
  2. Concedere l'autorizzazione per la delega all'account utente di dominio che corrisponde all'account del servizio SQL Server. È necessario disporre di un account utente di dominio per installazioni cluster di SQL Server (questo passaggio non è necessario per i computer che eseguono SQL Server e che utilizzano un account di sistema locale):
    1. Nella cartella Users, fare clic con il pulsante destro del mouse sull'account utente e quindi scegliere Proprietà.
    2. Nella finestra delle proprietà dell'account utente, fare clic sulla scheda Account.
    3. In Opzioni account selezionare la casella di controllo L'account è trusted per delega. Verificare che per l'account sia deselezionata la casella di controllo L'account è sensibile e non può essere delegato.
  3. Utilizzare l'utilità Kerbtray.exe per verificare che siano stati ricevuti ticket Kerberos da controller di dominio e host:
    1. Fare clic con il pulsante destro del mouse sull'icona Kerbtray nell'area di notifica e quindi scegliere Purge Tickets.
    2. Attendere che l'icona di Kerbtray passi dal colore verde al giallo. Appena si verifica la variazione di colore dell'icona, aprire una finestra del prompt dei comandi e digitare il comando seguente:
      net session* /d
      Il comando interrompe le sessioni esistenti e forza la creazione di una nuova sessione e la ricezione di un ticket Kerberos.

Passaggio 2: configurazione del server dei servizi IIS

  1. Sostituire i file del sito Web predefinito wwwroot con i file con estensione asp di esempio. Per creare i file di esempio con estensione asp, utilizzare il codice riportato nella sezione "Script di prova ASP per il recupero dei dati di SQL Server".

  2. Aggiungere il file nella cartella wwwroot. Per eseguire l'operazione, utilizzare il codice di esempio riportato nella sezione "Script di prova ASP per il recupero dei dati di SQL Server". Salvare il file con il nome Default.asp.

  3. Riconfigurare il server Web per utilizzare solo l'autenticazione integrata di Windows:

    1. Fare clic con il pulsante destro del mouse sul server Web predefinito e quindi scegliere la cartella Protezione.
    2. Apportare le modifiche corrette nella cartella Protezione e quindi deselezionare l'opzione Accesso anonimo.
    3. Al prompt dei comandi digitare il comando seguente:
      cscript C:\Inetpub\Adminscripts\adsutil.vbs get w3svc/NTAuthenticationProviders
      Se è attivo Negotiate, viene restituito il messaggio seguente:
      NTAuthenticationProviders : (STRING) Negotiate,NTLM
      Per informazioni aggiuntive sulla configurazione di IIS per supportare l'autenticazione Kerberos e NTLM, vedere l'articolo della Knowledge Base "Procedura per la configurazione di IIS per il supporto dell'autenticazione Kerberos e NTLM" (informazioni in lingua inglese).

    [!NOTA] È necessario installare Microsoft Data Access (MDAC) 2,8 o SPI o versione successiva sul server dei servizi IIS. Per eseguire l'operazione e per rendere disponibili gli strumenti per l'esecuzione di test, installare gli strumenti client di Microsoft SQL Server 2000 sul server Web. Per installare solo MDAC 2.8 SP1 o versione successiva senza gli strumenti del client, visitare questo sito Web Microsoft.

  4. Verificare che nel Registro di sistema sia presente la voce HKLM\SW\MS\MSSQLSERVER\Client\DSQUERY. Se il valore non è presente, aggiungerlo come DSQUERY:Reg_SZ:DBNETLIB.

  5. Utilizzare l'utilità Kerbtray.exe per verificare che siano stati ricevuti ticket Kerberos da controller di dominio e host:

    1. Fare clic con il pulsante destro del mouse sull'icona Kerbtray nell'area di notifica e quindi scegliere Purge Tickets.
    2. Attendere che l'icona di Kerbtray passi dal colore verde al giallo. Appena si verifica la variazione di colore dell'icona, aprire una finestra del prompt dei comandi e digitare il comando seguente:
      net session * /d
      Il comando interrompe le sessioni esistenti e forza la creazione di una nuova sessione e la ricezione di un ticket Kerberos.

Passaggio 3: creazione di un nome SPN per SQL Server

ms189585.Caution(it-it,SQL.90).gifAttenzione:
SQL Server utilizza Kerberos solo se il client utilizza il protocollo TCP/IP per connettersi a SQL Server. Se ad esempio un client utilizza il protocollo named pipe, il protocollo Kerberos non viene utilizzato. Nel caso di più istanze di SQL Server su un singolo computer, è necessario configurare un nome SPN per ogni istanza di SQL Server dato che ciascuna di esse utilizza una porta TCP-IP univoca.
ms189585.note(it-it,SQL.90).gifImportante:
Se il servizio SQL Server viene eseguito in base all'account LocalSystem non è necessario configurare manualmente un nome SPN per SQL Server. Il nome SPN viene creato automaticamente all'avvio del servizio SQL Server. Se il servizio SQL Server viene eseguito in base a un account utente di dominio, è necessario configurare un nome SPN manualmente. A tale scopo, eseguire la procedura riportata di seguito.

Per configurare un nome SPN per SQL Server, utilizzare l'utilità SETSPN del Resource Kit di Microsoft Windows. Per scaricare l'utilità SETSPN, visitare questo sito Web Microsoft.

Considerare le informazioni seguenti prima di eseguire SETSPN:

  • È necessario eseguire setspn.exe con un account di accesso dotato delle autorizzazioni necessarie per registrare il nome SPN.
  • Annotare l'account utente di dominio in base al quale viene eseguita l'istanza di SQL Server. Negli esempi seguenti l'account è denominato <SQL_Service_Account>.
    Importante   Se l'istanza di SQL Server viene eseguita in base all'account LocalSystem non è necessario eseguire l'utilità SETSPN.
  • È necessario disporre del nome di dominio completo (FQDN) del computer in cui è in esecuzione SQL Server. Per determinare il nome di dominio completo del computer in cui è in esecuzione SQL Server, utilizzare l'utilità ping. A tale scopo, eseguire la procedura seguente:
  1. Effettuare il ping del computer in cui è in esecuzione SQL Server per conoscere il suo indirizzo IP:
    C:\>ping MySQLServer
    Pinging MySQLServer.MyDomain.com [10.10.10.10] with 32 bytes of data:
    Reply from 10.10.10.10: bytes=32 time=1ms TTL=128
  2. Utilizzare il comando ping -a per eseguire una ricerca inversa dell'indirizzo IP e verificare in tal modo la correttezza del nome di dominio completo restituito dal protocollo DNS (Domain Name System):
    C:\>ping -a 10.10.10.10
    Pinging MySQLServer.MyDomain.com [10.10.10.10] with 32 bytes of data:
    Reply from 10.10.10.10: bytes=32 time<1ms TTL=128
  3. Effettuare il ping del nome dell'istanza del cluster di failover per ottenere l'indirizzo IP e quindi eseguire il comando ping -a per verificare la correttezza del nome di dominio completo restituito dal protocollo DNS.

[!NOTA] Se si utilizza il clustering di failover di SQL Server, utilizzare il nome di dominio completo dell'istanza del cluster di failover. Annotare con esattezza la porta TCP/IP utilizzata dall'istanza di SQL Server. Per accedere a queste informazioni, aprire Gestione configurazione SQL Server sul computer in cui è in esecuzione SQL Server, fare clic sull'istanza di SQL Server e quindi visualizzare le proprietà relative al protocollo TCP/IP (porta predefinita).

Dopo aver determinato l'account utente di dominio in base al quale viene eseguito il servizio SQL Server, il nome di dominio completo del computer in cui è in esecuzione SQL Server e la porta TCP/IP utilizzata dall'istanza di SQL Server, eseguire la procedura seguente per creare il nome SPN per SQL Server.

[!NOTA] È necessario essere membri del gruppo degli amministratori di dominio per eseguire il comando SETSPN.

  1. Se si utilizza il clustering di failover di SQL Server, eseguire il comando SETSPN seguente:
    setspn -A MSSQLSvc/<FQDN> <SQL_Service_Account>
    Se ad esempio MySQLServer.MyDomain.com viene eseguito in base all'account utente di dominio SQLSVC, dove MySQLServer.MyDomain.com è il nome dell'istanza di SQL Server 2005 del cluster, eseguire il comando seguente:
    setspn -A MSSQLSvc/MySQLServer.MyDomain.com SQLSVC
  2. Per i computer in cui è in esecuzione SQL Server, sia quelli del cluster che quelli che non fanno parte del cluster, eseguire il comando SETSPN seguente per registrare un nome SPN relativo alla porta utilizzata dal computer in cui è in esecuzione SQL Server:
    setspn -A MSSQLSvc/<FQDN>:<Port> <SQL_Service_Account>
    Se ad esempio MySQLServer.MyDomain.com viene eseguito in base all'account utente di dominio SQLSVC sulla porta 1433, eseguire il comando SETSPN seguente:
    setspn -A MSSQLSvc/MySQLServer.MyDomain.com:1433 SQLSVC
  3. Dopo aver registrato il nome SPN, verificare la correttezza della registrazione utilizzando la funzionalità LIST (opzione -L) dell'utilità SETSPN. Eseguire SETSPN -L <SQL_Service_Account> per elencare tutti i nomi SPN registrati per l'account utente di dominio in base al quale viene eseguita l'istanza di SQL Server:
    setspn -L <SQL_Service_Account>
    Se ad esempio MySQLServer.MyDomain.com viene eseguito in base all'account utente di dominio SQLSVC sulla porta 1433, eseguire il comando seguente:
    setspn -A SQLSVC
    Il nome SPN creato nel passaggio 1 (se SQL Server appartiene a un cluster) e nel passaggio 2 (se SQL Server non appartiene a un cluster) viene visualizzato nell'output seguente:
    C:\>setspn -l SQLSVC
    Registered ServicePrincipalNames for CN=SQLSVC,CN=Users,DC=MyDomain,DC=com:
        MSSQLSvc/MySQLServer.MyDomain.com
        MSSQLSvc/MySQLServer.MyDomain.com:1433

[!NOTA] Se si utilizza il clustering di failover di SQL Server, è necessario registrare un nome SPN senza il numero della porta e un altro nome SPN con il numero della porta. Per un tipico computer non appartenente a un cluster e in cui è in esecuzione SQL Server, è necessario registrare solo il nome SPN con il numero della porta. Non vi sarà comunque alcun problema con i computer non appartenenti al cluster nel caso sia registrato un ulteriore nome SPN senza il numero della porta.

[!NOTA] È anche possibile utilizzare l'utilità Ldifde.exe sul controller di dominio per verificare entrambe le registrazioni SPN. La procedura necessaria per eseguire l'operazione è descritta nella sezione relativa a come ottenere un elenco di informazioni relative ai nomi SPN di Active Directory, in questo argomento.

Passaggio 4: configurazione dei computer client

  1. Verificare su ogni client che si connetterà che Microsoft Internet Explorer sia configurato per utilizzare l'autenticazione di Windows:
  2. Scegliere Opzioni Internet dal menu Strumenti di Internet Explorer.
  3. Fare clic sulla scheda Avanzate.
    In Protezione, selezionare Abilita autenticazione Windows integrata (sarà necessario riavviare il computer) e quindi scegliere OK.

Passaggio 5: test della configurazione

Su tutti i computer interessati:

  1. Accedere al computer e quindi utilizzare Kerbtray.exe per verificare che sia possibile per il computer ottenere un ticket Kerberos valido dal controller di dominio.
  2. Utilizzare Kerbtray.exe per rimuovere tutti i ticket sul computer.
  3. Creare la pagina Web che restituisce i dati di SQL Server e stabilire una connessione con essa.

[!NOTA] Sostituire SQLSERVERNAME con il nome del computer in cui è in esecuzione SQL Server:

  • Se vengono restituiti i dati, nella pagina viene visualizzato il tipo di autenticazione Negotiate e i dati di SQL Server per il risultato della stored procedure sp_helpdb che dovrebbe restituire un elenco dei database sul server in fase di connessione tramite la pagina ASP.
  • Se la funzione di controllo è attiva in SQL Server, nel registro applicazione verrà indicato che la connessione è considerata attendibile.

Script di prova ASP per il recupero dei dati di SQL Server

Di seguito è riportato uno script di prova ASP per dati di SQL Server. Per utilizzare questo esempio di codice, sostituire SQLSERVERNAME con il nome del computer in cui è in esecuzione SQL Server:

<%@ Language=VBScript %>

<HTML>

<HEAD>

<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">

</HEAD>

<BODY>

<%="'auth_user' is" & request.servervariables("auth_user")%>

<P>

<%="'auth_type' is" & request.servervariables("auth_type")%>

<P>

Connections string is <B>" Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=pubs;Data Source=SQLSERVERNAME </B>

<P>

<%

set rs = Server.CreateObject("ADODB.Recordset")

set cn = Server.CreateObject("ADODB.Connection")

cn.Open "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=pubs;Data Source=SQLSERVERNAME"

rs.open "MASTER..sp_helpdb",cn

Response.Write cstr(rs.Fields.Count) +"<BR>"

while not rs.EOF

Response.Write cstr(rs(0))+"<BR>"

rs.MoveNext

wend

rs.Close

cn.Close

set rs = nothing ' Frees memory reserved by the recordset.

set cn = nothing ' Frees memory reserved by the connection.

%>

</BODY>

</HTML>

Come ottenere un elenco di informazioni relative ai nomi SPN di Active Directory

Per ottenere un elenco di informazioni relative ai nomi SPN di Active Directory, eseguire il comando seguente su uno dei controller di dominio, dove betaland è il nome di dominio NetBIOS e NewoutputUsers.txt è il nome del file di output utilizzato per memorizzare i risultati. Se non si utilizza un percorso completo, il file viene memorizzato nella cartella corrente in cui viene eseguita la riga di comando. Il comando di esempio seguente interroga l'intero dominio:

ldifde -d "CN=Users,DC=betaland" -l servicePrincipalName -F NewoutputUsers.txt

La sintassi utilizzata per il comando crea un file denominato NewoutputUsers.txt contenente informazioni simili a quelle riportate nella sezione "Output a livello di dominio in NewouputUsers.txt" di questo argomento.

La quantità di informazioni potrebbe essere molto elevata quando esse sono riferite a un intero dominio. Per limitare le informazioni ottenute a uno specifico nome utente, utilizzare la sintassi seguente, dove User Name rappresenta il nome utente e betaland il dominio interrogato:

ldifde -d "CN=User Name,DC=betaland" -l servicePrincipalName -F NewoutputUsers.txt

La raccolta di informazioni correlate a un utente specifico riduce considerevolmente i dati in cui è necessario eseguire ricerche. Se si raccolgono le informazioni relative all'intero dominio, eseguire le ricerche facendo riferimento al nome utente specifico del server in questione. Nell'esempio di output saranno presenti i dati seguenti:

  • Voci relative ai server non più esistenti ma che non sono stati completamente rimossi da Active Directory.
  • L'utente "User Name" presenta informazioni SPN valide su circa dieci server diversi.

È inoltre possibile utilizzare lo strumento Interfacce di servizio Active Directory (ADSI, Active Directory Service Interfaces) per correggere le voci di Active Directory che non sono valide.

Attenzione   L'uso dello snap-in Modifica ADSI, dell'utilità LDP o di qualsiasi altro client LDAP versione 3 e l'erronea modifica degli attributi degli oggetti di Active Directory possono causare problemi gravi. Tali problemi possono essere di entità tale da richiedere la reinstallazione di Microsoft Windows 2000 Server, di Microsoft Exchange 2000 Server o di entrambi. Microsoft non può garantire la risoluzione di problemi causati dall'erronea modifica degli attributi degli oggetti di Active Directory. L'utente è il solo responsabile della modifica di tali attributi.

Output a livello di dominio in NewouputUsers.txt

dn: CN=User Name,CN=Users,DC=betaland

changetype: add

servicePrincipalName: MSSQLSvc/CLUSTERDEFAULT.betaland:1257

servicePrincipalName: MSSQLSvc/INST3.betaland:3616

servicePrincipalName: MSSQLSvc/INST2.betaland:3490

servicePrincipalName: MSSQLSvc/SQLMAN.betaland:1433

servicePrincipalName: MSSQLSvc/VSS1.betaland:1433

servicePrincipalName: MSSQLSvc/INST1.betaland:2536

servicePrincipalName: MSSQLSvc/INST4.betaland:3967

servicePrincipalName: MSSQLSvc/SQLVIRTUAL1.betaland:1434

servicePrincipalName: MSSQLSvc/SQLVIRTUAL.betaland:1433

servicePrincipalName: MSSQLSvc/SQLBUSTER.betaland:1315

Vedere anche

Altre risorse

Procedure per la configurazione della disponibilità 
Installazione di SQL Server 2005
Aggiornamento a SQL Server 2005

Guida in linea e informazioni

Assistenza su SQL Server 2005