Evento
Mar 31, 11 PM - Apr 2, 11 PM
O maior evento de aprendizaxe SQL, Fabric e Power BI. 31 de marzo - 2 de abril. Use o código FABINSIDER para aforrar $ 400.
Rexistrarse hoxeEste explorador xa non é compatible.
Actualice a Microsoft Edge para dispoñer das funcionalidades máis recentes, as actualizacións de seguranza e a asistencia técnica.
Se aplica a: SQL Server - 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.
Nota
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:
mssql.conf
y krb5.conf
que va a usar el contenedor de SQL ServerAntes de configurar la autenticación de Active Directory, se requiere:
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, vea el inicio rápido Inicio rápido; Ejecución de 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 con el 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 del equipo host sql1
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 máquina virtual que actúa como controlador de dominio de Windows (DC) con el nombre de dominio contoso.com
. El nombre del controlador de dominio es 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.
Nota
La unión del equipo contenedor host al dominio no es obligatoria, como puede ver más adelante en este artículo.
Para instalar adutil, siga los pasos de Introducción a adutil: utilidad de Active Directory en un equipo host unido al dominio.
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 la herramienta 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.
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 comando kinit
. 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.COM
con privilegios en el controlador de dominio.
kinit privilegeduser@CONTOSO.COM
Con la herramienta adutil, cree el nuevo usuario que SQL Server utilizará como cuenta de Active Directory con privilegios.
adutil user create --name sqluser --distname CN=sqluser,CN=Users,DC=CONTOSO,DC=COM --password 'P@ssw0rd'
Las contraseñas se pueden especificar de tres maneras:
--password <password>
ADUTIL_ACCOUNT_PWD
La prioridad de los métodos de entrada de contraseña sigue el orden de las opciones enumeradas anteriormente. Las opciones recomendadas son para proporcionar la contraseña mediante variables de entorno o entrada interactiva, ya que son más seguras en comparación con la marca de contraseña.
Puede especificar el nombre de la cuenta mediante el nombre distintivo (-distname
) como se ha mostrado antes, o también puede usar el nombre de la unidad organizativa (OU). 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
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 5433
en lugar de 1433
. Esta es la asignación de puerto 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
addauto
creará los SPN automáticamente, siempre y cuando haya suficientes privilegios para la cuenta kinit.-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 usará el FQDN del host local. Proporcione también el FQDN del nombre del contenedor. En este caso, el nombre del contenedor 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 solo funcionarán en este caso cuando SQL Server escuche en el puerto predeterminado, 1433
.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. Puede cambiar esta ruta de acceso de forma segura, siempre que el keytab resultante se monte correctamente al usar docker/podman para implementar el contenedor.
Para crear el keytab para todos los SPN, se puede usar la opción createauto
:
adutil keytab createauto -k /container/sql1/secrets/mssql.keytab -p 5433 -H sql1.contoso.com --password 'P@ssw0rd' -s MSSQLSvc
-k
: ruta de acceso en la que se quiere crear el archivo mssql.keytab
. En el ejemplo anterior, el directorio /container/sql1/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. Proporcione también el FQDN del nombre del contenedor. En este caso, el nombre del contenedor es sql1
y el FQDN es sql1.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.-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.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.
Si prefiere elegir el tipo de cifrado de forma no interactiva, puede especificarlo con el argumento -e en el comando anterior. Para obtener más ayuda sobre los comandos de adutil, ejecute el comando siguiente.
adutil keytab createauto --help
Advertencia
arcfour-hmac
es un cifrado débil y no es un tipo recomendado para usarlo en un entorno de producción.
Para crear el keytab para el usuario, el comando es el siguiente:
adutil keytab create -k /container/sql1/secrets/mssql.keytab -p sqluser --password 'P@ssw0rd'
-k
: ruta de acceso en la que se quiere crear el archivo mssql.keytab
. En el ejemplo anterior, el directorio /container/sql1/secrets
ya debe existir en el host.-p
: entidad de seguridad que se va a agregar al keytab.El keytab create/autocreate de adutil no sobrescribe los archivos anteriores; se anexa al archivo si ya están presentes.
Asegúrese de que el keytab que se crea tiene los permisos correctos establecidos al implementar 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.
Cree un archivo mssql.conf
con la configuración de Active Directory. Este archivo se puede crear en cualquier parte del host y se debe montar correctamente durante el comando docker run. En este ejemplo, este archivo mssql.conf
se coloca en /container/sql1
, que es el directorio contenedor. El contenido de mssql.conf
se 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 archivo mssql.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.COM
Copie todos los archivos, mssql.conf
, krb5.conf
y mssql.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.conf
y krb5.conf
en /container/sql1/
. mssql.keytab
se coloca en la ubicación /container/sql1/secrets/
.
Asegúrese de que hay permisos suficientes en estas carpetas para el usuario que ejecuta el comando docker/podman. Cuando se inicia el contenedor, el usuario necesita acceso a la ruta de acceso a la carpeta creada. En este ejemplo, proporcionamos los siguientes permisos proporcionados a la ruta de acceso a la carpeta:
sudo chmod 755 /container/sql1/
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. En su lugar, use MSSQL_SA_PASSWORD
.
sudo docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong@Passw0rd>" \
-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
Nota
Al ejecutar el contenedor en LSM (Módulo de seguridad de Linux) como hosts habilitados para SELinux, debe montar los volúmenes con la opción Z
, que indica a Docker que etiquete el contenido con una etiqueta privada sin compartir. Para obtener más información, vea Configuración de la etiqueta de Linux SE.
El ejemplo contendrá los comandos siguientes:
sudo docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=P@ssw0rd" -p 5433:1433 --name sql1 \
-v /container/sql1:/var/opt/mssql/ \
-v /container/sql1/krb5.conf:/etc/krb5.conf \
--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
mssql.conf
y krb5.conf
se encuentran en la ruta de acceso del archivo de host /container/sql1
.mssql.keytab
que se ha creado se encuentra en la ruta de acceso del archivo de host /container/sql1/secrets
.docker run
en el mismo orden. En el ejemplo, el controlador de dominio adVM
está en el dominio contoso.com
, con una dirección IP de 10.0.0.4
. El controlador de dominio ejecuta DNS y KDC.Conexión al contenedor de SQL Server Con los siguientes comandos, cree el inicio de sesión y confirme que existe. Puede ejecutar este comando desde un equipo cliente (Windows o Linux) que ejecute SSMS, Azure Data Studio o cualquier otra herramienta de la interfaz de la línea de comandos (CLI).
CREATE LOGIN [contoso\amvin] FROM WINDOWS;
SELECT name FROM sys.server_principals;
Para conectarse mediante SQL Server Management Studio (SSMS) o Azure Data Studio, inicie sesión en SQL Server con las credenciales de Windows con el nombre y el número de puerto de SQL Server (el nombre podría ser el del contenedor o el del host). En el ejemplo, el nombre del servidor sería sql1.contoso.com,5433
.
También puede usar una herramienta como sqlcmd para conectarse a SQL Server en el contenedor.
sqlcmd -E -S 'sql1.contoso.com,5433'
Evento
Mar 31, 11 PM - Apr 2, 11 PM
O maior evento de aprendizaxe SQL, Fabric e Power BI. 31 de marzo - 2 de abril. Use o código FABINSIDER para aforrar $ 400.
Rexistrarse hoxeFormación
Certificación
Microsoft Certified: Azure Database Administrator Associate - Certifications
Administre una infraestructura de base de datos de SQL Server para bases de datos relacionales locales e híbridas en la nube mediante las ofertas de bases de datos relacionales PaaS de Microsoft.
Documentación
Instrucciones paso a paso sobre cómo configurar la autenticación de Active Directory con SQL Server en Linux mediante adutil
Introducción a adutil: utilidad de Active Directory - SQL Server
Información general sobre adutil, una utilidad que sirve para configurar y administrar dominios de Active Directory para SQL Server en Linux y contenedores
Tutorial: Uso de la autenticación de Active Directory con SQL Server en Linux - SQL Server
En este tutorial se proporcionan los pasos para configurar la autenticación de Active Directory con SQL Server en Linux.