Comment faire lorsqu’on a perdu le mot de passe de la connexion sa pour se connecter à l’instance ?
Ou comment est-il possible de prendre le contrôle d’une instance SQL Server installée par une personne avec son propre compte, et qui a quitté l’entreprise depuis une durée plus grande que celle de l’expiration des mots de passe ?
Il est pour cela nécessaire d’avoir accès à la machine avec un compte d’administrateur local : en effet dans ce cas, le démarrage en mode mono-utilisateur d’une instance de SQL Server autorise l’accès à un tel compte. Cela permet donc de créer une nouvelle connexion, à laquelle on octroie le privilège et sésame d’appartenance au rôle fixe de serveur sysadmin.
Voyons tout d’abord quelles sont les connexions qui disposent du privilège d’appartenance au rôle sysadmin. La requête suivante liste l’ensemble des connexions inscrites aux rôles d’instance :
1 2 3 4 5 6 7 8 | SELECT SPR.name AS server_role_name , SPM.name AS server_role_member_name , SPR.type_desc FROM sys.server_role_members AS SRM INNER JOIN sys.server_principals AS SPR ON SRM.role_principal_id = SPR.principal_id INNER JOIN sys.server_principals AS SPM ON SRM.member_principal_id = SPM.principal_id |
La connexion ELSUKET8\Nicolas est celle d’administrateur local de mon PC : je la supprime :
1 | DROP LOGIN [ELSUKET8\Nicolas] |
A l’ouverture d’une nouvelle fenêtre de requête, nous obtenons bien l’erreur :
Rendons-nous maintenant dans le gestionnaire de configuration de SQL Server. Si l’instance est sous SQL Server 2012 et que l’on souhaite ouvrir cette console à partir d’une fenêtre de ligne de commandes, il faudra saisir SQLServerManager11.msc. Une fois la console ouverte, on peut double-cliquer sur SQL Server Services dans l’un des deux panneaux, et on obtient la liste des services SQL Server installés :
Un clic-droit sur le service SQL Server nous permet d’accéder, en outre, aux paramètres de démarrage du service. Sous SQL Server 2005 et 2008, ils se trouvent dans l’onglet Avancé, mais sous SQL Server 2012, l’onglet Paramètres de démarrage a fait son apparition :
Nous ajoutons ici le paramètre l’option -m, qui permet de démarrer une instance en mode mono-utilisateur. Sous SQL Server 2005 et 2008, dans l’onglet Avancé, il est nécessaire de placer le curseur à la fin de la chaîne du paramètre Paramètres de démarrage, et d’ajouter ;-m après la fin de cette chaîne. Une fois fait, nous sommes avertis qu’il est évidemment nécessaire de redémarrer le service :
On peut redémarrer le service toujours à partir de la même console, par un clic-droit sur le service. Une fois fait, nous démarrons SQL Server Management Studio (SSMS) en tant qu’administrateur. Cette option est accessible par un simple clic-droit sur le raccourci. Attention : comme nous sommes en mode mono-utilisateur, il n’est pas possible d’ouvrir une connexion pour l’explorateur d’objets. Donc si l’on ne ferme pas la connexion de ce dernier (par clic-droit sur le nom de l’instance dans celui-ci), il est impossible d’ouvrir une fenêtre de requête.
Nous nous octroyons maintenant le droit de connexion et d’appartenance au rôle de serveur sysadmin :
1 2 3 4 5 6 7 8 9 | CREATE LOGIN [ELSUKET8\ElSuket] FROM WINDOWS GO -- SQL Server 2012 ALTER SERVER ROLE sysadmin ADD MEMBER [ELSUKET8\ElSuket] -- SQL Server 2000, 2005 et 2008 EXEC sp_addsrvrolemember 'ELSUKET8\ElSuket', 'sysadmin' |
Nous devons maintenant retourner dans la console de configuration des services de SQL Server, retirer le paramètre -m, et redémarrer à nouveau le service, de sorte que l’instance soit de nouveau accessible par plusieurs connexions. Une fois fait, on peut démarrer SSMS normalement (i.e. pas en tant qu’administrateur), et nous pouvons de nouveau accéder à l’instance SQL Server :
Changer le mot de passe de la connexion sa
Cela se fait de la même façon, en suivant les étapes suivantes :
1. Ajouter le paramètre -m aux paramètres de démarrage du service SQL Server, puis redémarrer le service;
2. Se connecter à l’instance SQL Server avec SSMS en tant qu’administrateur;
3. Changer le mot de passe de la connexion sa avec l’instruction suivante :
1 | ALTER LOGIN sa WITH PASSWORD = 'unMotDePasseRobuste' |
4. Supprimer le paramètre -m des paramètres de démarrage du service SQL Server, puis redémarrer le service une nouvelle fois;
5. Se connecter normalement avec SSMS, le nom de connexion sa et le nouveau mot de passe.
Effectuer ces mêmes opérations en ligne de commande avec l’utilitaire SQLCMD
Il est pour cela nécessaire d’ouvrir un fenêtre de lignes de commande en tant qu’administrateur. On peut tout simplement créer une raccourci qui pointe sur cmd, puis par clic-droit sur celui-ci, choisir de mode :
Une fois fait, on démarre l’utilitaire en lignes de commande SQLCMD très simplement :
1 | sqlcmd -S [uneInstance] |
Puis, par exemple, changer le mot de passe de la connexion sa :
Après chaque ligne de code tapée sous SQLCMD, si l’on appuie sur Entrée, la commande n’est pas exécutée : il faut pour cela utiliser la marqueur de fin de lot GO (qui n’est pas une instruction SQL ou T-SQL !). Enfin, pour sortir de l’utilitaire SQLCMD, il suffit de taper exit.
Bonne récupération d’accès à tous !
ElSüket.