Se connecter à SQL Server lorsque les administrateurs système n'y ont plus accès

S'applique à : SQL Server

Cette article explique comment avoir à nouveau accès au Moteur de base de données SQL Server en tant qu’administrateur système si vous avez été verrouillé. Un administrateur système peut perdre l'accès à une instance de SQL Server pour l'une des raisons suivantes :

  • Toutes les connexions qui sont membres du rôle serveur fixe administrateur système ont été supprimées par erreur.

  • Tous les groupes Windows qui sont membres du rôle serveur fixe administrateur système ont été supprimés par erreur.

  • Les connexions membres du rôle serveur fixe administrateur système sont destinées aux personnes qui ont quitté la société ou qui ne sont pas disponibles.

  • Le compte sa est désactivé ou personne ne connaît le mot de passe du compte.

Résolution

Pour résoudre votre problème d’accès, nous vous recommandons de démarrer l’instance de SQL Server en mode mono-utilisateur. Ce mode empêche les autres connexions de se produire lorsque vous essayez de récupérer l’accès. À partir de là, vous pouvez vous connecter à votre instance de SQL Server et ajouter votre connexion au rôle de serveur sysadmin. La procédure détaillée pour cette solution est fournie dans la section instructions pas à pas.

Vous pouvez démarrer une instance de SQL Server en mode mono-utilisateur avec les options -m ou -f à partir de la ligne de commande. Tout membre du groupe Administrateurs local de l'ordinateur peut se connecter ensuite à l'instance de SQL Server comme membre du rôle serveur fixe sysadmin.

Lorsque vous démarrez une instance en mode mono-utilisateur, arrêtez le service SQL Server Agent. Dans le cas contraire, SQL Server Agent peut se connecter en premier, en utilisant la seule connexion disponible au serveur et en vous empêchant de vous connecter.

Il est également possible qu’une application cliente inconnue utilise la seule connexion disponible avant que vous puissiez vous connecter. Pour éviter ce problème, vous pouvez utiliser l’option -m suivie d’un nom d’application pour limiter les connexions à une connexion unique à partir de l’application spécifiée. Par exemple, démarrer SQL Server avec -mSQLCMD limite les connexions à une connexion unique, laquelle doit s’identifier en tant que programme client sqlcmd. Pour établir une connexion par le biais de l'Éditeur de requêtes dans Management Studio, utilisez -m"Microsoft SQL Server Management Studio - Query".

Important

N’utilisez pas -m avec un nom d'application comme fonctionnalité de sécurité. Les applications clientes spécifient le nom de l’application par le biais des paramètres de chaîne de connexion.de sorte qu'elle peut facilement être usurpée avec un faux nom.

Le tableau suivant résume les différentes façons de démarrer votre instance en mode mono-utilisateur dans la ligne de commande.

Option Description Quand l’utiliser
-m Limite les connexions à une connexion unique Aucun autre utilisateur ne tente de se connecter à l’instance ou si vous n’êtes pas sûr du nom d'application que vous utilisez pour vous connecter à l’instance.
-mSQLCMD Limite les connexions à une connexion unique, laquelle doit s’identifier en tant que programme client sqlcmd Vous envisagez de vous connecter à l’instance avec sqlcmd et vous souhaitez empêcher d’autres applications d’utiliser la seule connexion disponible.
-m"Microsoft SQL Server Management Studio - Query" Limite les connexions à une connexion unique qui doit s’identifier en tant qu’application Microsoft SQL Server Management Studio - Requête. Vous envisagez de vous connecter à l’instance avec l’Éditeur de requête dans Management Studio et vous souhaitez empêcher d’autres applications d’utiliser la seule connexion disponible.
-f Limite les connexions à une connexion unique et démarre l’instance dans une configuration minimale Une autre configuration vous empêche de démarrer.

Instructions pas à pas

Pour obtenir des instructions détaillées sur le démarrage de SQL Server en mode mono-utilisateur, consultez .Démarrer SQL Server en mode mono-utilisateur.

Utiliser PowerShell

Option 1 : Exécuter les étapes directement dans un notebook exécutable avec Azure Data Studio

Remarque

Avant d’essayer d’ouvrir ce notebook, vérifiez que Azure Data Studio est installé sur votre ordinateur local. Pour installer Azure Data Studio, accédez à Installer Azure Data Studio.

Option 2 : Suivre l'étape manuellement

  1. Ouvrez une invite de commandes Windows PowerShell avec des privilèges élevés.

  2. Configurez le nom du service et l’instance SQL Server ainsi que les variables de la connexion Windows. Remplacez ces valeurs par des valeurs correspondant à votre environnement.

    Si vous avez une instance par défaut, utilisez MSSQLSERVER sans nom d’instance.

    $service_name = "MSSQL`$instancename"
    $sql_server_instance = "machine_name\instance"
    $login_to_be_granted_access = "[CONTOSO\PatK]"
    
  3. Arrêtez le service SQL Server pour pouvoir le redémarrer en mode mono-utilisateur, en utilisant la commande suivante :

    Si vous avez une instance par défaut, utilisez MSSQLSERVER sans nom d’instance.

    net stop $service_name
    
  4. À présent, démarrez votre instance SQL Server en mode mono-utilisateur et autorisez seulement SQLCMD.exe à se connecter (/mSQLCMD) :

    Remarque

    Veillez à utiliser SQLCMD en majuscules

    Si vous avez une instance par défaut, utilisez MSSQLSERVER sans nom d’instance.

    net start $service_name /f /mSQLCMD
    
  5. À l’aide de sqlcmd, exécutez une commande CREATE LOGIN suivie d’une commande ALTER SERVER ROLE. Cette étape suppose que vous vous êtes connecté à Windows avec un compte qui est membre du groupe Administrateurs local. Cette étape suppose que vous avez remplacé les noms du domaine et de la connexion par les identifiants auxquels vous voulez donner l’appartenance à l’administrateur système.

    Si vous avez une instance par défaut, utilisez le nom du serveur.

    sqlcmd.exe -E -S $sql_server_instance -Q "CREATE LOGIN $login_to_be_granted_access FROM WINDOWS; ALTER SERVER ROLE sysadmin ADD MEMBER $login_to_be_granted_access; "
    

    Si vous recevez l’erreur suivante, vous devez vérifier qu’aucun autre sqlcmd est connecté à SQL Server :

    Sqlcmd: Error: Microsoft ODBC Driver X for SQL Server : Login failed for user 'CONTOSO\BobD'. Reason: Server is in single user mode. Only one administrator can connect at this time.

  6. Mode mixte (facultatif) : si votre instance SQL Server s’exécute en mode d’authentification mixte, vous pouvez aussi :

    1. Accordez l’appartenance au rôle administrateur système à un compte de connexion SQL Server. Exécutez le code (semblable au suivant) permettant de créer une connexion d'authentification SQL Server qui est membre du rôle serveur fixe sysadmin . Remplacez <strong_password> par un mot de passe fort de votre choix.

      Si vous avez une instance par défaut, utilisez le nom du serveur.

      $strong_password = "<strong_password>"
      sqlcmd.exe -E -S $sql_server_instance -Q "CREATE LOGIN TempLogin WITH PASSWORD = '$strong_password'; ALTER SERVER ROLE sysadmin ADD MEMBER TempLogin; "
      
    2. En outre, si votre instance SQL Server s’exécute en mode d’authentification mixte et que vous souhaitez réinitialiser le mot de passe d’un compte sa activé. Modifiez le mot de passe du compte sa en respectant la syntaxe suivante. Veillez à remplacer <strong_password> par un mot de passe fort de votre choix :

      Si vous avez une instance par défaut, utilisez le nom du serveur.

      $strong_password = "<strong_password>"
      sqlcmd.exe -E -S $sql_server_instance -Q "ALTER LOGIN sa WITH PASSWORD = $strong_password; "
      
  7. Arrêtez et redémarrez votre instance SQL Server en mode multi-utilisateur

    Si vous avez une instance par défaut, utilisez MSSQLSERVER sans nom d’instance.

    net stop $service_name
    net start $service_name
    

Utiliser le Gestionnaire de configuration SQL Server et Management Studio (SSMS)

Ces instructions partent des prérequis suivants :

  • SQL Server est exécuté sur Windows 8 ou version ultérieure. De légers ajustements pour les versions antérieures de SQL Server ou de Windows sont fournis le cas échéant.

  • Assurez-vous que SQL Server Management Studio est installé sur l'ordinateur.

Suivez ces instructions lorsque vous êtes connecté à Windows en tant que membre du groupe Administrateurs local.

  1. Dans le menu Démarrer de Windows, cliquez avec le bouton droit sur l’icône de SQL Server Configuration Manager et choisissez Exécuter en tant qu’administrateur pour transmettre vos informations d’identification d’administrateur à Configuration Manager.

  2. Dans le Gestionnaire de configuration SQL Server , dans le volet gauche, sélectionnez Services SQL Server. Dans le volet droit, recherchez votre instance de SQL Server. (L’instance par défaut de SQL Server inclut (MSSQLSERVER) après le nom de l’ordinateur. Les instances nommées sont affichées en majuscules et portent le même nom que dans la zone Serveurs inscrits.) Cliquez avec le bouton droit sur l’instance SQL Server, puis sélectionnez Propriétés.

  3. Sous l’onglet Paramètres de démarrage, dans la zone Spécifiez un paramètre de démarrage, tapez -m, puis sélectionnez Ajouter. (Il s'agit d'un trait d'union suivi d'un m minuscule)

    Certaines versions antérieures de SQL Server n’ont pas d’onglet Paramètres de démarrage. Dans ce cas, sous l’onglet Avancé, double-cliquez sur Paramètres de démarrage. Les paramètres s’ouvrent dans une fenêtre de petite taille. Veillez à ne pas modifier les paramètres existants. Tout en bas, ajoutez un nouveau paramètre ;-m, puis sélectionnez OK. (Il s'agit d'un point-virgule, suivi d'un trait d'union et d'un m minuscule.)

  4. Sélectionnez OK, puis après le message de redémarrage, cliquez avec le bouton droit sur le nom de votre serveur et sélectionnez Redémarrer.

  5. Après le redémarrage de SQL Server, votre serveur passe en mode mono-utilisateur. Vérifiez que SQL Server Agent n’est pas en cours d’exécution. S'il est démarré, il utilise votre unique connexion.

  6. Dans le menu Démarrer de Windows, cliquez avec le bouton droit sur l’icône de Management Studio, puis sélectionnez Exécuter en tant qu’administrateur. Cette opération transfère vos informations d’identification d’administrateur à SSMS.

    Pour les versions antérieures de Windows, l’option Exécuter en tant qu’administrateur s’affiche en tant que sous-menu.

    Dans certaines configurations, SSMS essaie d’établir plusieurs connexions. Les connexions multiples échouent car SQL Server est en mode mono-utilisateur. Selon votre scénario, choisissez l’une des actions suivantes :

    1. Connectez-vous avec l'Explorateur d'objets en utilisant l'authentification Windows (qui contient vos informations d'identification d'administrateur). Développez Sécurité, Connexions, puis double-cliquez sur votre propre connexion. Sur la page Rôles serveur, sélectionnez sysadmin, puis sélectionnez OK.

    2. Au lieu de vous connecter avec l'Explorateur d'objets, connectez-vous avec une fenêtre de requête en utilisant l'authentification Windows (qui contient vos informations d'identification d'administrateur). (Vous pouvez vous connecter de cette manière uniquement si vous ne vous êtes pas connecté avec l’Explorateur d’objets.) Exécutez le code semblable à ce qui suit pour ajouter une connexion d’authentification Windows qui est membre du rôle serveur fixe sysadmin. L’exemple suivant ajoute un utilisateur de domaine nommé CONTOSO\PatK.

      CREATE LOGIN [CONTOSO\PatK] FROM WINDOWS;
      ALTER SERVER ROLE sysadmin ADD MEMBER [CONTOSO\PatK];
      
    3. Si votre instance de SQL Server s'exécute en mode d'authentification mixte, connectez-vous avec une fenêtre de requête en utilisant l'authentification Windows (qui inclut vos informations d'identification d'administrateur). Exécutez le code (semblable au suivant) permettant de créer une connexion d'authentification SQL Server qui est membre du rôle serveur fixe sysadmin .

      CREATE LOGIN TempLogin WITH PASSWORD = '<strong_password>';
      ALTER SERVER ROLE sysadmin ADD MEMBER TempLogin;
      

      Avertissement

      Remplacez <strong_password> par un mot de passe fort.

    4. Si votre instance de SQL Server s’exécute en mode d’authentification mixte et que vous souhaitez réinitialiser le mot de passe du compte sa, connectez-vous avec une fenêtre Requête en utilisant l’authentification Windows (qui inclut vos informations d’identification d’administrateur). Modifiez le mot de passe du compte sa en respectant la syntaxe suivante.

      ALTER LOGIN sa WITH PASSWORD = '<strong_password>';
      

      Avertissement

      Remplacez <strong_password> par un mot de passe fort.

  7. Fermez Management Studio.

  8. Les étapes suivantes repassent SQL Server en mode multi-utilisateur. Dans le Gestionnaire de configuration SQL Server , dans le volet gauche, sélectionnez Services SQL Server.

  9. Dans le volet droit, cliquez avec le bouton droit sur l’instance de SQL Server, puis sélectionnez Propriétés.

  10. Sous l’onglet Paramètres de démarrage, dans la zone Paramètres existants, sélectionnez -m, puis sélectionnez Supprimer.

    Certaines versions antérieures de SQL Server n’ont pas d’onglet Paramètres de démarrage. Dans ce cas, sous l’onglet Avancé, double-cliquez sur Paramètres de démarrage. Les paramètres s’ouvrent dans une fenêtre de petite taille. Supprimez ;-m que vous avez ajouté précédemment, puis sélectionnez OK.

  11. Cliquez avec le bouton droit sur le nom du serveur, puis sélectionnez Redémarrer. Veillez à redémarrer SQL Server Agent si vous l’avez arrêté avant de démarrer SQL Server en mode mono-utilisateur.

Vous devez désormais être en mesure de vous connecter normalement avec l’un des comptes qui est maintenant membre du rôle serveur fixe sysadmin.