Tutoriel : Configurer l’authentification Active Directory avec des conteneurs SQL Server sur Linux
S’applique à : SQL Server - Linux
Ce tutoriel explique comment configurer des conteneurs SQL Server sur Linux pour prendre en charge l’authentification Active Directory, également appelée authentification intégrée. Pour une vue d’ensemble, consultez Authentification Active Directory avec SQL Server sur Linux.
Remarque
Pour obtenir des conseils sur la configuration du réseau, reportez-vous à la documentation de votre système d’exploitation (OS).
Ce didacticiel contient les tâches suivantes :
- Installer adutil
- Joindre un hôte Linux à un domaine Active Directory
- Créer un utilisateur Active Directory pour SQL Server et définir le nom de principal du service à l’aide de l’outil adutil
- Créer le fichier keytab du service SQL Server
- Créer les fichiers
mssql.conf
etkrb5.conf
qui seront utilisés par le conteneur SQL Server - Monter les fichiers de configuration et déployer le conteneur SQL Server
- Créer des comptes de connexion SQL Server basés sur Active Directory avec Transact-SQL
- Se connecter à SQL Server à l’aide de l’authentification Active Directory
Prérequis
Les éléments suivants sont nécessaires avant de configurer l’authentification Active Directory :
- Disposer d’un contrôleur de domaine Active Directory (Windows) dans votre réseau.
- Installez l’outil adutil sur un ordinateur hôte Linux joint à un domaine. Suivez les instructions de la section Installer adutil pour plus de détails.
Déploiement et préparation du conteneur
Pour configurer votre conteneur, vous devez connaître à l’avance quel port sera utilisé par le conteneur sur l’hôte. Le port par défaut, 1433
, peut être mappé différemment sur votre hôte de conteneur. Pour ce tutoriel, le port 5433
sur l’hôte sera mappé au port 1433
du conteneur. Pour plus d’informations, consultez notre guide, Démarrage rapide : Exécuter des images de conteneur SQL Server avec Docker.
Lorsque vous inscrivez des noms de principal du service (SPN), vous pouvez utiliser le nom d’hôte de l’ordinateur ou le nom du conteneur. Toutefois, vous devez le configurer en fonction de ce que vous souhaitez voir, lorsque vous vous connectez au conteneur en externe.
Vérifiez qu’une entrée d’hôte de transfert (A
) est ajoutée dans Active Directory pour l’adresse IP de l’hôte Linux, mappée au nom du conteneur SQL Server. Dans ce tutoriel, l’adresse IP de l’ordinateur hôte sql1
est 10.0.0.10
, et le nom du conteneur SQL Server est sql1
. Ajoutez l’entrée de l’hôte de transfert dans Active Directory comme indiqué dans la capture d’écran. Lorsque les utilisateurs se connectent à sql1.contoso.com
, cette entrée garantit que l’hôte approprié est atteint.
Pour ce tutoriel, nous utilisons un environnement dans Azure avec trois machines virtuelles. Une machine virtuelle agit en tant que contrôleur de domaine (DC) Windows, avec le nom de domaine contoso.com
. Le contrôleur de domaine est nommé adVM.contoso.com
. Le deuxième ordinateur est un ordinateur Windows appelé winbox
, doté de Windows 10 Desktop, qui est utilisé comme zone cliente et sur lequel SQL Server Management Studio (SSMS) est installé. Le troisième ordinateur est un ordinateur Ubuntu 18.04 LTS nommé sql1
, qui héberge les conteneurs SQL Server. Tous les ordinateurs sont joints au domaine contoso.com
. Pour plus d’informations, consultez Joindre SQL Server sur un hôte Linux à un domaine Active Directory.
Notes
Il n’est pas obligatoire de joindre l’ordinateur conteneur hôte au domaine, comme vous le verrez ultérieurement dans cet article.
Installer adutil
Pour installer adutil, suivez les instructions dans Présentation de l’utilitaire adutil pour Active Directory sur l’ordinateur hôte joint au domaine.
Créer l’utilisateur Active Directory, les SPN et le keytab du service SQL Server
Si vous ne souhaitez pas que l’hôte conteneur SQL Server sur Linux fasse partie du domaine et que vous n’avez pas suivi les étapes pour joindre l’ordinateur au domaine, suivez les étapes ci-dessous sur un autre ordinateur Linux qui fait déjà partie du domaine Active Directory :
Créez un utilisateur Active Directory pour SQL Server et définissez le SPN à l’aide d’adutil.
Créez et configurez le fichier keytab du service SQL Server.
Copiez le fichier mssql.keytab
créé sur l’ordinateur hôte qui exécutera le conteneur SQL Server, et configurez le conteneur afin d’utiliser le mssql.keytab
copié. Si vous le souhaitez, vous pouvez également joindre votre hôte Linux qui exécutera le conteneur SQL Server au domaine Active Directory et suivre les étapes ci-dessous sur le même ordinateur.
Créer un utilisateur Active Directory pour SQL Server et définir le nom de principal du service à l’aide d’adutil
L’activation de l’authentification Active Directory sur les conteneurs SQL Server sur Linux requiert l’exécution des étapes suivantes sur une machine Linux qui fait partie du domaine Active Directory.
Obtenez ou renouvelez le ticket Kerberos TGT (Ticket-Granting Ticket) à l’aide de la commande
kinit
. Utilisez un compte privilégié pour la commandekinit
. Le compte doit avoir l’autorisation de se connecter au domaine et doit également être en mesure de créer des comptes et des noms de principaux de service dans le domaine.Dans cet exemple de script, un utilisateur privilégié appelé
privilegeduser@CONTOSO.COM
a déjà été créé sur le contrôleur de domaine.kinit privilegeduser@CONTOSO.COM
Avec adutil, créez le nouvel utilisateur qui sera utilisé comme compte Active Directory privilégié par SQL Server.
adutil user create --name sqluser --distname CN=sqluser,CN=Users,DC=CONTOSO,DC=COM --password 'P@ssw0rd'
Les mots de passe peuvent être spécifiés de l’une des trois façons suivantes :
- Indicateur de mot de passe :
--password <password>
- Variables d’environnement –
ADUTIL_ACCOUNT_PWD
- Entrée interactive
La priorité des méthodes d’entrée de mot de passe suit l’ordre des options ci-dessus. Les options recommandées sont de fournir le mot de passe à l’aide des variables d’environnement ou d’une entrée interactive, car elles sont plus sécurisées que l’indicateur de mot de passe.
Vous pouvez spécifier le nom du compte à l’aide du nom unique (
-distname
) comme indiqué ci-dessus, ou vous pouvez utiliser le nom de l’unité d’organisation (UO). Le nom de l’unité d’organisation (--ou
) a priorité sur le nom unique si vous spécifiez les deux. Vous pouvez exécuter la commande ci-dessous pour plus d’informations :adutil user create --help
- Indicateur de mot de passe :
Inscrivez les noms SPN auprès de l’utilisateur créé ci-dessus. Vous pouvez utiliser le nom de l’ordinateur hôte à la place du nom du conteneur, si vous le souhaitez, en fonction de la façon dont vous souhaitez que la connexion apparaisse en externe. Dans ce tutoriel, le port
5433
est utilisé à la place de1433
. Il s’agit du mappage de port pour le conteneur. Votre numéro de port peut être différent.adutil spn addauto -n sqluser -s MSSQLSvc -H sql1.contoso.com -p 5433
addauto
créera automatiquement les noms SPN, à condition que des privilèges suffisants soient présents pour le compte kinit.-n
: nom du compte auquel les noms SPN seront affectés.-s
: nom du service à utiliser pour générer les noms SPN. Dans ce cas, il est destiné à un service SQL Server et le nom du service est MSSQLSvc.-H
: nom d’hôte à utiliser pour générer les noms SPN. S’il n’est pas spécifié, le nom de domaine complet de l’hôte local est utilisé. Spécifiez également le FQDN pour le nom du conteneur. Dans ce cas, le nom du conteneur estsql1
et le nom de domaine complet estsql1.contoso.com
.-p
: port à utiliser pour générer les noms SPN. S’il n’est pas spécifié, les noms SPN sont générés sans port. Les connexions fonctionnent dans ce cas seulement quand SQL Server écoute le port par défaut1433
.
Créer le fichier keytab du service SQL Server
Créez le fichier keytab qui contient des entrées pour chacun des 4 noms SPN créés précédemment, et une entrée pour l’utilisateur. Le fichier keytab sera monté sur le conteneur, de sorte qu’il peut être créé à n’importe quel emplacement sur l’hôte. Vous pouvez modifier ce chemin en toute sécurité, tant que le fichier keytab obtenu est monté correctement lors de l’utilisation de docker/podman pour déployer le conteneur.
Pour créer le fichier keytab pour tous les noms SPN, nous pouvons utiliser l’option createauto
:
adutil keytab createauto -k /container/sql1/secrets/mssql.keytab -p 5433 -H sql1.contoso.com --password 'P@ssw0rd' -s MSSQLSvc
-k
: chemin où vous souhaitez créer le fichiermssql.keytab
. Dans l’exemple précédent, le répertoire/container/sql1/secrets
doit déjà exister sur l’hôte.-p
: port à utiliser pour générer les noms SPN. S’il n’est pas spécifié, les noms SPN sont générés sans port.-H
: nom d’hôte à utiliser pour générer les noms SPN. S’il n’est pas spécifié, le nom de domaine complet de l’hôte local est utilisé. Spécifiez également le FQDN pour le nom du conteneur. Dans ce cas, le nom du conteneur estsql1
et le nom de domaine complet estsql1.contoso.com
.-s
: nom du service à utiliser pour générer les noms SPN. Dans ce cas, il est destiné à un service SQL Server et le nom du service est MSSQLSvc.--password
: il s’agit du mot de passe du compte d’utilisateur Active Directory privilégié qui a été créé précédemment.-e
ou--enctype
: Types de chiffrement pour l’entrée keytab. Utilisez une liste de valeurs séparées par des virgules. S’il n’est pas spécifié, une invite interactive est présentée.
Quand vous avez le choix entre les types de chiffrement, vous pouvez en choisir plusieurs. Pour cet exemple, nous avons choisi aes256-cts-hmac-sha1-96
et arcfour-hmac
. Veillez à choisir un type de chiffrement pris en charge par l’hôte et le domaine.
Si vous souhaitez choisir le type de chiffrement de façon non interactive, vous pouvez spécifier votre choix de type de chiffrement avec l’argument -e dans la commande ci-dessus. Pour obtenir une aide supplémentaire concernant adutil, exécutez la commande suivante.
adutil keytab createauto --help
Attention
arcfour-hmac
est un chiffrement faible et il n'est pas recommandé de l'utiliser dans un environnement de production.
Pour créer le fichier keytab pour l’utilisateur, la commande est la suivante :
adutil keytab create -k /container/sql1/secrets/mssql.keytab -p sqluser --password 'P@ssw0rd'
-k
: chemin où vous souhaitez créer le fichiermssql.keytab
. Dans l’exemple précédent, le répertoire/container/sql1/secrets
doit déjà exister sur l’hôte.-p
: principal à ajouter au fichier keytab.
La création/création automatique du keytab adutil ne remplace pas les fichiers précédents. Elle s’ajoute simplement au fichier, s’il est déjà présent.
Vérifiez que le fichier keytab créé dispose des autorisations appropriées lors du déploiement du conteneur.
chmod 440 /container/sql1/secrets/mssql.keytab
À ce stade, vous pouvez copier le fichier mssql.keytab
de l’hôte Linux actuel vers l’hôte Linux où vous voulez déployer le conteneur SQL Server, puis suivez les étapes restantes sur l’hôte Linux qui exécutera le conteneur SQL Server. Si les étapes ci-dessus ont été effectuées sur l’hôte Linux où les conteneurs SQL Server seront déployés, suivez également les étapes ci-dessous sur ce même hôte.
Créer les fichiers de configuration qui seront utilisés par le conteneur SQL Server
Créez un fichier
mssql.conf
avec les paramètres pour Active Directory. Ce fichier peut être créé n’importe où sur l’hôte et doit être monté correctement au cours de la commande docker run. Dans cet exemple, nous avons placé ce fichiermssql.conf
sous/container/sql1
, qui est notre répertoire de conteneur. Le contenu demssql.conf
se présente comme suit :[network] privilegedadaccount = sqluser kerberoskeytabfile = /var/opt/mssql/secrets/mssql.keytab
privilegedadaccount
: utilisateur Active Directory privilégié à utiliser pour l’authentification Active Directory.kerberoskeytabfile
: le chemin dans le conteneur où le fichiermssql.keytab
se trouvera.
Créez un fichier
krb5.conf
, semblable à l’exemple suivant. La casse est importante pour ces fichiers.[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
Copiez tous les fichiers (
mssql.conf
,krb5.conf
etmssql.keytab
) à un emplacement qui sera monté sur le conteneur SQL Server. Dans cet exemple, ces fichiers sont placés sur l’hôte aux emplacements suivants :mssql.conf
etkrb5.conf
à l’emplacement/container/sql1/
, etmssql.keytab
à l’emplacement/container/sql1/secrets/
.Veillez à ce que l’utilisateur qui exécute la commande dockr/podman possède suffisamment d’autorisations sur ces dossiers. Il a besoin d’accéder au chemin du dossier créé lorsque le conteneur démarre. Dans cet exemple, nous avons fourni les autorisations ci-dessous sur le chemin du dossier :
sudo chmod 755 /container/sql1/
Monter les fichiers de configuration et déployer le conteneur SQL Server
Exécutez votre conteneur SQL Server et montez les fichiers de configuration Active Directory appropriés qui ont été créés précédemment :
Important
La variable d’environnement SA_PASSWORD
est dépréciée. Utilisez MSSQL_SA_PASSWORD
à la place.
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
Notes
Quand vous exécutez le conteneur sur le module de sécurité Linux (LSM) comme les hôtes activés pour SELinux, vous devez monter les volumes à l’aide de l’option Z
, qui indique à Docker d’étiqueter le contenu avec une étiquette privée non partagée. Pour plus d’informations, reportez-vous à la configuration de l’étiquette selinux.
Notre exemple contient les commandes suivantes :
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
- Les fichiers
mssql.conf
etkrb5.conf
se trouvent dans le chemin d’accès de fichier hôte/container/sql1
. - Le fichier
mssql.keytab
qui a été créé se trouve dans le chemin d’accès de fichier hôte/container/sql1/secrets
. - Comme notre ordinateur hôte se trouve sur Azure, les détails Active Directory doivent être ajoutés à la commande
docker run
dans le même ordre. Dans notre exemple, le contrôleur de domaineadVM
se trouve dans le domainecontoso.com
, avec l’adresse IP10.0.0.4
. Le contrôleur de domaine exécute DNS et KDC.
Créer des comptes de connexion SQL Server basés sur Active Directory avec Transact-SQL
Connectez-vous au conteneur SQL Server. À l’aide des commandes suivantes, créez la connexion et vérifiez qu’elle existe. Vous pouvez exécuter cette commande à partir d’un ordinateur client (Windows ou Linux) qui exécute SSMS, Azure Data Studio (ADS) ou n’importe quel autre outil d’interface de ligne de commande (CLI).
CREATE LOGIN [contoso\amvin] FROM WINDOWS;
SELECT name FROM sys.server_principals;
Se connecter à SQL Server avec l’authentification Active Directory
Pour vous connecter en utilisant SQL Server Management Studio (SSMS) ou Azure Data Studio, connectez-vous à SQL Server avec les identifiants Windows en utilisant le numéro de port et le nom du SQL Server (le nom peut être le nom du conteneur ou le nom d’hôte). Dans notre exemple, le nom du serveur est sql1.contoso.com,5433
.
Vous pouvez également utiliser un outil comme sqlcmd pour vous connecter à SQL Server dans votre conteneur.
sqlcmd -E -S 'sql1.contoso.com,5433'
Ressources
- Découvrir l’authentification Active Directory pour SQL Server sur Linux et les conteneurs
- Résoudre les problèmes liés à l’authentification Active Directory pour SQL Server sur Linux et les conteneurs