Connexion à SQL Server 2008 R2 sans authentification !
A l’occasion de la rétrogradation d’un contrôleur de domaine en serveur autonome, j’ai perdu la possibilité de me connecter en administrateur local de mon serveur SQL Server 2008 R2. Normal ! Comme j’avais par ailleurs oublié le mot de passe de mon compte sa (authentification mixte), je n’avais donc plus aucune possibilité d’administrer l’instance SQL Server. Je tiens à préciser qu’il s’agissait là de ma machine de formation.
Pas de panique. Pour les étourneaux de mon espèce, il existe une solution ! Arrêtez votre instance SQL Server et redémarrez-la à partir de la ligne de commande du serveur :
"C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Binn\sqlservr.exe" -m
ou
"C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Binn\sqlservr.exe" -m
Pour préciser l’instance, vous pouvez ajouter -sMSSQLSERVER.
Ensuite, connectez-vous à SQL Server avec sqlcmd.exe :
"C:\Program Files\Microsoft SQL Server\110\Tools\Binn\sqlcmd.exe" -E
En mode mixte, vous pouvez changer le mot de passe du compte sa.
USE [master]
GO
ALTER LOGIN [sa] WITH PASSWORD='sa'
GO
En mode intégré, le mieux est de recréer le compte administrateur local :
USE [master]
GO
DROP LOGIN [ACERARIEN\Administrateur]
GO
CREATE LOGIN [ACERARIEN\Administrateur] FROM WINDOWS WITH DEFAULT_DATABASE=[master]
GO
sp_addsrvrolemember 'ACERARIEN\Administrateur','sysadmin'
GO
Vous pouvez aussi ajouter le groupe des administrateurs locaux :
CREATE LOGIN [BUILTIN\Administrateurs] FROM WINDOWS WITH DEFAULT_DATABASE=[master]
GO
sp_addsrvrolemember 'BUILTIN\Administrateurs','sysadmin'
GO
Dans l’exemple ci-dessus, ACERARIEN désigne le nom de la machine sur laquelle est installée SQL Server 2008 R2.
Ce hack marche aussi pour SQL Server 2012 !