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\SYSTEM
compte (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\SYSTEM
et 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:
Définissez le mot de passe pour le sa
compte - développez Sécurité, développez Connexions, cliquez sa
avec 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:
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 sysadmin
case et cliquez sur OK:
(ou, si votre connexion est déjà répertoriée, cliquez avec le bouton droit sur Propriétés et assurez-vous que la sysadmin
case 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\SYSTEM
droits 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 :
- 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.
Ouvrez regedit.exe
et modifiez la valeur de HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\SQLWriter\ImagePath
pointer 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];"
Essayez de redémarrer le service SQL VSS Writer (vous obtiendrez une erreur; c'est correct).
Vous devriez maintenant pouvoir vous connecter en sysadmin
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 SQLCMD.exe
et remplacer sqlwriter.exe
- beaucoup plus facile de pointer SQLCMD.exe
directement 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.