Esercitazione: Usare l'autenticazione di Active Directory con SQL Server in Linux
Si applica a: SQL Server - Linux
Questa esercitazione illustra come configurare SQL Server in Linux per supportare l'autenticazione di Active Directory, detta anche autenticazione integrata. Per una panoramica, vedere Autenticazione di Active Directory per SQL Server in Linux.
Questa esercitazione è costituita dalle attività seguenti:
- Aggiungere un host di SQL Server a un dominio Active Directory
- Creare un utente di Active Directory per SQL Server e impostare il nome dell'entità servizio (SPN)
- Configurare il file keytab del servizio SQL Server
- Proteggere il file keytab
- Configurare SQL Server per l'uso del file keytab per l'autenticazione Kerberos
- Creare account di accesso basati su Active Directory in Transact-SQL
- Connettersi a SQL Server usando l'autenticazione di Active Directory
Prerequisiti
Prima di configurare l'autenticazione di Active Directory, è necessario:
- Configurare un controller di dominio di Active Directory (Windows) nella rete
- Installare SQL Server
Aggiungere un host di SQL Server a un dominio Active Directory
Aggiungere l'host di SQL Server in Linux a un controller di dominio Active Directory. Aggiungere un host di SQL Server in Linux a un dominio di Active DirectoryPer informazioni sull'aggiunta a un dominio Active Directory, vedere Aggiungere un host di SQL Server in Linux a un dominio di Active Directory.
Creare un utente di Active Directory per SQL Server e impostare il nome dell'entità servizio (SPN)
Nota
Nella procedura seguente viene usato il nome di dominio completo (FQDN). Se sei in Azure, è necessario creare un FQDN prima di procedere.
Nel controller di dominio esegui il comando di PowerShell New-ADUser per creare un nuovo utente di Active Directory con una password che non scade mai. L'esempio seguente assegna all'account il nome
sqlsvc
, ma si può scegliere un nome qualsiasi. Viene chiesto di immettere una nuova password per l'account.Import-Module ActiveDirectory New-ADUser sqlsvc -AccountPassword (Read-Host -AsSecureString "Enter Password") -PasswordNeverExpires $true -Enabled $true
Nota
Come misura di sicurezza, è consigliabile avere un account Active Directory dedicato per SQL Server, in modo che le credenziali dell’istanza di SQL Server non siano condivise con altri servizi che usano lo stesso account. Tuttavia, se si vuole è possibile riutilizzare un account Active Directory esistente se se ne conosce la password (necessaria per generare un file keytab nel passaggio successivo). L'account, inoltre, deve essere abilitato per supportare la crittografia AES Kerberos a 128 e 256 bit (attributo
msDS-SupportedEncryptionTypes
) nell'account utente. Per verificare che l'account sia abilitato per la crittografia AES, individuare l'account nell'utilità Utenti e computer di Active Directory e selezionare Proprietà. Individua la scheda Account in Proprietà e verifica che le due caselle di controllo seguenti siano selezionate.Questo account supporta la crittografia AES 128 bit Kerberos
Questo account supporta la crittografia AES 256 bit Kerberos
Impostare il nome dell'entità servizio (SPN) per l'account usando lo strumento setspn.exe. Il nome SPN deve essere formattato esattamente come specificato nell'esempio seguente. È possibile trovare il nome di dominio completo del computer host di SQL Server eseguendo
hostname --all-fqdns
nell'host di SQL Server. La porta TCP deve essere la 1433, a meno che SQL Server non sia stato configurato per l'uso di un numero di porta diverso.setspn -A MSSQLSvc/<fully qualified domain name of host machine>:<tcp port> sqlsvc setspn -A MSSQLSvc/<netbios name of the host machine>:<tcp port> sqlsvc
Nota
Se viene visualizzato un messaggio di errore,
Insufficient access rights
, verificare con l'amministratore del dominio di avere autorizzazioni sufficienti per impostare un SPN per l'account. L'account usato per registrare un nome dell'entità servizio richiederà le autorizzazioniWrite servicePrincipalName
. Per altre informazioni, vedi Registrare un nome dell'entità servizio per le connessioni Kerberos.Se si cambia la porta TCP in futuro, è necessario eseguire di nuovo il comando setspn con il nuovo numero di porta. È anche necessario aggiungere il nuovo SPN al keytab del servizio SQL Server seguendo la procedura descritta nella sezione successiva.
Per altre informazioni, vedi Registrare un nome dell'entità servizio per le connessioni Kerberos.
Configurare il file keytab del servizio SQL Server
La configurazione dell'autenticazione di Active Directory per SQL Server in Linux richiede un account Active Directory e l’SPN creato nella sezione precedente.
Importante
Se si cambia la password dell'account di Active Directory o la password dell'account a cui sono assegnati i nomi dell'entità servizio, è necessario aggiornare il keytab con la nuova password e il numero di versione della chiave. Alcuni servizi potrebbero anche cambiare automaticamente le password a rotazione. Esaminare i criteri di rotazione delle password per gli account in questione e allinearli alle attività di manutenzione pianificata per evitare tempi di inattività imprevisti.
Voci del keytab SPN
Verifica il numero di versione della chiave per l'account Active Directory creato nel passaggio precedente. In genere è 2, ma potrebbe essere un altro numero intero se la password dell'account è stata cambiata più volte. Nel computer host SQL Server eseguire i comandi seguenti:
- Gli esempi seguenti presuppongono che
user
si trovi nel dominio@CONTOSO.COM
. Modificare l'utente e il nome di dominio per l'utente e il nome di dominio.
kinit user@CONTOSO.COM kvno user@CONTOSO.COM kvno MSSQLSvc/<fully qualified domain name of host machine>:<tcp port>@CONTOSO.COM
Nota
La propagazione dei nomi SPN nel dominio può richiedere diversi minuti, soprattutto se il dominio è di grandi dimensioni. Se viene visualizzato il messaggio di errore
kvno: Server not found in Kerberos database while getting credentials for MSSQLSvc/<fully qualified domain name of host machine>:<tcp port>@CONTOSO.COM
, attendere qualche minuto e riprovare.
I comandi riportati sopra funzioneranno solo se il server è stato aggiunto a un dominio di Active Directory, come descritto nella sezione precedente.- Gli esempi seguenti presuppongono che
Tramite ktpass, aggiungere voci keytab per ogni nome dell'entità servizio usando i comandi seguenti in un prompt dei comandi del computer Windows:
<DomainName>\<UserName>
- Creare un account utente di Active Directory@CONTOSO.COM
: usare il nome di dominio<#>
: sostituire/kvno <#>
con il numero di versione della chiave ottenuto in un passaggio precedente<password>
- 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.
ktpass /princ MSSQLSvc/<fully qualified domain name of host machine>:<tcp port>@CONTOSO.COM /ptype KRB5_NT_PRINCIPAL /crypto aes256-sha1 /mapuser <DomainName>\<UserName> /out mssql.keytab -setpass -setupn /kvno <#> /pass <password> ktpass /princ MSSQLSvc/<fully qualified domain name of host machine>:<tcp port>@CONTOSO.COM /ptype KRB5_NT_PRINCIPAL /crypto rc4-hmac-nt /mapuser <DomainName>\<UserName> /in mssql.keytab /out mssql.keytab -setpass -setupn /kvno <#> /pass <password> ktpass /princ MSSQLSvc/<netbios name of the host machine>:<tcp port>@CONTOSO.COM /ptype KRB5_NT_PRINCIPAL /crypto aes256-sha1 /mapuser <DomainName>\<UserName> /in mssql.keytab /out mssql.keytab -setpass -setupn /kvno <#> /pass <password> ktpass /princ MSSQLSvc/<netbios name of the host machine>:<tcp port>@CONTOSO.COM /ptype KRB5_NT_PRINCIPAL /crypto rc4-hmac-nt /mapuser <DomainName>\<UserName> /in mssql.keytab /out mssql.keytab -setpass -setupn /kvno <#> /pass <password> ktpass /princ <UserName>@CONTOSO.COM /ptype KRB5_NT_PRINCIPAL /crypto aes256-sha1 /mapuser <DomainName>\<UserName> /in mssql.keytab /out mssql.keytab -setpass -setupn /kvno <#> /pass <password> ktpass /princ <UserName>@CONTOSO.COM /ptype KRB5_NT_PRINCIPAL /crypto rc4-hmac-nt /mapuser <DomainName>\<UserName> /in mssql.keytab /out mssql.keytab -setpass -setupn /kvno <#> /pass <password>
I comandi precedenti consentono crittografia AES e RC4 per l'autenticazione di Active Directory. RC4 è un algoritmo di crittografia più obsoleto. Se è necessario un livello di sicurezza più elevato, è possibile scegliere di creare le voci keytab usando soltanto l'algoritmo di crittografia AES.
Nota
Le ultime due
UserName
voci devono essere in minuscolo oppure l'autenticazione permssion può non riuscire.Dopo aver eseguito i comandi precedenti, è necessario avere un file keytab denominato
mssql.keytab
. Copiare il file nel computer SQL Server nella cartella/var/opt/mssql/secrets
.Proteggere il file keytab.
Chiunque abbia accesso a questo file keytab può rappresentare SQL Server nel dominio, quindi assicurarsi di limitare l'accesso al file in modo che solo l'account mssql disponga dell'accesso in lettura:
sudo chown mssql:mssql /var/opt/mssql/secrets/mssql.keytab sudo chmod 400 /var/opt/mssql/secrets/mssql.keytab
È necessario impostare l'opzione di configurazione seguente usando lo strumento mssql-conf per specificare l'account da usare durante l'accesso al file keytab.
sudo mssql-conf set network.privilegedadaccount <username>
Nota
Includere solo il nome utente e non nomedominio\nomeutente o nomeutente@dominio. SQL Server aggiunge internamente il nome di dominio necessario insieme al nome utente, se usato.
Attenersi alla procedura seguente per configurare SQL Server in modo che inizi a usare il file keytab per l'autenticazione Kerberos.
sudo mssql-conf set network.kerberoskeytabfile /var/opt/mssql/secrets/mssql.keytab sudo systemctl restart mssql-server
Suggerimento
Facoltativamente disabilitare le connessioni UDP al controller di dominio per migliorare le prestazioni. In molti casi, le connessioni UDP hanno sempre esito negativo quando ci si connette a un controller di dominio, quindi è possibile impostare le opzioni di configurazione in
/etc/krb5.conf
in modo da ignorare le chiamate UDP. Modifica/etc/krb5.conf
e imposta le opzioni seguenti:/etc/krb5.conf [libdefaults] udp_preference_limit=0
A questo punto si è pronti per usare gli account di accesso basati su Active Directory in SQL Server.
Creare account di accesso basati su Active Directory in Transact-SQL
Connettiti a SQL Server e creare un nuovo account di accesso basato su Active Directory:
CREATE LOGIN [CONTOSO\user] FROM WINDOWS;
Verificare che l'account di accesso sia ora elencato nella vista del catalogo di sistema sys.server_principals:
SELECT name FROM sys.server_principals;
Connettersi a SQL Server usando l'autenticazione di Active Directory
Accedi a un computer client usando le credenziali del tuo dominio. A questo punto è possibile connettersi a SQL Server senza immettere nuovamente la password usando l'autenticazione di Active Directory. Se si crea un account di accesso per un gruppo di Active Directory, qualsiasi utente di Active Directory che sia membro di tale gruppo potrà connettersi nello stesso modo.
Lo specifico parametro della stringa di connessione che indica ai client di usare l'autenticazione di Active Directory dipende dal driver in uso. Considerare gli esempi nelle sezioni riportate di seguito.
sqlcmd in un client Linux aggiunto a un dominio
Accedi a un client Linux aggiunto al dominio usando ssh e le credenziali del dominio:
ssh -l user@contoso.com client.contoso.com
Assicurarsi di aver installato il pacchetto mssql-tools, quindi connettersi usando sqlcmd senza specificare le credenziali:
sqlcmd -S mssql-host.contoso.com
A differenza di SQL Windows, l'autenticazione Kerberos funziona per la connessione locale in SQL Linux. È comunque necessario specificare il nome di dominio completo dell'host SQL Linux. L'autenticazione di Active Directory non funzionerà se si tenta di connettersi a .
, localhost
, 127.0.0.1
e così via.
SSMS in un client Windows aggiunto a un dominio
Accedi a un client Windows aggiunto al dominio usando le credenziali del dominio. Assicurarsi che SQL Server Management Studio sia installato, quindi connettersi all'istanza di SQL Server, ad esempio mssql-host.contoso.com
, specificando Autenticazione di Windows nella finestra di dialogo Connetti al server.
Autenticazione di Active Directory con altri driver client
La tabella seguente contiene alcuni consigli per altri driver client:
Driver client | Elemento consigliato |
---|---|
JDBC | Usare l'autenticazione integrata Kerberos per la connessione a SQL Server. |
ODBC | Usare l'autenticazione integrata SQL. |
ADO.NET | Sintassi della stringa di connessione. |
Opzioni di configurazione aggiuntive
Se si usano utilità di terze parti, come PBIS, VAS o Centrify, per aggiungere l'host Linux al dominio di Active Directory e si vuole forzare SQL Server a usare direttamente la libreria OpenLDAP, è possibile configurare l'opzione disablesssd
con mssql-conf come indicato di seguito:
sudo mssql-conf set network.disablesssd true
systemctl restart mssql-server
Nota
Alcune utilità, come realmd, installano SSSD, mentre altri strumenti, come PBIS, VAS e Centrify, non lo fanno. Se l'utilità usata per l'aggiunta al dominio di Active Directory non configura SSSD, è necessario configurare disablesssd
l'opzione su true
. Anche se non è necessario, poiché SQL Server tenterà di usare SSSD per Active Directory prima di eseguire il fallback al meccanismo OpenLDAP, sarebbe più efficiente configurarlo in modo che SQL Server esegua le chiamate a OpenLDAP direttamente ignorando il meccanismo SSSD.
Se il controller di dominio supporta LDAPS, è possibile forzare l'esecuzione di tutte le connessioni da SQL Server ai controller di dominio tramite LDAPS. Per verificare che il client sia in grado di contattare il controller di dominio tramite LDAPS, esegui il comando bash ldapsearch -H ldaps://contoso.com:3269
. Per impostare SQL Server in modo da usare solo LDAPS, eseguire il comando seguente:
sudo mssql-conf set network.forcesecureldap true
systemctl restart mssql-server
Verrà usato LDAPS su SSSD se l'aggiunta al dominio Active Directory dell'host è stata eseguita tramite il pacchetto SSSD e disablesssd
non è impostato su true. Se disablesssd
è impostato su true e lo è anche forcesecureldap
, il protocollo LDAPS verrà usato sulle chiamate alla libreria OpenLDAP eseguite da SQL Server.
Dopo SQL Server 2017 CU 14
A partire da SQL Server 2017 (14.x) CU 14, se SQL Server è stato aggiunto a un controller di dominio Active Directory usando provider di terze parti ed è configurato per l'uso di chiamate OpenLDAP per la ricerca tramite Active Directory generale impostando disablesssd
su true, è possibile usare anche l'opzione enablekdcfromkrb5
per forzare SQL Server a usare la libreria krb5 per la ricerca KDC anziché la ricerca DNS inversa per il server KDC.
Questo può essere utile se si vogliono configurare manualmente i controller di dominio con cui SQL Server tenta di comunicare. e si usa il meccanismo della libreria OpenLDAP tramite l'elenco KDC in krb5.conf
.
Imposta prima disablesssd
e enablekdcfromkrb5conf
su true e quindi riavviare SQL Server:
sudo mssql-conf set network.disablesssd true
sudo mssql-conf set network.enablekdcfromkrb5conf true
systemctl restart mssql-server
Configura poi l'elenco KDC in /etc/krb5.conf
nel modo seguente:
[realms]
CONTOSO.COM = {
kdc = dcWithGC1.contoso.com
kdc = dcWithGC2.contoso.com
}
Sebbene non sia consigliato, è possibile usare utilità, come realmd, che installano SSSD durante l'aggiunta dell'host Linux al dominio, impostando disablesssd
su true in modo che SQL Server usi OpenLDAP anziché SSSD per le chiamate correlate ad Active Directory.
Nota
L'accesso di SQL server tramite un nome di dominio completo (ad esempio CONTOSO.COM\Username
) non è supportato. Usa il formato CONTOSO\Username
.
Gli accessi di SQL server dai gruppi locali di dominio non sono supportati. Usare invece gruppi di dominio di sicurezza globali.
Contenuto correlato
- Crittografia delle connessioni a SQL Server in Linux
- 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
Contribuire alla documentazione di SQL
Il contenuto SQL può essere modificato. L'autore delle modifiche contribuirà a migliorare la documentazione e verrà accreditato come collaboratore alla realizzazione della pagina.
Per maggiori informazioni, vedere Come contribuire alla documentazione di SQL Server