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.