Tutorial: Uso de adutil para configurar la autenticación de Active Directory con SQL Server en Linux

Se aplica a:SQL Server: Linux

En este tutorial se explica cómo configurar la autenticación de Windows Active Directory para SQL Server en Linux mediante adutil. Para obtener otro método de configuración de la autenticación de Active Directory mediante ktpass, vea Tutorial: Uso de la autenticación de Active Directory con SQL Server en Linux.

Este tutorial consta de las tareas siguientes:

  • Instalación de adutil
  • Unión de una máquina Linux a su dominio de Active Directory
  • Creación de un usuario de Active Directory para SQL Server y establecer el nombre de entidad de seguridad de servicio (SPN) mediante adutil
  • Creación del archivo keytab (tabla de claves) del servicio SQL Server
  • Configuración de SQL Server para usar el archivo keytab
  • Creación de inicios de sesión de SQL Server basados en Active Directory mediante Transact-SQL
  • Conexión a SQL Server mediante la autenticación de Active Directory

Requisitos previos

Antes de configurar la autenticación de Active Directory, necesita lo siguiente:

  • Un controlador de dominio de Windows que ejecute Active Directory Domain Services en la red.
  • La herramienta adutil instalada en un equipo host unido a un dominio.

Preparación del equipo de dominio

Asegúrese de que haya una entrada de host de reenvío (A) agregada en Active Directory para la dirección IP del host de Linux. En este tutorial, la dirección IP del equipo host sql1 es 10.0.0.10. En el ejemplo siguiente se agrega la entrada del host de reenvío en Active Directory. La entrada garantiza que los usuarios lleguen al host correcto cuando se conecten a sql1.contoso.com.

add host record

En este tutorial, se usará un entorno en Azure con tres máquinas virtuales (VM). Una máquina virtual es un equipo con Windows Server denominado adVM.contoso.com, que se ejecuta como controlador de dominio (DC) con el nombre de dominio contoso.com. La segunda máquina virtual es un equipo cliente en el que se ejecuta Windows 10 denominado winbox, con SQL Server Management Studio (SSMS) instalado. La tercera máquina es un equipo Ubuntu 18.04 LTS denominado sql1, en el que se hospeda SQL Server.

Use el host de Linux para unir el equipo host a su dominio de Active Directory

Para unirlo sql1 al dominio de Active Directory, vea Unión de SQL Server en un host de Linux a un dominio de Active Directory.

Instalación de adutil

Para instalar adutil, siga los pasos que se explican en el artículo Introducción a adutil: utilidad de Active Directory en el equipo host que ha agregado al dominio en el paso anterior.

Use adutil para crear un usuario de Active Directory para SQL Server y establecer el nombre de entidad de seguridad de servicio (SPN)

  1. Obtenga o renueve el vale de concesión de vales (TGT) de Kerberos mediante el comando kinit. Debe usar una cuenta con privilegios para el comando kinit y la máquina host ya debe formar parte del dominio. La cuenta necesita permiso para conectarse al dominio y crear cuentas y SPN en el dominio.

    En este script de ejemplo, ya se ha creado un usuario denominado privilegeduser@CONTOSO.COM con privilegios en el controlador de dominio.

    kinit privilegeduser@CONTOSO.COM
    
  2. Con la herramienta adutil, cree el nuevo usuario que SQL Server utilizará como cuenta de Active Directory con privilegios.

    Hay tres formas diferentes de especificar las contraseñas. Si usa más de uno de estos métodos, tienen prioridad en el orden siguiente:

    • Uso de la marca de contraseña: --password <password>
    • En una variable de entorno: ADUTIL_ACCOUNT_PWD
    • Entrada interactiva en un símbolo de línea de comandos

    Los métodos de variable de entorno o entrada interactiva son más seguros que la marca de contraseña.

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

    Puede especificar el nombre de la cuenta mediante el nombre distintivo (--distname) como se ha mostrado antes, o bien puede usar el nombre de la unidad organizativa (UO). El nombre de la unidad organizativa (--ou) tiene prioridad sobre el nombre distintivo en caso de especificar los dos. Puede ejecutar el comando siguiente para obtener más detalles:

    adutil user create --help
    
  3. Registre los SPN en la entidad de seguridad que se ha creado antes. Debe usar el nombre de dominio completo (FQDN) de la máquina. En este tutorial, se usará el puerto predeterminado de SQL Server, 1433. El número de puerto podría ser diferente.

    adutil spn addauto -n sqluser -s MSSQLSvc -H sql1.contoso.com -p 1433
    
    • addauto crea los SPN automáticamente, siempre que haya privilegios suficientes para la cuenta kinit.
    • -n: nombre de la cuenta que se va a asignar a los SPN.
    • -s: nombre del servicio que se va a usar para generar los SPN. En este caso, es para el servicio SQL Server, por lo que el nombre del servicio es MSSQLSvc.
    • -H: nombre de host que se va a usar para generar los SPN. Si no se especifica, se usa el FQDN del host local. En este caso, el nombre de host es sql1 y el FQDN es sql1.contoso.com.
    • -p: puerto que se usa para generar los SPN. Si no se especifica, los SPN se generan sin un puerto. Las conexiones SQL solo funcionarán en este caso cuando SQL Server escuche en el puerto predeterminado, 1433.

Creación del archivo keytab del servicio SQL Server con mssql-conf

Puede instalar adutil e integrarlo con mssql-conf, para crear y configurar keytab mediante mssql-conf directamente. Este es el método preferido para crear un archivo keytab del servicio SQL Server. De lo contrario, puede crear manualmente el archivo keytab del servicio SQL Server.

Requisitos previos

  1. Asegúrese de que el archivo /var/opt/mssql/mssql.conf es propiedad de mssql y no de root. Si no es así, debe ejecutar los comandos mssql-conf mediante sudo.

  2. En un controlador de dominio, en la configuración de Active Directory de la cuenta network.privilegedadaccount (en estos ejemplos, sqluser@CONTOSO.COM), habilite las siguientes opciones en la pestaña Cuenta, en la sección Opciones de cuenta:

    • Esta cuenta admite cifrado AES de Kerberos de 128 bits
    • Esta cuenta admite cifrado AES de Kerberos de 256 bits

Creación del archivo keytab

Una vez que haya creado el usuario y los SPN, puede crear el archivo keytab mediante los pasos siguientes.

  1. Cambie al usuario mssql:

    su mssql
    
  2. Inicie sesión como usuario de Active Directory con el comando kinit:

    kinit privilegeduser@CONTOSO.COM
    
  3. Cree el archivo keytab:

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

    Se le pedirá que reinicie el servicio SQL Server para adoptar la nueva configuración de Active Directory, lo que podrá hacer en la siguiente sección.

  4. Confirme que el archivo keytab se crea con las entradas correctas:

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

    Debería mostrarse una salida similar a esta de ejemplo:

    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

    Si el archivo /var/opt/mssql/mssql.conf no es propiedad de mssql, debe configurar mssql-conf para establecer los valores network.kerberoskeytabfile y network.privilegedadaccount según los pasos anteriores. Escriba la contraseña cuando se le solicite.

    /opt/mssql/bin/mssql-conf set network.kerberoskeytabfile /var/opt/mssql/secrets/mssql.keytab
    /opt/mssql/bin/mssql-conf set network.privilegedadaccount sqluser
    
  5. Valide la configuración para asegurarse de que la autenticación de Active Directory funciona sin problemas.

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

    Debería ver una salida similar al ejemplo siguiente:

    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)
    

Creación del archivo keytab del servicio SQL Server manualmente

Si ha instalado adutil y lo ha integrado con mssql-conf, puede ir directamente a Creación del archivo keytab del servicio SQL Server con mssql-conf.

  1. Cree el archivo keytab que contenga entradas para cada uno de los cuatro SPN creados anteriormente y una para el usuario.

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

    Las posibles opciones de línea de comandos son las siguientes:

    • -k: ruta donde se crea el archivo mssql.keytab. En el ejemplo anterior, el directorio /var/opt/mssql/secrets/ ya debe existir en el host.
    • -p: puerto que se usa para generar los SPN. Si no se especifica, los SPN se generan sin un puerto.
    • -H: nombre de host que se va a usar para generar los SPN. Si no se especifica, se usa el FQDN del host local. En este caso, el nombre de host es sql1 y el FQDN es sql1.contoso.com.
    • -s: nombre del servicio que se va a usar para generar los SPN. En este ejemplo, el nombre del servicio SQL Server es MSSQLSvc.
    • --password: la contraseña de la cuenta de usuario de Active Directory con privilegios que se ha creado antes.
    • -e o --enctype: tipos de cifrado para la entrada de keytab. Use una lista de valores separados por comas. Si no se especifica, se presenta un mensaje interactivo.

    Puede elegir más de un tipo de cifrado, siempre que el host y el dominio lo admitan. En este ejemplo, podría elegir aes256-cts-hmac-sha1-96 y aes128-cts-hmac-sha1-96. Pero debe evitar arcfour-hmac en un entorno de producción porque tiene un cifrado débil.

    Si prefiere elegir el tipo de cifrado sin que se le solicite, puede especificar su elección de tipo de cifrado con el argumento -e en el comando anterior. Para obtener más ayuda sobre las opciones de adutil keytab, ejecute este comando:

    adutil keytab createauto --help
    
  2. Agregue una entrada en el archivo keytab para el nombre de la entidad de seguridad y su contraseña, que usa SQL Server para conectarse a Active Directory:

    adutil keytab create -k /var/opt/mssql/secrets/mssql.keytab -p sqluser --password 'P@ssw0rd'
    
    • -k: ruta de acceso donde desea crear el archivo mssql.keytab.
    • -p: entidad de seguridad que se va a agregar al keytab.

    adutil keytab [ create | autocreate ] no sobrescribe los archivos anteriores, simplemente se anexa al archivo si ya están presentes.

  3. Asegúrese de que el keytab que se crea es propiedad del usuario mssql y de que solo el usuario mssql tiene acceso de lectura y escritura al archivo. Puede ejecutar los comandos y chown de la chmod siguiente manera:

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

Configuración de SQL Server para usar el keytab

Ejecute los comandos siguientes a fin de configurar SQL Server para que use el archivo keytab creado en el paso anterior y establezca la cuenta de Active Directory con privilegios como el usuario creado antes. En el ejemplo, el nombre de usuario es sqluser.

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

Reinicio de SQL Server

Ejecute el comando siguiente para reiniciar el servicio SQL Server:

sudo systemctl restart mssql-server

Creación de inicios de sesión de SQL Server basados en Active Directory mediante Transact-SQL

Conéctese a SQL Server, ejecute los comandos siguientes para crear el inicio de sesión y confirme que se muestra.

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

Conexión a SQL Server mediante la autenticación de Active Directory

Para conectarse mediante SSMS o Azure Data Studio, inicie sesión en SQL Server con las credenciales de Windows.

También puede usar una herramienta como sqlcmd para conectarse a SQL Server mediante la autenticación de Windows.

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