Tutoriel : Utiliser adutil pour configurer l’authentification Active Directory avec SQL Server sur Linux

S’applique à : SQL Server - Linux

Ce tutoriel explique comment configurer l’authentification Active Directory Windows pour SQL Server sur Linux à l’aide d’adutil. Pour utiliser une autre méthode de configuration de l’authentification Active Directory utilisant ktpass, consultez Tutoriel : Utiliser l’authentification Active Directory avec SQL Server sur Linux.

Ce didacticiel contient les tâches suivantes :

  • Installer adutil
  • Joindre une machine Linux à votre domaine Active Directory
  • Créer un utilisateur Active Directory pour SQL Server et définir le nom du principal du service à l’aide d’adutil
  • Créer le fichier keytab (table de clés) du service SQL Server
  • Configurer SQL Server pour utiliser le fichier keytab
  • 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

Avant de configurer l’authentification Active Directory, il vous faut les éléments suivants :

  • Un contrôleur de domaine Windows exécutant Active Directory Domain Services dans votre réseau.
  • L’outil adutil installé sur une machine hôte jointe à un domaine.

Préparation de l’ordinateur de domaine

Assurez-vous 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. Dans ce tutoriel, l’adresse IP de l’ordinateur hôte sql1 est 10.0.0.10. Nous ajoutons l’entrée hôte de transfert dans Active Directory dans l’exemple suivant. Lorsque les utilisateurs se connectent à sql1.contoso.com, cette entrée garantit que l’hôte approprié est atteint.

Capture d'écran de l’ajout d’un enregistrement d’hôte.

Pour ce tutoriel, nous utilisons un environnement dans Azure avec trois machines virtuelles. Une des machines virtuelles est un ordinateur Windows Server nommé adVM.contoso.com, qui s’exécute en tant que contrôleur de domaine avec le nom de domaine contoso.com. La deuxième machine virtuelle est une machine cliente exécutant Windows 10 nommée winbox, où SQL Server Management Studio (SSMS) est installé. Le troisième ordinateur est un ordinateur Ubuntu 18.04 LTS nommé sql1, qui héberge SQL Server.

Joindre un ordinateur hôte Linux à votre domaine Active Directory

Pour joindre sql1 au domaine Active Directory, consultez Joindre SQL Server sur un hôte Linux à un domaine Active Directory.

Installer adutil

Pour installer adutil, suivez les étapes de l’article Présentation de l’utilitaire adutil - Active Directory sur la machine hôte que vous avez ajoutée au domaine à l’étape précédente.

Utiliser adutil afin de créer un utilisateur Active Directory pour SQL Server et définir le nom du principal du service

  1. Obtenez ou renouvelez le ticket Kerberos TGT (Ticket-Granting Ticket) à l’aide de la commande kinit . Vous devez utiliser un compte privilégié pour la commande kinit, et la machine hôte doit déjà faire partie du domaine. Le compte doit avoir l’autorisation de se connecter au domaine, ainsi que de créer des comptes et des noms de principaux du service dans le domaine.

    Dans cet exemple de script, un utilisateur privilégié appelé privilegeduser@CONTOSO.COM est déjà créé sur le contrôleur de domaine.

    kinit privilegeduser@CONTOSO.COM
    
  2. Avec adutil, créez le nouvel utilisateur qui sera utilisé comme compte Active Directory privilégié par SQL Server.

    Les mots de passe peuvent être spécifiés de trois façons différentes. Si vous utilisez plusieurs de ces méthodes, leur priorité est définie par l’ordre suivant :

    • Utilisation de l’indicateur de mot de passe : --password <password>
    • Dans une variable d’environnement : ADUTIL_ACCOUNT_PWD
    • Entrée interactive sur une invite de ligne de commande

    Les méthodes avec variable d’environnement ou entrée interactive sont plus sûres la méthode avec indicateur de mot de passe.

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

    Vous pouvez spécifier le nom du compte par son nom unique (--distname), comme nous l’avons vu, ou bien 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
    
  3. Inscrivez les noms SPN auprès du principal créé précédemment. Vous devez utiliser le nom de domaine complet (FQDN) de la machine. Dans ce tutoriel, nous utilisons le port par défaut de SQL Server, 1433. Votre numéro de port peut être différent.

    adutil spn addauto -n sqluser -s MSSQLSvc -H sql1.contoso.com -p 1433
    
    • addauto crée automatiquement les noms SPN dès lors que le compte kinit dispose de privilèges suffisants.
    • -n : nom du compte auquel sont attribués les noms SPN.
    • -s : nom du service à utiliser pour générer les noms SPN. Dans ce cas, il est destiné au service SQL Server, raison pour laquelle 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é. Dans ce cas, le nom d’hôte est sql1 et le nom de domaine complet est sql1.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 SQL fonctionnent dans ce cas seulement quand SQL Server écoute le port par défaut 1433.

Création du fichier keytab du service SQL Server à l’aide de mssql-conf

Vous pouvez installer adutil et l’intégrer à mssql-conf pour créer et configurer directement le fichier keytab à l’aide de mssql-conf. Cette méthode est préférable pour créer un fichier keytab de service SQL Server. Sinon, vous pouvez créer manuellement le fichier keytab du service SQL Server.

Prérequis

  1. Assurez-vous que le fichier /var/opt/mssql/mssql.conf appartient à mssql et non à root. Sinon, vous devez exécuter les commandes mssql-conf à l’aide de sudo.

  2. Sur un contrôleur de domaine, dans les paramètres Active Directory du compte network.privilegedadaccount (dans ces exemples, sqluser@CONTOSO.COM), activez les options suivantes sous l'onglet Compte, dans la section Options du compte :

    • Ce compte prend en charge le chiffrement AES 128 bits via Kerberos
    • Ce compte prend en charge le chiffrement AES 256 bits via Kerberos

Création du fichier keytab

Une fois que vous crééz l’utilisateur et les noms SPN, procédez comme suit pour créer le fichier keytab.

  1. Passez à l’utilisateur mssql :

    su mssql
    
  2. Connectez-vous en tant qu’utilisateur Active Directory à l’aide de la commande kinit :

    kinit privilegeduser@CONTOSO.COM
    
  3. Créez le fichier keytab :

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

    Si vous êtes invité à redémarrer le service SQL Server pour adopter la nouvelle configuration Active Directory, vous pouvez le faire dans la section suivante.

  4. Vérifiez que le fichier keytab est créé avec les entrées appropriées :

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

    La sortie doit ressembler à cet exemple :

    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 le fichier /var/opt/mssql/mssql.conf n’appartient pas à mssql, vous devez configurer mssql-conf pour définir les valeurs network.kerberoskeytabfile et network.privilegedadaccount en fonction des étapes précédentes. Tapez le mot de passe à l’invite.

    /opt/mssql/bin/mssql-conf set network.kerberoskeytabfile /var/opt/mssql/secrets/mssql.keytab
    /opt/mssql/bin/mssql-conf set network.privilegedadaccount sqluser
    
  5. Validez votre configuration pour garantir le bon fonctionnement de l’authentification Active Directory.

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

    Vous devez obtenir une sortie similaire à la suivante :

    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)
    

Création manuelle du fichier keytab du service SQL Server

Si vous avez installé adutil et l’avez intégré à mssql-conf, vous pouvez passer directement à Création du fichier keytab du service SQL Server à l’aide de mssql-conf.

  1. 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.

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

    Les options de ligne de commande possibles sont les suivantes :

    • -k : chemin où sera créé le fichier mssql.keytab. Dans l’exemple précédent, le répertoire /var/opt/mssql/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é. Dans ce cas, le nom d’hôte est sql1 et le nom de domaine complet est sql1.contoso.com.
    • -s : nom du service à utiliser pour générer les noms SPN. Pour cet exemple, le nom du service SQL Server 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.

    Vous pouvez choisir plusieurs types de chiffrement, à condition que votre hôte et votre domaine prennent en charge les types de chiffrement. Dans cet exemple, vous pouvez choisir aes256-cts-hmac-sha1-96 et aes128-cts-hmac-sha1-96. Cependant, évitez arcfour-hmac dans un environnement de production, car il a un chiffrement faible.

    Si vous souhaitez choisir le type de chiffrement sans invite, spécifiez votre choix avec l’argument -e dans la commande précédente. Pour obtenir de l’aide sur les options de adutil keytab, exécutez la commande suivante :

    adutil keytab createauto --help
    
  2. Ajoutez dans le fichier keytab une entrée correspondant au nom du principal et à son mot de passe, utilisée par SQL Server pour se connecter à Active Directory :

    adutil keytab create -k /var/opt/mssql/secrets/mssql.keytab -p sqluser --password 'P@ssw0rd'
    
    • -k : chemin où sera créé le fichier mssql.keytab.
    • -p : principal à ajouter au fichier keytab.

    adutil keytab [ create | autocreate ] ne remplace pas les fichiers précédents; elle fait simplement un ajout au fichier s’il est déjà présent.

  3. Vérifiez que le fichier keytab créé est la propriété de l’utilisateur mssql et que seul l’utilisateur mssql dispose d’un accès en lecture/écriture au fichier. Vous pouvez exécuter les commandes chown et chmod comme suit :

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

Configurer SQL Server pour utiliser le fichier keytab

Exécutez les commandes suivantes pour configurer SQL Server de façon à utiliser le fichier keytab créé à l’étape précédente, et pour définir l’utilisateur créé précédemment en tant que compte Active Directory privilégié. Dans notre exemple, le nom d’utilisateur est sqluser.

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

Redémarrer SQL Server

Exécutez la commande suivante pour activer et redémarrer les services SQL Server :

sudo systemctl restart mssql-server

Créer des comptes de connexion SQL Server basés sur Active Directory dans Transact-SQL

Connectez-vous au serveur SQL et exécutez les commandes suivantes pour créer le login et confirmer son existence.

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

Se connecter à SQL Server à l’aide de l’authentification Active Directory

Pour vous connecter en utilisant SSMS ou Azure Data Studio, connectez-vous à SQL Server avec vos informations d’identification Windows.

Vous pouvez aussi utiliser un outil comme sqlcmd pour vous connecter à SQL Server avec l’authentification Windows.

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