Autenticazione di Active Directory con SQL Server in LinuxActive Directory Authentication with SQL Server on Linux

In questo argomento si applica a: SìSQL Server (solo Linux)nonDatabase SQL di AzurenonAzure SQL Data WarehousenonParallel Data WarehouseTHIS TOPIC APPLIES TO: yesSQL Server (Linux only)noAzure SQL DatabasenoAzure SQL Data WarehousenoParallel Data Warehouse

In questa esercitazione viene illustrato come configurare SQL ServerSQL Server in Linux per supportare l'autenticazione di Active Directory (AD), noto anche come l'autenticazione.This tutorial explains how to configure SQL ServerSQL Server on Linux to support Active Directory (AD) authentication, also known as integrated authentication. L'autenticazione di Active Directory consente ai client di dominio su Windows o Linux per l'autenticazione SQL ServerSQL Server utilizzando le credenziali di dominio e il protocollo Kerberos.AD Authentication enables domain-joined clients on either Windows or Linux to authenticate to SQL ServerSQL Server using their domain credentials and the Kerberos protocol.

L'autenticazione di Active Directory offre i vantaggi seguenti su SQL ServerSQL Server autenticazione:AD Authentication has the following advantages over SQL ServerSQL Server Authentication:

  • Gli utenti autenticati tramite l'accesso single sign-on, senza che venga richiesta una password.Users authenticate via single sign-on, without being prompted for a password.
  • Tramite la creazione di account di accesso per gruppi di Active Directory, è possibile gestire l'accesso e le autorizzazioni in SQL ServerSQL Server tramite l'appartenenza al gruppo Active Directory.By creating logins for AD groups, you can manage access and permissions in SQL ServerSQL Server using AD group memberships.
  • Ogni utente dispone di una singola identità dell'organizzazione, quindi non è necessario tenere traccia di cui SQL ServerSQL Server gli account di accesso corrispondenti per gli utenti che.Each user has a single identity across your organization, so you don’t have to keep track of which SQL ServerSQL Server logins correspond to which people.
  • Active Directory consente di applicare i criteri password centralizzata all'interno dell'organizzazione.AD enables you to enforce a centralized password policy across your organization.

In questa esercitazione include le attività seguenti:This tutorial consists of the following tasks:

  • Creare un join SQL ServerSQL Server host al dominio Active DirectoryJoin SQL ServerSQL Server host to AD domain
  • Creare l'utente di Active Directory per SQL ServerSQL Server e impostare SPNCreate AD user for SQL ServerSQL Server and set SPN
  • Configurare SQL ServerSQL Server keytab servizioConfigure SQL ServerSQL Server service keytab
  • Creare account di accesso basato su Active Directory in Transact-SQLCreate AD-based logins in Transact-SQL
  • Connettersi a SQL ServerSQL Server utilizzando l'autenticazione di Active DirectoryConnect to SQL ServerSQL Server using AD Authentication

PrerequisitiPrerequisites

Prima di configurare l'autenticazione di Active Directory, è necessario:Before you configure AD Authentication, you need to:

Importante

Limitazioni:Limitations:

  • A questo punto, l'unico metodo di autenticazione supportato per l'endpoint del mirroring del database è certificato.At this time, the only authentication method supported for database mirroring endpoint is CERTIFICATE. Il metodo di autenticazione di WINDOWS verrà abilitato in una versione futura.WINDOWS authentication method will be enabled in a future release.
  • strumenti di terze parti AD 3 come Centrify, Powerbroker e Vintela non sono supportati.3rd party AD tools like Centrify, Powerbroker and Vintela are not supported

Creare un join SQL ServerSQL Server host al dominio Active DirectoryJoin SQL ServerSQL Server host to AD domain

Utilizzare la procedura seguente per aggiungere un SQL ServerSQL Server host a un dominio di Active Directory:Use the following steps to join a SQL ServerSQL Server host to an Active Directory domain:

  1. Utilizzare realmd per aggiungere il computer host al dominio Active Directory.Use realmd to join your host machine to your AD Domain. Se hai già fatto, installare i realmd e i pacchetti client Kerberos nel SQL ServerSQL Server computer host tramite Gestione pacchetti di distribuzione Linux:If you haven't already, install both the realmd and Kerberos client packages on the SQL ServerSQL Server host machine using your Linux distribution's package manager:

    # RHEL
    sudo yum install realmd krb5-workstation
    
    # SUSE
    sudo zypper install realmd krb5-client
    
    # Ubuntu
    sudo apt-get install realmd krb5-user software-properties-common python-software-properties packagekit
    
  2. Se l'installazione del pacchetto client Kerberos viene chiesto di immettere un nome dell'area di autenticazione, immettere il nome di dominio in lettere maiuscole.If the Kerberos client package installation prompts you for a realm name, enter your domain name in uppercase.

    Nota

    Questa procedura dettagliata viene utilizzato "contoso.com" e "CONTOSO.COM" come nomi di dominio e dell'area di autenticazione riportato, rispettivamente.This walkthrough uses "contoso.com" and "CONTOSO.COM" as example domain and realm names, respectively. È necessario sostituirli con valori personalizzati.You should replace these with your own values. Questi comandi tra maiuscole e minuscole, pertanto assicurarsi di utilizzare maiuscole ovunque venga usato in questa procedura dettagliata.These commands are case-sensitive, so make sure you use uppercase wherever it is used in this walkthrough.

  3. Configurare il SQL ServerSQL Server computer host da utilizzare l'indirizzo IP del controller di dominio Active Directory come un server dei nomi DNS.Configure your SQL ServerSQL Server host machine to use your AD domain controller's IP address as a DNS nameserver.

    • Ubuntu:Ubuntu:

      Modificare il /etc/network/interfaces file in modo che l'indirizzo IP del controller di dominio Active Directory è elencato come un dns server dei nomi.Edit the /etc/network/interfaces file so that your AD domain controller's IP address is listed as a dns-nameserver. Esempio:For example:

      <...>
      # The primary network interface
      auth eth0
      iface eth0 inet dhcp
      dns-nameservers **<AD domain controller IP address>**
      dns-search **<AD domain name>**
      

      Nota

      L'interfaccia di rete (eth0) potrebbero essere diversi per le macchine diverso.The network interface (eth0) might differ for differnet machines. Per individuare quello in uso, eseguire il comando ifconfig e copiare l'interfaccia che ha un indirizzo IP e trasmessi e ricevuti byte.To find out which one you are using, run ifconfig and copy the interface that has an IP address and transmitted and received bytes.

      Dopo avere modificato questo file, riavviare il servizio di rete:After editing this file, restart the network service:

      sudo ifdown eth0 && sudo ifup eth0
      

      Controllare che il /etc/resolv.conf file contiene una riga simile alla seguente:Now check that your /etc/resolv.conf file contains a line like the following:

      nameserver **<AD domain controller IP address>**
      
    • RHEL:RHEL:

      Modificare il /etc/sysconfig/network-scripts/ifcfg-eth0 file (o altra configurazione interfaccia file a seconda dei casi) in modo che l'indirizzo IP del controller di dominio Active Directory è elencato come server DNS:Edit the /etc/sysconfig/network-scripts/ifcfg-eth0 file (or other interface config file as appropriate) so that your AD domain controller's IP address is listed as a DNS server:

      <...>
      PEERDNS=no
      DNS1=**<AD domain controller IP address>**
      

      Dopo avere modificato questo file, riavviare il servizio di rete:After editing this file, restart the network service:

      sudo systemctl restart network
      

      Controllare che il /etc/resolv.conf file contiene una riga simile alla seguente:Now check that your /etc/resolv.conf file contains a line like the following:

      nameserver **<AD domain controller IP address>**
      
  4. Aggiunta al dominioJoin the domain

    Dopo aver verificato che il DNS sia configurato correttamente, aggiungere il dominio eseguendo il comando seguente.Once you've confirmed that your DNS is configured properly, join the domain by running the command below. È necessario eseguire l'autenticazione utilizzando un account di Active Directory che disponga di privilegi sufficienti in Active Directory per aggiungere un nuovo computer al dominio.You'll need to authenticate using an AD account that has sufficient privileges in AD to join a new machine to the domain.

    In particolare, questo comando verranno creare un nuovo account computer in Active Directory, creare il /etc/krb5.keytab ospitare file keytab e configurare il dominio in /etc/sssd/sssd.conf:Specifically, this command will create a new computer account in AD, create the /etc/krb5.keytab host keytab file, and configure the domain in /etc/sssd/sssd.conf:

    sudo realm join contoso.com -U 'user@CONTOSO.COM' -v
    <...>
    * Successfully enrolled machine in realm
    

    Nota

    Se viene visualizzato un errore, "non sono installati i pacchetti necessari", quindi è necessario installare i pacchetti tramite Gestione pacchetti di distribuzione Linux prima di eseguire il realm join nuovo il comando.If you see an error, "Necessary packages are not installed," then you should install those packages using your Linux distribution's package manager before running the realm join command again.

    Se si riceve un errore, "Autorizzazioni insufficienti per aggiungere il dominio" è necessario verificare con un amministratore di dominio di disporre di autorizzazioni sufficienti per aggiungere i computer Linux al dominio.If you receive an error, "Insufficient permissions to join the domain," then you will need to check with a domain administrator that you have sufficient permissions to join Linux machines to your domain.

    SQL Server utilizza SSSD e NSS per il mapping di account utente e gruppi di identificatori di sicurezza (SID).SQL Server uses SSSD and NSS for mapping user accounts and groups to security identifiers (SID's). SSSD deve essere configurato e in esecuzione SQL Server creare gli account di accesso di Active Directory completata.SSSD must be configured and running in order for SQL Server to create AD logins successfully. Realmd questa operazione viene in genere eseguita automaticamente come parte dell'aggiunta al dominio, ma in alcuni casi è necessario eseguire queste operazioni separatamente.Realmd will usually do this automatically as part of joining the domain, but in some cases you will need to do this separately.

    Verificare le seguenti informazioni per configurare SSSD manualmente, e configurare NSS per funzionare con SSSDCheck out the following to configure SSSD manually, and configure NSS to work with SSSD

  5. Verificare che ora è possibile raccogliere informazioni relative a un utente del dominio e che è possibile acquisire un ticket Kerberos come tale utente.Verify that you can now gather information about a user from the domain, and that you can acquire a Kerberos ticket as that user.

    We will use id, kinit and klist commands for this.We will use id, kinit and klist commands for this.

    id user@contoso.com
    uid=1348601103(user@contoso.com) gid=1348600513(domain group@contoso.com) groups=1348600513(domain group@contoso.com)
    
    kinit user@CONTOSO.COM
    Password for user@CONTOSO.COM:
    
    klist
    Ticket cache: FILE:/tmp/krb5cc_1000
    Default principal: user@CONTOSO.COM
    <...>
    

    Nota

    Se id user@contoso.com restituisce un valore "Nessuna tale utente," assicurarsi che il servizio SSSD avviato correttamente eseguendo il comando sudo systemctl status sssd.If id user@contoso.com returns, "No such user," make sure that the SSSD service started successfully by running the command sudo systemctl status sssd. Se il servizio è in esecuzione e viene comunque visualizzato l'errore "Nessun utente", provare ad abilitare la registrazione dettagliata per SSSD.If the service is running and you still see the "No such user" error, try enabling verbose logging for SSSD. Per ulteriori informazioni, vedere la documentazione di Red Hat per risoluzione dei problemi SSSD.For more information, see the Red Hat documentation for Troubleshooting SSSD.

    Se kinit user@CONTOSO.COM restituisce un valore, "risposta KDC non corrisponde alle aspettative durante il recupero delle credenziali iniziale," assicurarsi che l'area di autenticazione specificato in maiuscolo.If kinit user@CONTOSO.COM returns, "KDC reply did not match expectations while getting initial credentials," make sure you specified the realm in uppercase.

Per ulteriori informazioni, vedere la documentazione di Red Hat per alla scoperta e aggiunta di domini di identità.For more information, see the Red Hat documentation for Discovering and Joining Identity Domains.

Creare l'utente di Active Directory per SQL ServerSQL Server e impostare SPNCreate AD user for SQL ServerSQL Server and set SPN

Nota

Nei passaggi successivi si utilizzerà il nome di dominio completo.In the next steps we will use your fully qualified domain name. Se si utilizza Azure, sarà necessario crearlo prima di procedere.If you are on Azure, you will have to create one before you proceed.

  1. Nel controller di dominio, eseguire il New-ADUser comando di PowerShell per creare un nuovo utente di Active Directory con una password che non scade mai.On your domain controller, run the New-ADUser PowerShell command to create a new AD user with a password that never expires. Questo esempio attribuisce un nome account "mssql", ma il nome dell'account può essere liberamente.This example names the account "mssql," but the account name can be anything you like. Verrà richiesto di immettere una nuova password per l'account:You will be prompted to enter a new password for the account:

    Import-Module ActiveDirectory
    
    New-ADUser mssql -AccountPassword (Read-Host -AsSecureString "Enter Password") -PasswordNeverExpires $true -Enabled $true
    

    Nota

    È una procedura consigliata di disporre di un account di Active Directory dedicato per SQL Server, in modo che le credenziali di SQL Server non sono condivise con altri servizi che utilizzano lo stesso account.It is a security best practice to have a dedicated AD account for SQL Server, so that SQL Server's credentials aren't shared with other services using the same account. Tuttavia, è possibile riutilizzare un account di Active Directory esistente se si preferisce, se si conosce la password dell'account (obbligatorio per generare un file keytab nel passaggio successivo).However, you can reuse an existing AD account if you prefer, if you know the account's password (required to generate a keytab file in the next step).

  2. Impostare il ServicePrincipalName (SPN) per questo account utilizzando il setspn.exe dello strumento.Set the ServicePrincipalName (SPN) for this account using the setspn.exe tool. Il nome SPN deve essere formattato esattamente come specificato nell'esempio seguente: È possibile trovare il nome di dominio completo il SQL ServerSQL Server macchina host eseguendo hostname --all-fqdns sul SQL ServerSQL Server host e la porta TCP deve essere 1433 a meno che non è stato configurato SQL ServerSQL Server di utilizzare un numero di porta diverso.The SPN must be formatted exactly as specified in the following example: You can find the fully qualified domain name of the SQL ServerSQL Server host machine by running hostname --all-fqdns on the SQL ServerSQL Server host, and the TCP port should be 1433 unless you have configured SQL ServerSQL Server to use a different port number.

    setspn -A MSSQLSvc/**<fully qualified domain name of host machine>**:**<tcp port>** mssql
    

    Nota

    Se si riceve un errore, "diritti di accesso insufficienti", è necessario verificare con un amministratore di dominio che si dispone di autorizzazioni sufficienti per impostare un nome SPN per l'account.If you receive an error, "Insufficient access rights," then you need to check with a domain administrator that you have sufficient permissions to set an SPN on this account.

    Se si modifica la porta TCP in futuro, è necessario eseguire nuovamente il comando di setspn con il nuovo numero di porta.If you change the TCP port in the future, then you will need to run the setspn command again with the new port number. È inoltre necessario aggiungere il nuovo nome SPN per il keytab del servizio SQL Server seguendo i passaggi descritti nella sezione successiva.You will also need to add the new SPN to the SQL Server service keytab by following the steps in the next section.

  3. Per altre informazioni, vedere Registrare un nome dell'entità servizio per le connessioni Kerberos.For more information, see Register a Service Principal Name for Kerberos Connections.

Configurare SQL ServerSQL Server keytab servizioConfigure SQL ServerSQL Server service keytab

  1. Controllare il numero di versione della chiave (kvno) per l'account di Active Directory creato nel passaggio precedente.Check the Key Version Number (kvno) for the AD account created in the previous step. In genere sarà 2, ma può trattarsi di un altro numero intero se è stata modificata la password dell'account più volte.Usually it will be 2, but it could be another integer if you changed the account's password multiple times. Nel SQL ServerSQL Server macchina host, eseguire il comando seguente:On the SQL ServerSQL Server host machine, run the following:

    kinit user@CONTOSO.COM
    
    kvno MSSQLSvc/**<fully qualified domain name of host machine>**:**<tcp port>**
    
  2. Creare un file keytab per l'utente di Active Directory che è stato creato nel passaggio precedente.Create a keytab file for the AD user you created in the previous step. A tale scopo si utilizzerà ktutil.To do so we will use ktutil. Quando richiesto, immettere la password per l'account di Active Directory.When prompted, enter the password for that AD account.

    sudo ktutil
    
    ktutil: addent -password -p MSSQLSvc/**<fully qualified domain name of host machine>**:**<tcp port>**@CONTOSO.COM -k **<kvno from above>** -e aes256-cts-hmac-sha1-96
    
    ktutil: addent -password -p MSSQLSvc/**<fully qualified domain name of host machine>**:**<tcp port>**@CONTOSO.COM -k **<kvno from above>** -e rc4-hmac
    
    ktutil: wkt /var/opt/mssql/secrets/mssql.keytab
    
    quit
    

    Nota

    Lo strumento ktutil non convalidare la password, assicurarsi che immettere correttamente.The ktutil tool does not validate the password, so make sure you enter it correctly.

  3. Chiunque abbia accesso a questo keytab file può rappresentare SQL ServerSQL Server sul dominio, assicurarsi limitare l'accesso a tali file solo il mssql account abbia accesso in lettura:Anyone with access to this keytab file can impersonate SQL ServerSQL Server on the domain, so make sure you restrict access to the file such that only the mssql account has read access:

    sudo chown mssql:mssql /var/opt/mssql/secrets/mssql.keytab
    sudo chmod 400 /var/opt/mssql/secrets/mssql.keytab
    
  4. Configurare SQL ServerSQL Server utilizzato keytab file per l'autenticazione Kerberos:Configure SQL ServerSQL Server to use this keytab file for Kerberos authentication:

    sudo /opt/mssql/bin/mssql-conf set network.kerberoskeytabfile /var/opt/mssql/secrets/mssql.keytab
    sudo systemctl restart mssql-server
    

Creare account di accesso basato su Active Directory in Transact-SQLCreate AD-based logins in Transact-SQL

  1. Connettersi a SQL ServerSQL Server e creare un account di accesso di nuovo, basato su Active Directory:Connect to SQL ServerSQL Server and create a new, AD-based login:

    CREATE LOGIN [CONTOSO\user] FROM WINDOWS;
    
  2. Verificare che l'account di accesso viene ora elencata nel Sys. server_principals vista del catalogo di sistema:Verify that the login is now listed in the sys.server_principals system catalog view:

    SELECT name FROM sys.server_principals;
    

Connettersi a SQL ServerSQL Server utilizzando l'autenticazione di Active DirectoryConnect to SQL ServerSQL Server using AD Authentication

Accedere a un computer client utilizzando le credenziali di dominio.Log in to a client machine using your domain credentials. Ora è possibile connettersi a SQL ServerSQL Server senza immettere di nuovo la password, tramite l'autenticazione di Active Directory.Now you can connect to SQL ServerSQL Server without reentering your password, by using AD Authentication. Se si crea un account di accesso per un gruppo di Active Directory, qualsiasi utente di Active Directory che è un membro del gruppo può connettersi allo stesso modo.If you create a login for an AD group, any AD user who is a member of that group can connect in the same way.

Il parametro della stringa di connessione specifiche per i client di utilizzare l'autenticazione di Active Directory dipende dal driver che in uso.The specific connection string parameter for clients to use AD Authentication depends on which driver you are using. Alcuni esempi sono inferiori.A few examples are below.

  • sqlcmdin un dominio client Linuxsqlcmd on a domain-joined Linux client

    Accedere a un client Linux dominio utilizzando ssh e le credenziali di dominio:Log in to a domain-joined Linux client using ssh and your domain credentials:

    ssh -l user@contoso.com client.contoso.com
    

    Verificare di aver installato il mssql strumenti del pacchetto, quindi tramite sqlcmd senza specificare le credenziali:Make sure you've installed the mssql-tools package, then connect using sqlcmd without specifying any credentials:

    sqlcmd -S mssql.contoso.com
    
  • SQL Server Management Studio in un client Windows di dominioSSMS on a domain-joined Windows client

    Accedere a un client di Windows appartenenti a un dominio utilizzando le credenziali del dominio.Log in to a domain-joined Windows client using your domain credentials. Assicurarsi che SQL Server Management StudioSQL Server Management Studio è installato, quindi connettersi al SQL ServerSQL Server istanza specificando l'autenticazione di Windows nel Connetti al Server finestra di dialogo.Make sure SQL Server Management StudioSQL Server Management Studio is installed, then connect to your SQL ServerSQL Server instance by specifying Windows Authentication in the Connect to Server dialog.

  • Autenticazione di Active Directory con altri driver clientAD Authentication using other client drivers

Passaggi successiviNext steps

In questa esercitazione, abbiamo esaminato in dettaglio come per l'autenticazione di Active Directory di installazione con SQL Server in Linux.In this tutorial, we walked through how to setup Active Directory authentication with SQL Server on Linux. Si è appreso per:You learned how to:

  • Creare un join SQL ServerSQL Server host al dominio Active DirectoryJoin SQL ServerSQL Server host to AD domain
  • Creare l'utente di Active Directory per SQL ServerSQL Server e impostare SPNCreate AD user for SQL ServerSQL Server and set SPN
  • Configurare SQL ServerSQL Server keytab servizioConfigure SQL ServerSQL Server service keytab
  • Creare account di accesso basato su Active Directory in Transact-SQLCreate AD-based logins in Transact-SQL
  • Connettersi a SQL ServerSQL Server utilizzando l'autenticazione di Active DirectoryConnect to SQL ServerSQL Server using AD Authentication

Successivamente, è possibile esplorare altri scenari di sicurezza per SQL Server in Linux.Next, explore other security scenarios for SQL Server on Linux.