web-dev-qa-db-fra.com

Comment réinitialiser le mot de passe sa?

J'ai perdu le mot de passe sa sur une machine et lorsque je me connecte directement à la machine à l'aide d'un compte dans le groupe d'administration, SQL Server Management Studio ne me permet pas de me connecter à l'aide de l'authentification Windows.

Mon plan était de simplement me connecter au serveur, de se connecter via l'authentification Windows et de réinitialiser sa pour utiliser un nouveau mot de passe. Étant donné que je ne peux pas me connecter via l'authentification Windows, cela ne fonctionnera pas.

Sinon, comment réinitialiser le mot de passe sa?

22
Daniel Williams

Vous pouvez suivre les étapes mentionnées dans le lien ci-dessous pour réinitialiser le mot de passe SA:

Étapes résumées ci-dessous:

  1. Ouvrez SQL Server Configuration Manager à partir du menu Démarrer> Programmes> Microsoft SQL Server 20xx> Outils de configuration> correspondant à la dernière version de SQL Server que vous avez installée (par exemple, si vous avez installé 2005 et 2012, utilisez la version 2012). Vous n'avez pas de menu Démarrer? Sur l'écran de démarrage de Windows 8, commencez à taper SQL Server Con ... jusqu'à ce qu'il s'affiche.
  2. Arrêtez l'instance SQL Server que vous devez récupérer en cliquant avec le bouton droit sur l'instance dans les services SQL Server et en sélectionnant "Arrêter"
  3. Cliquez avec le bouton droit sur l'instance que vous venez d'arrêter, cliquez sur Propriétés et dans l'onglet "Avancé", dans la zone de texte Propriétés, ajoutez "; –m" à la fin de la liste dans l'option "Paramètres de démarrage" (sur les versions plus récentes, vous peut aller directement dans l'onglet "Paramètres de démarrage", taper "-m" et cliquer sur Ajouter, sans se soucier de la syntaxe, du point-virgule ou de toute autre chose).
  4. Cliquez sur le bouton "OK" et redémarrez l'instance SQL Server
  5. Une fois que l'instance SQL Server a démarré en mode mono-utilisateur, le compte d'administrateur Windows peut se connecter à SQL Server à l'aide de l'utilitaire sqlcmd à l'aide de l'authentification Windows. Vous pouvez utiliser des commandes Transact-SQL telles que "sp_addsrvrolemember" pour ajouter une connexion existante (ou nouvellement créée) au rôle de serveur sysadmin.

L'exemple suivant ajoute le compte "Buck" dans le domaine "CONTOSO" au rôle sysadmin:

EXEC sp_addsrvrolemember 'CONTOSO\Buck', 'sysadmin';

Une fois l'accès sysadmin récupéré, supprimez le "; -m" des paramètres de démarrage à l'aide de Configuration Manager et redémarrez l'instance SQL Server une fois de plus.

REMARQUE: assurez-vous qu'il n'y a pas d'espace entre ";" et "-m", l'analyseur de paramètres de registre est sensible à ces fautes de frappe. Vous devriez voir une entrée dans le fichier ERRORLOG de SQL Server qui dit "SQL Server démarré en mode mono-utilisateur".


Ressources additionnelles:

En fin de compte, vous pouvez toujours copier les fichiers de base de données vers une autre instance, ou même réinstaller SQL Server (en ajoutant un compte local en tant que sysadmin au cours de ce processus).

10
TroubleshootingSQL

Ce que vous ferez dépendra de votre version de SQL Server, ainsi que si vous pouvez vous permettre de supprimer le service SQL Server afin d'établir de nouvelles informations d'identification. Les deux premières méthodes ici ne nécessitent pas de redémarrer l'instance:


Pour les instances SQL Server 2005, 2008 et 2008 R2

Vous pouvez vous connecter en utilisant le compte NT AUTHORITY\SYSTEM (Ou d'autres méthodes de porte dérobée). Il y a quelques détails dans certaines des réponses ici:

J'ai également une astuce sur MSSQLTips.com qui résout ce problème:

Essentiellement, vous téléchargez PSExec de Microsoft, puis l'utilisez pour lancer Management Studio une fois qu'il est installé:

PsExec -s -i "C:\...\Ssms.exe"

Cela se connectera en tant que NT AUTHORITY\SYSTEM Et vous permettra de faire des choses dans l'Explorateur d'objets, comme:

  • Modifiez l'instance en SQL Server et en mode d'authentification Windows - cliquez avec le bouton droit sur le nom du serveur, appuyez sur les propriétés et modifiez le bouton radio s'il est actuellement défini sur Windows seulement:

    enter image description here

  • Définissez le mot de passe du compte sa - développez Sécurité, développez Connexions, cliquez avec le bouton droit sur sa et cliquez sur Propriétés, et dans la boîte de dialogue résultante, il y aura deux champs d'entrée de mot de passe:

    enter image description here

  • Ajoutez votre propre connexion en tant que sysadmin - cliquez avec le bouton droit sur Connexions, Nouvelle connexion ... entrez votre nom de connexion (sous la forme DOMAIN\username), Passez à l'onglet Rôles du serveur et cochez la case sysadmin et cliquez sur OK:

    enter image description here

  • (ou, si votre connexion est déjà répertoriée, cliquez avec le bouton droit sur Propriétés et assurez-vous que sysadmin est coché sous Rôles du serveur)


Pour SQL Server 2012 et les instances plus récentes

À partir de SQL Server 2012, NT Authority\SYSTEM Ne disposait plus de droits sur SQL Server par défaut. Donc, une autre façon de le faire dans ces nouvelles versions a été détaillée par Argenis Fernandez :

  1. Si le service SQL VSS Writer est en cours d'exécution, arrêtez-le et suspendez tous les plans de maintenance ou les logiciels de sauvegarde tiers qui pourraient en dépendre.
  2. Ouvrez regedit.exe Et modifiez la valeur de HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\SQLWriter\ImagePath Pour pointer sur SQLCMD.exe, Qui sera dans C:\Program Files (x86)\Microsoft SQL Server\Client SDK\ODBC\**<...110|120|130|140...>**\Tools\Binn. Après la modification, la valeur de registre devrait ressembler à ceci (désolé pour le défilement):

    "C:Program Files (x86)\Microsoft SQL Server\Client SDK\ODBC\130\Tools\Binn\SQLCMD.exe" -S .\instancename -E -Q "ALTER ROLE sysadmin ADD MEMBER [YourDomain\YourUserName];"
    
  3. Essayez de redémarrer le service SQL VSS Writer (vous obtiendrez une erreur; c'est correct).

  4. Vous devriez maintenant pouvoir vous connecter en tant que sysadmin en utilisant YourDomain\YourUserName. Arrêtez donc le service SQL VSS Writer, corrigez le registre et redémarrez le service (si vous en avez besoin ou s'il s'exécutait avant de commencer).

J'ai parcouru cela beaucoup plus en détail dans un deuxième conseil:

Bien que lorsque j'ai écrit cette astuce, j'ai utilisé une approche plus lourde pour faire une copie de SQLCMD.exe Et remplacer sqlwriter.exe - beaucoup plus facile de simplement pointer le service sur SQLCMD.exe Directement.


Si vous pouvez vous permettre de supprimer le service SQL Server

Il existe un chemin officiellement pris en charge par Microsoft qui nécessite de redémarrer l'instance en mode mono-utilisateur:

Il existe également une fonction dans dbatools.io , une solution Powershell pour la gestion de SQL Server, appelée Reset-DbaAdmin:


La sécurité n'est pas le principal problème ici

Je vois beaucoup de gens appeler Microsoft à "corriger" ces soi-disant "vulnérabilités". Ce sont des approches valides pour récupérer l'accès à une instance de SQL Server que vous possédez à juste titre. Ils nécessitent tous des privilèges élevés sur l'hôte physique où réside SQL Server; comme je l'ai dit à plusieurs personnes, si vous ne voulez pas que les développeurs jouent avec les installations de SQL Server, n'en faites pas des administrateurs.

9
Aaron Bertrand