Partager via


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

S’applique à :SQL Server sur 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, vous utilisez un environnement dans Azure avec trois machines virtuelles. Une machine virtuelle est un ordinateur Windows Server nommé adVM.contoso.com, exécuté en tant que contrôleur de domaine (DC) avec le nom contoso.comde domaine . 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. À l’aide d’adutil, créez le nouvel utilisateur à utiliser 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 '<password>'
    

    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
    

    Attention

    Votre mot de passe doit respecter la stratégie de mot de passe par défaut de SQL Server. Par défaut, le mot de passe doit avoir au moins huit caractères appartenant à trois des quatre groupes suivants : lettres majuscules, lettres minuscules, chiffres de base 10 et symboles. Les mots de passe peuvent comporter jusqu'à 128 caractères. Utilisez des mots de passe aussi longs et complexes que possible.

  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 uniquement dans ce cas lorsque l’instance 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 l’utilisateur mssql possède le /var/opt/mssql/mssql.conf fichier, et non root. Sinon, vous devez exécuter les commandes mssql-conf à l’aide sudode .

  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 conformément aux é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 '<password>' -s MSSQLSvc
    

    Attention

    Votre mot de passe doit respecter la stratégie de mot de passe par défaut de SQL Server. Par défaut, le mot de passe doit avoir au moins huit caractères appartenant à trois des quatre groupes suivants : lettres majuscules, lettres minuscules, chiffres de base 10 et symboles. Les mots de passe peuvent comporter jusqu'à 128 caractères. Utilisez des mots de passe aussi longs et complexes que possible.

    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 '<password>'
    

    Attention

    Votre mot de passe doit respecter la stratégie de mot de passe par défaut de SQL Server. Par défaut, le mot de passe doit avoir au moins huit caractères appartenant à trois des quatre groupes suivants : lettres majuscules, lettres minuscules, chiffres de base 10 et symboles. Les mots de passe peuvent comporter jusqu'à 128 caractères. Utilisez des mots de passe aussi longs et complexes que possible.

    • -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. Assurez-vous que l’utilisateur mssql possède le keytab créé 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 à l’instance SQL Server et exécutez les commandes suivantes pour créer la connexion, puis vérifiez qu’elle existe.

CREATE LOGIN [contoso\privilegeduser]
    FROM WINDOWS;

SELECT name
FROM sys.server_principals;

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

Utilisez vos informations d’identification Windows pour vous connecter à l’instance SQL Server à l’aide de SQL Server Management Studio (SSMS).

Vous pouvez également utiliser un outil comme l’utilitaire sqlcmd pour vous connecter à l’instance SQL Server à l’aide de l’authentification Windows.

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