Comment réinitialiser le mot de passe sa?

22

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. Puisque je ne peux pas me connecter via l'authentification Windows, cela ne fonctionnera pas.

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

Daniel Williams
la source
J'ai trouvé la réponse. Je n'ai pas pu me connecter en tant qu'administrateur de domaine, mais l'utilisation de l'administrateur local a bien fonctionné.
Daniel Williams
Voulez-vous dire qu'un membre du groupe «Administrateurs» de l'ordinateur local a pu le faire? Pour la postérité, quelles mesures précises avez-vous prises?
p.campbell
Le compte était le compte Administrateur local lui-même. Ce compte fait partie du groupe Adminsitrators local, tout comme mon compte de domaine. Mais seul le compte Administrateur local a pu utiliser l'authentification Windows pour se connecter à Sql Server. J'espère que ça aide.
Daniel Williams
le démarrage de l'instance en mode mono-utilisateur permettra également à tout compte local faisant partie du groupe Administrateur local d'accéder à l'instance. Edit: Le lien @ user1419 le montre.
Shawn Melton

Réponses:

10

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 supplémentaires:

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 pendant ce processus).

Dépannage de SQL
la source
9

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 NT AUTHORITY\SYSTEMcompte (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 NT AUTHORITY\SYSTEMet vous permettra de faire des choses dans l'Explorateur d'objets, comme:

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

    entrez la description de l'image ici

  • Définissez le mot de passe pour le sacompte - développez Sécurité, développez Connexions, cliquez saavec le bouton droit et cliquez sur Propriétés, et dans la boîte de dialogue résultante, il y aura deux champs de saisie de mot de passe:

    entrez la description de l'image ici

  • Ajoutez votre propre connexion en tant quesysadmin - cliquez avec le bouton droit sur Connexions, Nouvelle connexion ... entrez votre nom de connexion (dans le formulaire DOMAIN\username), puis accédez à l'onglet Rôles du serveur et cochez la sysadmincase et cliquez sur OK:

    entrez la description de l'image ici

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


Pour SQL Server 2012 et les instances plus récentes

À partir de SQL Server 2012, les NT Authority\SYSTEMdroits sur SQL Server n'étaient plus accordés 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.exeet modifiez la valeur de HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\SQLWriter\ImagePathpointer vers SQLCMD.exe, qui va être 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 sysadminutilisant 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 SQLCMD.exeet remplacer sqlwriter.exe- beaucoup plus facile de pointer SQLCMD.exedirectement le service .


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.

Aaron Bertrand
la source
cette méthode me permettra-t-elle également d'activer le compte SA? Je suis coincé dans une position où mon compte SA est désactivé et j'ai un groupe AD avec le rôle Public. En outre, votre méthode est répertoriée. Pourrai-je effectuer ces étapes sans supprimer l'instance? Je demande parce que mon serveur est maintenant dans un environnement de production.
Sean Perkins
1
@Sean oui, vous devriez pouvoir réactiver sa et / ou créer un autre compte d'authentification SQL, ou ajouter votre utilisateur AD (pas un groupe!) Spécifiquement à un rôle plus élevé. Aucun de ceux-ci ne nécessitera le redémarrage de SQL Server (le seul cas où cela serait requis est de basculer entre l'authentification mixte et Windows uniquement).
Aaron Bertrand
J'obtiens l'erreur suivante lorsque j'essaie le processus que vous avez délimité. Je me suis assuré de prendre une capture d'écran des seuls comptes répertoriés également. Y a-t-il eu un changement à un moment donné dans SQL 2012 qui n'autorisera pas cette méthode? Ma version actuelle est 11.0.3128 . De plus, peu importe le type de changement que j'effectue, je vais obtenir une variante d'une erreur indiquant que je n'ai pas d'autorisations. Une dernière chose, je doute que cela fasse une différence, mais j'ai ouvert PowerShell avec les droits d'administrateur, exécuté cmd.exe, puis psexec -i -s "C: \ ...... smss.exe"! [Erreur de création de compte] ( i.stack.imgur.com/ITOja.p
Sean Perkins
La photo ci-jointe ne montre rien maintenant, mais il y avait "SA" et "NT AUTHORITY \ SYSTEM" comme seuls comptes répertoriés. Le message d'erreur que j'ai reçu était "L'utilisateur n'a pas l'autorisation d'effectuer cette action. (Microsoft SQL Server, erreur: 15247)"
Sean Perkins
@Sean PowerShell? PSExec n'a rien à voir avec PowerShell. Êtes-vous un administrateur local sur la machine? Êtes-vous sûr?
Aaron Bertrand