Esercitazione: Usare adutil per configurare l'autenticazione di Active Directory con SQL Server in Linux

Si applica a:SQL Server - Linux

Questa esercitazione illustra come configurare l'autenticazione di Active Directory in Windows per SQL Server in Linux usando adutil. Per un altro metodo di configurazione dell'autenticazione di Active Directory tramite ktpass, vedere Esercitazione: Usare l'autenticazione di Active Directory con SQL Server in Linux.

Questa esercitazione è costituita dalle attività seguenti:

  • Installare adutil
  • Aggiungere un computer Linux al dominio Active Directory
  • Creare un utente Active Directory per SQL Server e impostare il nome dell'entità servizio (SPN) tramite adutil
  • Creare il file keytab del servizio SQL Server
  • Configurare SQL Server per usare il file keytab
  • Creare account di accesso di SQL Server basati su Active Directory usando Transact-SQL
  • Connettersi a SQL Server usando l'autenticazione di Active Directory

Prerequisiti

Per configurare l'autenticazione di Active Directory sono necessari:

  • Un controller di dominio Windows che esegue Active Directory Domain Services nella rete.
  • Lo strumento adutil installato in un computer host aggiunto a un dominio.

Preparazione del computer di dominio

Assicurarsi che sia stata aggiunta una voce per l'host di inoltro (A) in Active Directory per l'indirizzo IP dell'host Linux. In questa esercitazione, l'indirizzo IP del computer host sql1 è 10.0.0.10. Aggiungi la voce dell'host di inoltro in Active Directory nell'esempio seguente. La voce garantisce il raggiungimento dell'host corretto quando gli utenti si connettono a sql1.contoso.com.

add host record

Per questa esercitazione viene usato un ambiente in Azure con tre macchine virtuali (VM). Una VM è un computer Windows Server denominato adVM.contoso.com, in esecuzione come controller di dominio con il nome di dominio contoso.com. La seconda VM è un computer client con Windows 10 denominato winbox, in cui è installato SQL Server Management Studio (SSMS). La terza è un computer Ubuntu 18.04 LTS denominato sql1, che ospita SQL Server.

Aggiungere il computer host Linux al dominio Active Directory

Per aggiungere sql1 al dominio Active Directory, vedi Aggiungere un host di SQL Server in Linux a un dominio di Active Directory.

Installare adutil

Per installare adutil, seguire la procedura descritta nell'articolo Introduzione all'utilità di Active Directory adutil nel computer host aggiunto al dominio nel passaggio precedente.

Usare adutil per creare un utente Active Directory per SQL Server e impostare il nome dell'entità servizio (SPN)

  1. Ottenere o rinnovare il ticket-granting ticket (TGT) Kerberos usando il comando kinit. È necessario usare un account con privilegi per il comando kinit e il computer host deve già far parte del dominio. L'account deve avere l'autorizzazione per connettersi al dominio e per creare account ed SPN nel dominio.

    In questo script di esempio è già stato creato un utente con privilegi denominato privilegeduser@CONTOSO.COM nel controller di dominio.

    kinit privilegeduser@CONTOSO.COM
    
  2. Usando adutil, crea il nuovo utente che verrà usato come account Active Directory con privilegi da SQL Server.

    Le password possono essere specificate in tre modi diversi. Se si usano più metodi, la precedenza con cui vengono applicati è la seguente:

    • Uso del flag password: --password <password>
    • In una variabile di ambiente: ADUTIL_ACCOUNT_PWD
    • Input interattivo al prompt della riga di comando

    I metodi della variabile di ambiente e dell'input interattivo sono più sicuri del flag password.

    adutil user create --name sqluser --distname CN=sqluser,CN=Users,DC=CONTOSO,DC=COM --password 'P@ssw0rd'
    

    È possibile specificare il nome dell'account usando il nome distinto (--distname), come illustrato sopra, oppure si può usare il nome dell'unità organizzativa (OU). Il nome dell'unità organizzativa (--ou) ha la precedenza sul nome distinto nel caso in cui li si specifichi entrambi. Per altri dettagli, è possibile eseguire il comando seguente:

    adutil user create --help
    
  3. Registra gli SPN nell'entità di sicurezza creata in precedenza. È necessario usare il nome di dominio completo (FQDN) del computer. In questa esercitazione viene usata la porta predefinita 1433 di SQL Server. Il numero di porta dell'utente potrebbe essere diverso.

    adutil spn addauto -n sqluser -s MSSQLSvc -H sql1.contoso.com -p 1433
    
    • addauto crea automaticamente gli SPN, purché i privilegi per l'account kinit siano sufficienti.
    • -n: nome dell'account a cui verranno assegnati gli SPN.
    • -s: nome del servizio da usare per la generazione degli SPN. In questo caso, trattandosi del nome del servizio SQL Server, è MSSQLSvc.
    • -H: nome host da usare per la generazione degli SPN. Se non specificato, verrà usato l’FQDN dell'host locale. In questo caso, il nome host è sql1 e il nome di dominio completo è sql1.contoso.com.
    • -p: porta da usare per la generazione degli SPN. Se non specificata, gli SPN verranno generati senza porta. In questo caso, le connessioni SQL funzioneranno solo quando SQL Server è in ascolto sulla porta predefinita 1433.

Crea il file keytab del servizio SQL Server usando mssql-conf

È possibile installare adutil e integrarlo con mssql-conf per creare e configurare la keytab usando direttamente mssql-conf. Questo è il metodo preferito per la creazione di un file keytab del servizio SQL Server. In caso contrario, è possibile creare manualmente il file keytab del servizio SQL Server.

Prerequisiti

  1. Assicurati che il file /var/opt/mssql/mssql.conf sia di proprietà di mssql e non root. In caso contrario, è necessario eseguire i comandi mssql-conf usando sudo.

  2. In un controller di dominio, nelle impostazioni di Active Directory per l'account network.privilegedadaccount (in questi esempi, sqluser@CONTOSO.COM), abilita le opzioni seguenti nella scheda Account, nella sezione Opzioni account:

    • Questo account supporta la crittografia AES 128 bit Kerberos
    • Questo account supporta la crittografia AES 256 bit Kerberos

Creare il file keytab

Dopo aver creato l'utente e gli SPN, è possibile creare il keytab seguendo questa procedura.

  1. Passare all'utente mssql:

    su mssql
    
  2. Accedi come utente di Active Directory usando il comando kinit:

    kinit privilegeduser@CONTOSO.COM
    
  3. Crea il file keytab:

    /opt/mssql/bin/mssql-conf setup-ad-keytab /var/opt/mssql/secrets/mssql.keytab sqluser
    

    Ti viene richiesto di riavviare il servizio SQL Server per adottare la nuova configurazione di Active Directory, che è possibile eseguire nella sezione successiva.

  4. Verifica che il keytab sia stato creato con le voci corrette:

    klist -kte /var/opt/mssql/secrets/mssql.keytab
    

    L'output visualizzato sarà simile all'esempio seguente:

    keytab name: FILE:/var/opt/mssql/secrets/mssql.keytab
    KVNO Timestamp           Principal
    ---- ------------------- ------------------------------------------------------
       4 12/30/2021 14:02:08 sqluser@CONTOSO.COM (aes256-cts-hmac-sha1-96)
       4 12/30/2021 14:02:08 MSSQLSvc/sql1.contoso.com:1433@CONTOSO.COM (aes256-cts-hmac-sha1-96)
       4 12/30/2021 14:02:08 MSSQLSvc/sql1.contoso.com@CONTOSO.COM (aes256-cts-hmac-sha1-96)
       4 12/30/2021 14:02:08 MSSQLSvc/sql1:1433@CONTOSO.COM (aes256-cts-hmac-sha1-96)
       4 12/30/2021 14:02:08 MSSQLSvc/sql1@CONTOSO.COM (aes256-cts-hmac-sha1-96)
    

    Nota

    Se il file /var/opt/mssql/mssql.conf non è di proprietà di mssql, è necessario configurare mssql-conf per impostare i valori network.kerberoskeytabfile e network.privilegedadaccount in base ai passaggi precedenti. Scrivi la password quando richiesto.

    /opt/mssql/bin/mssql-conf set network.kerberoskeytabfile /var/opt/mssql/secrets/mssql.keytab
    /opt/mssql/bin/mssql-conf set network.privilegedadaccount sqluser
    
  5. Convalida la configurazione per assicurarti che l'autenticazione di Active Directory funzioni senza problemi.

    /opt/mssql/bin/mssql-conf validate-ad-config /var/opt/mssql/secrets/mssql.keytab
    

    L'output dovrebbe essere simile all'esempio seguente:

    Detected Configuration:
    Default Realm: CONTOSO.COM
    Keytab: /var/opt/mssql/secrets/mssql.keytab
    Reverse DNS Result: sql1.contoso.com
    SQL Server Port: 1433
    Detected SPNs (SPN, KVNO):
    (MSSQLSvc/sql1.CONTOSO.COM:1433, 4)
    (MSSQLSvc/sql1.CONTOSO.COM, 4)
    (MSSQLSvc/sql1:1433, 4)
    (MSSQLSvc/sql1, 4)
    Privileged Account (Name, KVNO):
    (sqluser, 4)
    

Creare il file keytab del servizio SQL Server manualmente

Se adutil è stato installato e integrato con mssql-conf, è possibile passare direttamente a Creare il file keytab del servizio SQL Server usando mssql-conf.

  1. Creare il file keytab che contiene le voci per ognuno dei quattro nomi delle entità servizio creati in precedenza e quella per l'utente.

    adutil keytab createauto -k /var/opt/mssql/secrets/mssql.keytab -p 1433 -H sql1.contoso.com --password 'P@ssw0rd' -s MSSQLSvc
    

    Le opzioni della riga di comando possibili sono:

    • -k: percorso in cui viene creato il file mssql.keytab. Nell'esempio precedente la directory /var/opt/mssql/secrets/ deve esistere già nell'host.
    • -p: porta da usare per la generazione degli SPN. Se non specificata, gli SPN verranno generati senza porta.
    • -H: nome host da usare per la generazione degli SPN. Se non specificato, verrà usato l’FQDN dell'host locale. In questo caso, il nome host è sql1 e il nome di dominio completo è sql1.contoso.com.
    • -s: nome del servizio da usare per la generazione degli SPN. Per questo esempio il nome del servizio SQL Server è MSSQLSvc.
    • --password: password dell'account utente Active Directory con privilegi creato in precedenza.
    • -e o --enctype: tipi di crittografia per la voce keytab. Usare un elenco delimitato da virgole dei valori. Se non specificato, viene visualizzato un prompt interattivo.

    È possibile scegliere più tipi di crittografia, purché supportati dall'host e dal dominio. In questo esempio si potrebbe scegliere aes256-cts-hmac-sha1-96 e aes128-cts-hmac-sha1-96. È tuttavia consigliabile evitare arcfour-hmac in un ambiente di produzione in quanto ha una crittografia debole.

    Se preferisci scegliere il tipo di crittografia senza che ti venga richiesto, è possibile specificare la scelta del tipo di crittografia usando l'argomento -e nel comando precedente. Per altre informazioni sulle opzioni di adutil keytab, eseguire questo comando:

    adutil keytab createauto --help
    
  2. Aggiungi nel file keytab una voce per il nome dell'entità e la password usata da SQL Server per connettersi ad Active Directory:

    adutil keytab create -k /var/opt/mssql/secrets/mssql.keytab -p sqluser --password 'P@ssw0rd'
    
    • -k: percorso in cui si vuole creare il file mssql.keytab.
    • -p: entità da aggiungere al file keytab.

    Il comando adutil keytab [ create | autocreate ] non sovrascrive i file precedenti, ma esegue solo l'accodamento al file se è già presente.

  3. Verificare che il file keytab creato sia di proprietà dell'utente mssql e che solo l'utente mssql abbia accesso in lettura/scrittura al file. È possibile eseguire i comandi chown e chmod nel modo seguente:

    chown mssql /var/opt/mssql/secrets/mssql.keytab
    chmod 440 /var/opt/mssql/secrets/mssql.keytab
    

Configurare SQL Server per usare il file keytab

Eseguire i comandi seguenti per configurare SQL Server per usare il file keytab creato nel passaggio precedente e impostare l'account Active Directory con privilegi come l'utente creato in precedenza. Nell'esempio il nome utente è sqluser.

/opt/mssql/bin/mssql-conf set network.kerberoskeytabfile /var/opt/mssql/secrets/mssql.keytab
/opt/mssql/bin/mssql-conf set network.privilegedadaccount sqluser

Riavviare SQL Server

Eseguire il comando seguente per riavviare il servizio SQL Server:

sudo systemctl restart mssql-server

Creare account di accesso di SQL Server basati su Active Directory in Transact-SQL

Connettiti a SQL Server ed esegui i comandi seguenti per creare l'account di accesso e verificare che risulti elencato.

CREATE LOGIN [contoso\privilegeduser] FROM WINDOWS;
SELECT name FROM sys.server_principals;

Connettersi a SQL Server usando l'autenticazione di Active Directory

Per connettersi usando SSMS o Azure Data Studio, accedere a SQL Server con le credenziali di Windows.

È anche possibile usare uno strumento come sqlcmd per connettersi all'istanza di SQL Server usando l'autenticazione di Windows.

sqlcmd -E -S 'sql1.contoso.com'