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
.
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)
Ottenere o rinnovare il ticket-granting ticket (TGT) Kerberos usando il comando
kinit
. È necessario usare un account con privilegi per il comandokinit
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
Usando adutil, creare il nuovo utente che verrà usato l'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 '<password>'
È 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 ulteriori informazioni, è possibile eseguire il comando seguente:adutil user create --help
Attenzione
La password deve seguire i criteri password predefiniti di SQL Server. Per impostazione predefinita, la password deve essere composta da almeno otto caratteri e contenere caratteri di tre delle quattro categorie seguenti: lettere maiuscole, lettere minuscole, cifre in base 10 e simboli. Le password possono contenere fino a 128 caratteri. Usare password il più possibile lunghe e complesse.
- Uso del flag password:
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'accountkinit
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. 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
Assicurati che il file
/var/opt/mssql/mssql.conf
sia di proprietà dimssql
e nonroot
. In caso contrario, è necessario eseguire i comandi mssql-conf usandosudo
.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.
Passare all'utente
mssql
:su mssql
Accedi come utente di Active Directory usando il comando
kinit
:kinit privilegeduser@CONTOSO.COM
Crea il file keytab:
/opt/mssql/bin/mssql-conf setup-ad-keytab /var/opt/mssql/secrets/mssql.keytab sqluser
Quando viene richiesto di riavviare il servizio SQL Server per adottare la nuova configurazione di Active Directory, è possibile eseguire nella sezione successiva.
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)
Se il
/var/opt/mssql/mssql.conf
file non è di proprietà dimssql
, è necessario configurare mssql-conf per impostare inetwork.kerberoskeytabfile
valori enetwork.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
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.
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 '<password>' -s MSSQLSvc
Attenzione
La password deve seguire i criteri password predefiniti di SQL Server. Per impostazione predefinita, la password deve essere composta da almeno otto caratteri e contenere caratteri di tre delle quattro categorie seguenti: lettere maiuscole, lettere minuscole, cifre in base 10 e simboli. Le password possono contenere fino a 128 caratteri. Usare password il più possibile lunghe e complesse.
Le opzioni della riga di comando possibili sono:
-k
: percorso in cui viene creato il filemssql.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
eaes128-cts-hmac-sha1-96
. È tuttavia consigliabile evitarearcfour-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 diadutil keytab
, eseguire questo comando:adutil keytab createauto --help
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 '<password>'
Attenzione
La password deve seguire i criteri password predefiniti di SQL Server. Per impostazione predefinita, la password deve essere composta da almeno otto caratteri e contenere caratteri di tre delle quattro categorie seguenti: lettere maiuscole, lettere minuscole, cifre in base 10 e simboli. Le password possono contenere fino a 128 caratteri. Usare password il più possibile lunghe e complesse.
-k
: percorso in cui si vuole creare il filemssql.keytab
.-p
: entità da aggiungere al file keytab.
adutil keytab [ create | autocreate ]
non sovrascrive i file precedenti, ma esegue solo l'accodamento al file se è già presente.Verificare che il file keytab creato sia di proprietà dell'utente
mssql
e che solo l'utentemssql
abbia accesso in lettura/scrittura al file. È possibile eseguire i comandichown
echmod
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 i servizi SQL Server:
sudo systemctl restart mssql-server
Creare account di accesso di SQL Server basati su Active Directory in Transact-SQL
Connettersi a SQL Server ed eseguire i comandi seguenti per creare l'account di accesso e confermarne l'esistenza.
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'
Contenuto correlato
- Informazioni sull'autenticazione Active Directory per SQL Server in Linux e contenitori
- Risoluzione dei problemi relativi all'autenticazione Active Directory per SQL Server in Linux e in contenitori
- Autenticazione di Active Directory per SQL Server in Linux
- Esercitazione: Configurare l'autenticazione di Active Directory tramite i contenitori di SQL Server in Linux
- Ruotare i keytab per SQL Server in Linux