Nota
L'accés a aquesta pàgina requereix autorització. Podeu provar d'iniciar la sessió o de canviar els directoris.
L'accés a aquesta pàgina requereix autorització. Podeu provar de canviar els directoris.
Se aplica a:SQL Server en Linux
En este tutorial se explica cómo configurar SQL Server en contenedores de Linux para admitir la autenticación de Active Directory, también conocida como autenticación integrada. Para consultar una introducción, vea Autenticación de Active Directory para SQL Server en Linux.
Note
Para obtener la guía actual sobre la configuración de red, consulte la documentación del sistema operativo (SO).
Este tutorial consta de las tareas siguientes:
- Instalación de adutil
- Unir un host Linux a un dominio de Active Directory
- Cree un usuario de Active Directory para SQL Server y establezca el nombre principal de servicio (SPN) utilizando la herramienta
adutil - Creación del archivo keytab del servicio SQL Server
- Creación de los archivos
mssql.confykrb5.confque va a usar el contenedor de SQL Server - Monta los archivos de configuración y despliega el contenedor de SQL Server
- 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
Prerequisites
Antes de configurar la autenticación de Active Directory, se requiere:
- Tener un controlador de Dominio de Active Directory (Windows) en la red.
- Instale
adutilen una máquina host Linux, que está unida a un dominio. Siga la sección Instalación de adutil para obtener más detalles.
Implementación y preparación de contenedores
Para configurar el contenedor, necesita saber con antelación el puerto que usará el contenedor en el host. El puerto predeterminado, 1433, podría estar asignado de otra manera en el host del contenedor. En este tutorial, el puerto 5433 del host se asignará al puerto 1433 del contenedor. Para obtener más información, consulte el inicio rápido Inicio rápido: Ejecutar imágenes de contenedor Linux de SQL Server con Docker.
Al registrar nombres de entidad de seguridad de servicio (SPN), puede usar el nombre de host de la máquina o el nombre del contenedor. Sin embargo, debe configurarlo de acuerdo con lo que le gustaría ver, al conectarse al contenedor externamente.
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, asignada al nombre del contenedor de SQL Server. En este tutorial, la dirección IP de la sql1 máquina anfitriona es 10.0.0.10, y el nombre del contenedor de SQL Server es sql1. Agregue la entrada del host de reenvío en Active Directory como se muestra en la captura de pantalla. 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 VM actúa como controlador de dominio (DC) de Windows para el contoso.com dominio. El controlador de dominio se llama adVM.contoso.com. La segunda máquina es un equipo Windows denominado winbox, que ejecuta Windows 10 Desktop, que se usa como un equipo cliente y tiene instalado SQL Server Management Studio (SSMS). La tercera máquina es un equipo Ubuntu 18.04 LTS denominado sql1, en el que se hospedan los contenedores de SQL Server. Todas las máquinas se unen al dominio contoso.com. Para obtener más información, vea Unión de SQL Server en un host de Linux a un dominio de Active Directory.
Note
No es obligatorio unir la máquina contenedora anfitriona al dominio, como podrá ver más adelante en este artículo.
Instalación de adutil
Para instalar adutil, siga los pasos de Introducción a adutil: utilidad de Active Directory en un equipo anfitrión integrado en el dominio.
Creación del usuario de Active Directory, los SPN y el keytab del servicio de SQL Server
Si no quiere que el host contenedor forme parte del dominio y no ha seguido los pasos para unir el equipo al dominio, debe seguir estos pasos en otro equipo Linux que ya forme parte del dominio de Active Directory:
Cree un usuario de Active Directory para SQL Server y establezca el SPN mediante
adutil.Cree y configure el archivo keytab del servicio SQL Server.
Copie el archivo mssql.keytab que se ha creado en el equipo host que va a ejecutar el contenedor de SQL Server y configure el contenedor para usar el archivo mssql.keytab copiado. Opcionalmente, también puede unir el host de Linux que ejecutará el contenedor de SQL Server al dominio de Active Directory y seguir estos pasos en el mismo equipo.
Crear un usuario de Active Directory para SQL Server y establecer el Nombre Principal del Servicio con adutil
Para habilitar la autenticación de Active Directory en contenedores de SQL Server en Linux es necesario ejecutar los pasos siguientes en un equipo Linux que forme parte del dominio de Active Directory.
Obtenga o renueve el vale de concesión de vales (TGT) de Kerberos mediante el comando
kinit. Use una cuenta con privilegios para el comandokinit. La cuenta debe tener permiso para conectarse al dominio y también debe ser capaz de crear cuentas y SPN en el dominio.En este script de ejemplo, ya se ha creado un usuario denominado
privilegeduser@CONTOSO.COMcon privilegios en el controlador de dominio.kinit privilegeduser@CONTOSO.COMCon
adutil, cree el nuevo usuario que se usará como la cuenta de Active Directory con privilegios mediante SQL Server. Reemplace<password>por una contraseña válida.adutil user create --name sqluser --distname CN=sqluser,CN=Users,DC=CONTOSO,DC=COM --password '<password>'Las contraseñas se pueden especificar de tres maneras:
- Marca de contraseña:
--password <password> - Variable de entorno:
ADUTIL_ACCOUNT_PWD - Entrada interactiva
La prioridad de los métodos de entrada de contraseña sigue el orden de las opciones enumeradas anteriormente. Las opciones recomendadas son proporcionar la contraseña usando la variable de entorno o la entrada interactiva, ya que son más seguras que la bandera de contraseña.
Puedes especificar el nombre de la cuenta usando el nombre distinguido (
--distname) como se muestra arriba, o puedes usar el nombre de Unidad Organizacional (OU). El nombre OU (--ou) tiene prioridad sobre el nombre distinguido si especificas ambos. Ejecuta el siguiente comando para más detalles:adutil user create --help- Marca de contraseña:
Registre los SPN en el usuario creado anteriormente. Si lo prefiere, puede usar el nombre del equipo host en lugar del nombre del contenedor, en función del aspecto externo que quiera para la conexión. En este tutorial, se usa el puerto
5433en lugar de1433. Esta es el mapeo de puertos para el contenedor. El número de puerto podría ser diferente.adutil spn addauto -n sqluser -s MSSQLSvc -H sql1.contoso.com -p 5433-
addautocreará automáticamente los SPN, siempre que haya suficientes privilegios para lakinitcuenta. -
-n: nombre de la cuenta a la que se asignarán los SPN. -
-s: nombre del servicio que se va a usar para generar los SPN. En este caso, es para el servicio SQL Server, y por tanto el nombre del servicio es MSSQLSvc. -
-H: nombre de host que se va a usar para generar los SPN. Si no se especifica, se utilizará el nombre de dominio totalmente cualificado (FQDN) del host local. Proporcione también el FQDN del nombre del contenedor. En este caso, el nombre del contenedor essql1y 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 solo funcionarán en este caso cuando SQL Server escuche en el puerto predeterminado,1433.
-
Creación del archivo keytab del servicio SQL Server
Cree el archivo keytab que contenga entradas para cada uno de los cuatro SPN creados anteriormente y una para el usuario. El archivo keytab se montará en el contenedor, por lo que se puede crear en cualquier ubicación del host. Puedes cambiar este camino con seguridad, siempre que la pestaña de teclas resultante esté montada correctamente al usar Docker o Podman para desplegar el contenedor.
Para crear la tabla keytab para todos los SPN, podemos usar la createauto opción . Reemplace <password> por una contraseña válida.
adutil keytab createauto -k /container/sql1/secrets/mssql.keytab -p 5433 -H sql1.contoso.com --password '<password>' -s MSSQLSvc
-
-k: ruta de acceso en la que se quiere crear el archivomssql.keytab. En el ejemplo anterior, el directorio/container/sql1/secretsya 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. Proporcione también el FQDN del nombre del contenedor. En este caso, el nombre del contenedor essql1y el FQDN essql1.contoso.com. -
-s: nombre del servicio que se va a usar para generar los SPN. En este caso, es para el servicio SQL Server, y por tanto el nombre del servicio es MSSQLSvc. -
--password: contraseña de la cuenta de usuario de Active Directory con privilegios que se ha creado antes. -
-eo--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.
Cuando se le ofrezca una opción para elegir los tipos de cifrado, puede elegir más de uno. En este ejemplo, se han elegido aes256-cts-hmac-sha1-96 y arcfour-hmac. Asegúrese de elegir un tipo de cifrado que sea compatible con el host y el dominio.
Para elegir el tipo de cifrado de forma no interactiva, especifica tu elección con el -e argumento del comando anterior. Para obtener ayuda adicional sobre los adutil comandos, ejecute el siguiente comando.
adutil keytab createauto --help
Caution
arcfour-hmac es un cifrado débil y no es un tipo recomendado para usarlo en un entorno de producción.
Para crear la tabla keytab para el usuario, el comando es el siguiente. Reemplace <password> por una contraseña válida.
adutil keytab create -k /container/sql1/secrets/mssql.keytab -p sqluser --password '<password>'
-
-k: ruta de acceso en la que se quiere crear el archivomssql.keytab. En el ejemplo anterior, el directorio/container/sql1/secretsya debe existir en el host. -
-p: entidad de seguridad que se va a agregar al keytab.
Los comandos adutil keytab create y createauto no sobrescriben un archivo existente. Añaden entradas a ella.
Asegúrate de que la keytab creada tenga los permisos correctos cuando despliegues el contenedor.
chmod 440 /container/sql1/secrets/mssql.keytab
En este momento, puede copiar el archivo mssql.keytab del host de Linux actual en el host de Linux donde se implementará el contenedor de SQL Server y seguir el resto de los pasos en el host de Linux que ejecutará el contenedor de SQL Server. Si los pasos anteriores se han realizado en el mismo host de Linux donde se implementarán los contenedores de SQL Server, siga también los pasos siguientes en el mismo host.
Creación de los archivos de configuración que va a usar el contenedor de SQL Server
Cree un archivo
mssql.confcon la configuración de Active Directory. Este archivo puede crearse en cualquier parte del host y debe montarse correctamente durante eldocker runcomando. En este ejemplo, este archivomssql.confse coloca en/container/sql1, que es el directorio contenedor. El contenido demssql.confse muestra de esta forma:[network] privilegedadaccount = sqluser kerberoskeytabfile = /var/opt/mssql/secrets/mssql.keytab-
privilegedadaccount: usuario de Active Directory con privilegios que se usará para la autenticación de Active Directory. -
kerberoskeytabfile: ruta de acceso en el contenedor donde se ubicará el archivomssql.keytab.
-
Cree un archivo
krb5.conf, como el ejemplo siguiente. En estos archivos es importante el uso de mayúsculas y minúsculas.[libdefaults] default_realm = CONTOSO.COM default_keytab_name = /var/opt/mssql/secrets/mssql.keytab default_ccache_name = "" [realms] CONTOSO.COM = { kdc = adVM.contoso.com admin_server = adVM.contoso.com default_domain = CONTOSO.COM } [domain_realm] .contoso.com = CONTOSO.COM contoso.com = CONTOSO.COMCopie todos los archivos,
mssql.conf,krb5.confymssql.keytab, en una ubicación que se montará en el contenedor de SQL Server. En este ejemplo, estos archivos se colocan en el host en las siguientes ubicaciones:mssql.confykrb5.confen/container/sql1/.mssql.keytabse coloca en la ubicación/container/sql1/secrets/.Asegúrate de que el usuario que ejecuta el comando Docker o Podman tenga suficientes permisos en estas carpetas. Cuando se inicia el contenedor, el usuario necesita acceso a la ruta de acceso a la carpeta creada. En este ejemplo, asignamos los siguientes permisos a la ruta de la carpeta:
sudo chmod 755 /container/sql1/
Montaje de los archivos de configuración e implementación del contenedor de SQL Server
Ejecute el contenedor de SQL Server y monte los archivos de configuración correctos de Active Directory que se han creado antes:
Importante
La variable de entorno SA_PASSWORD está en desuso. Utilice MSSQL_SA_PASSWORD en su lugar.
sudo docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" \
-p 5433:1433 --name sql1 \
-v /container/sql1:/var/opt/mssql \
-v /container/sql1/krb5.conf:/etc/krb5.conf \
-d mcr.microsoft.com/mssql/server:2019-latest
Caution
La contraseña debe seguir la directiva de contraseña predeterminada de SQL Server. De forma predeterminada, la contraseña debe tener al menos ocho caracteres y contener caracteres de tres de los siguientes cuatro conjuntos: mayúsculas, minúsculas, dígitos en base 10 y símbolos. Las contraseñas pueden tener hasta 128 caracteres. Use contraseñas lo más largas y complejas posible.
Cuando ejecutas un contenedor en un host con un Linux Security Module (LSM), como SELinux, monta los volúmenes usando esta Z opción. Esta opción indica a Docker que etiquete el contenido con una etiqueta privada no compartida. Para más información, consulte Configurar la etiqueta SELinux.
Nuestro ejemplo contendrá los siguientes comandos. Reemplace <password> por una contraseña válida.
sudo docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -p 5433:1433 --name sql1 \
-v /container/sql1:/var/opt/mssql/:Z \
-v /container/sql1/krb5.conf:/etc/krb5.conf:Z \
--dns-search contoso.com \
--dns 10.0.0.4 \
--add-host adVM.contoso.com:10.0.0.4 \
--add-host contoso.com:10.0.0.4 \
--add-host contoso:10.0.0.4 \
-d mcr.microsoft.com/mssql/server:2019-latest
- Los archivos
mssql.confykrb5.confse encuentran en la ruta de acceso del archivo de host/container/sql1. - La instancia de
mssql.keytabque se ha creado se encuentra en la ruta de acceso del archivo de host/container/sql1/secrets. - Como el equipo host está en Azure, es necesario anexar los detalles de Active Directory al comando
docker runen el mismo orden. En el ejemplo, el controlador de dominioadVMestá en el dominiocontoso.com, con una dirección IP de10.0.0.4. El controlador de dominio ejecuta DNS y KDC.
Creación de inicios de sesión de SQL Server basados en Active Directory mediante Transact-SQL
Conexión al contenedor de SQL Server Con los siguientes comandos, cree la cuenta y confirme que existe.
Note
Puede conectarse a una instancia de SQL Server mediante cualquier herramienta de cliente SQL Server conocida, como sqlcmd, SQL Server Management Studio (SSMS) o la extensión MSSQL para Visual Studio Code.
CREATE LOGIN [contoso\amvin]
FROM WINDOWS;
SELECT name
FROM sys.server_principals;
Conexión a SQL Server mediante la autenticación de Active Directory
Puede conectarse a una instancia de SQL Server mediante cualquier herramienta de cliente SQL Server conocida, como sqlcmd, SQL Server Management Studio (SSMS) o la extensión MSSQL para Visual Studio Code.
Inicia sesión en SQL Server con credenciales de Windows usando el nombre y número de puerto de SQL Server (el nombre puede ser el nombre del contenedor o el nombre del host). En el ejemplo, el nombre del servidor sería sql1.contoso.com,5433.
El comando siguiente muestra cómo conectarse al contenedor con sqlcmd.
sqlcmd -E -S 'sql1.contoso.com,5433'
Resources
- 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