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
.
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)
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 comandokinit
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
Con la herramienta adutil, cree el nuevo usuario que SQL Server utiliza 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
- Uso de la marca de contraseña:
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 cuentakinit
.-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 esMSSQLSvc
.-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 essql1
y el FQDN essql1.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 funciona 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
Asegúrese de que el archivo
/var/opt/mssql/mssql.conf
es propiedad demssql
y no deroot
. Si no es así, debe ejecutar los comandos mssql-conf mediantesudo
.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 cree el usuario y los SPN, puede crear el archivo keytab mediante los pasos siguientes.
Cambie al usuario
mssql
:su mssql
Inicie sesión como usuario de Active Directory con el comando
kinit
:kinit privilegeduser@CONTOSO.COM
Cree el archivo keytab:
/opt/mssql/bin/mssql-conf setup-ad-keytab /var/opt/mssql/secrets/mssql.keytab sqluser
Cuando se le pida que reinicie el servicio SQL Server para adoptar la nueva configuración de Active Directory, puede hacer en la siguiente sección.
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)
Si el archivo
/var/opt/mssql/mssql.conf
no es propiedad demssql
, 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
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.
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 archivomssql.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 essql1
y el FQDN essql1.contoso.com
.-s
: nombre del servicio que se va a usar para generar los SPN. En este ejemplo, el nombre del servicio SQL Server esMSSQLSvc
.--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
yaes128-cts-hmac-sha1-96
. Pero debe evitararcfour-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 deadutil keytab
, ejecute este comando:adutil keytab createauto --help
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 archivomssql.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.Asegúrese de que el keytab que se crea es propiedad del usuario
mssql
y de que solo el usuariomssql
tiene acceso de lectura y escritura al archivo. Puede ejecutar los comandos ychown
de lachmod
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 habilitar y reiniciar los servicios de 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 cierra.
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'
Contenido relacionado
- Descripción de la autenticación de Active Directory para SQL Server en Linux y contenedores
- Solución de problemas de la autenticación de Active Directory para SQL Server en Linux y contenedores
- Autenticación de Active Directory para SQL Server en Linux
- Tutorial: Configuración de la autenticación de Active Directory con SQL Server en contenedores de Linux
- Rotar archivos keytab para SQL Server en Linux