21 junho, 2010

Reset da senha de “sa” no SQL Express

UPDATE 25/08/2010 : Novo post com os passos mais detalhados

Hoje tive um problema com o SQL Express 2008 que está instalado no meu computador. Esse computador que estou usando foi configurado recentemente pelo suporte da empresa mas o SQL Express foi configurado sem colocar o grupo de administradores local como administrador do banco de dados. Sei que isso é considerado boa prática de segurança quando instalamos servidores de banco de dados mas é uma regra de segurança que não se aplica (ou não deveria ser aplicada) quando se fala de computadores de desenvolvimento e com SQL Express, que por padrão só aceita conexões locais.

O que aconteceu foi que meu SQL Express só tinha 1 administrador, o “sa” (como eu disse antes, o grupo de administradores do Windows não foi configurado como admin desse sql), e a pessoa que fez a instalação da máquina não está mais na empresa e não documentou a senha utilizada na instalação do SQL Express. Como resolver isso?

Fiz várias buscas tentando descobrir como reiniciar a senha de sa mas quase tudo que achei levava em consideração que a senha estava em branco (por incrível que pareça isso ainda é muito comum). Foi então que achei o um post de Deepak explicando como resolver esse problema sem ter que reinstalar o SQL. O post foi escrito para SQL Server 2005 full (não express) mas a dica funciona também nas versões express e 2008. Vou colocar abaixo os passos que segui (os comandos dos passos 1, 2, 4 e 5 foram executados no prompt de comando do DOS rodando com privilégio de administrador):

UPDATE 25/08/2010 : Novo post com os passos mais detalhados

  1. Parar o serviço do SQL Express: NET STOP MSSQL$SQLEXPRESS
  2. Reiniciar o serviço do SQL Express em modo Single User : NET START MSSQL$SQLEXPRESS /m
  3. Conectar no SQL usando o SQL Server Management Studio e fazer as alterações desejadas (trocar a senha do usuário sa e adicionar o grupo de adminitradores local como sysadmin do sql)
  4. Parar novamente o serviço do SQL Express usando o mesmo comando do passo 1.
  5. Reiniciar novamente o serviço em modo normal, usando o comando do passo 2 mas sem a opção /m.

Como e por que isso funciona?

Quando o SQL Server é executado em modo Single User, todos os administradores locais passam a fazer parte também do grupo de administradores do SQL Server, mesmo que ele não esteja configurado dessa forma. Sendo assim agora podemos fazer as correções/alterações necessárias sem que seja necessário reinstalar o SQL Server. Esse recurso é uma especie de modo de segurança que existe justamente para corrigir esse tipo de problema.

No meu caso, como se tratava da instância padrão de um SQL Express, o nome do serviço era MSSQL$SQLEXPRESS. Se fosse a instância padrão de um SQL Full o nome do serviço seria MSSQLSERVER.

2 comentários:

Kaduguara disse...

Ola amigo boa noite, tambem estou com o mesmo problema de senha no sql express porem segui os passo que postou e nao entendi o 3º passo quando diz que é para conectar usando o sql server management studio, pois o mesmo ainda pede senha e ja tentei com senha em branco tbm.
pode me ajudar??

kadu
kaduguara@hotmail.com
obrigado

Kelps Leite de Sousa disse...

Kaduguara,
Você deve conectar no SQL usando Windows Autentication para fazer os ajustes necessários. Dê uma olhada na versão mais detalhada desse post que publiquei algumas semanas depois:

http://blog.kelps.net/2010/08/recuperando-admin-sa-sql-local.html