Volto aqui para um post pequeno (espero eu) sobre algo legal e útil que precisei e achei recentemente: resetar a senha do usuário ‘sa’ do SQL Server mesmo possuindo sérias restrições de acesso.

Nas minhas buscas achei diversas soluções para esse fim em diversas condições. Tentarei listar aqui esses meios apontando a situação em que funcionam ou ajudam.

No meu caso, os testes foram feitos no SQL Server 2008 instalado no Windows 7. O problema real ocorreu em um servidor Windows Server 2008 R2 + SQL Server 2008 R2 onde eu não tinha a senha do usuário ‘sa’ (e nenhum outro usuário) e não tinha acesso pelo Windows Authentication.

Bem, o grande motivo desse post seria conseguir o acesso mesmo sem a possibilidade de usar a autenticação pela conta do Windows, mas começarei mostrando algumas formas de setar a senha tendo algum tipo de acesso… Pode ser útil no caso de automatizar esse processo ou fazer a alteração via linha de comando.

 _

Setar senha pela linha de comando tendo acesso pela autenticação do Windows

1. No prompt de comando (MS-DOS) abra o SQL Server Command Line Tool usando a autenticação do Windows:

sqlcmd -E

1.1. No caso de versões anteriores ao SQL Server 2008, use osql -E

2. Use o comando sp_password para setar a nova senha do usuário ‘sa’:

sp_password @old = null, @new = ‘novasenha’,  @loginame =’sa’
go

3. Basta sair usando o exit e testar o login:

exit

sqlcmd -U sa

 _

Setar a senha sem o acesso pela autenticação do Windows

No meu caso, algum problema que desconheço impediu o login no banco via Windows Authentication e eu não tinha o acesso do usuário ‘sa’. Pesquisei um pouco e consegui recuperar o acesso via login e senha. Seguem algumas possibilidades e solução de entraves.

 _

» Acesso ao SQL Server em modo local ou single-user mode

Startando o serviço do SQL Server em modo single-user permite que qualquer administrador do servidor conecte ao banco como um sysadmin. Isso pode ser feito executando o comando:

C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Binn>sqlservr.exe -m

Com o parâmetro -m o administrador do servidor poderá logar no banco através da Autenticação do Windows (seja por linha de comando ou pela interface do gerenciador), mesmo se ela não tiver sido configurada previamente.

sqlcmd -E

Através desse acesso, pode-se alterar a senha conforme o item anterior.

 _

» Alteração da senha através do MS SQL Server Password Unlocker

Mesmo sem poder acessar o SQL Server, é possível forçar uma nova senha para um dado usuário usando o MS SQL Server Password Unlocker. É uma aplicação paga, mas para os meus testes usei uma versão “alternativa”…

A instalação é bem direta e não requer nada de especial. Depois de instalado, deve abrir o master.mdf e será exibido os usuários cadastrados. No meu caso, o local do arquivo era:

C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\master.mdf

Basta alterar a senha e pronto!

 _

» Mudar o método de autenticação ao servidor com acesso pela autenticação do Windows

Mesmo alterando a senha do usuário, não será possível logar se o servidor estiver configurado para permitir apenas a Windows Authentication. Nesse modo, qualquer tentativa de login, mesmo com a senha correta, dará um simples “Login failed for user ‘sa’”. Essa configuração poderá ser feita pela interface do gerenciador (SQL Server Manegement Studio). Caso necessário, inicie o servidor em single-user mode.

Nessa interface, para chegar até a opção do tipo de autenticação, basta:

  1. right-click na instância/servidor (no meu caso é “localhost (SQL Server 10.0.1600 – sa)”);
  2. “Properties”;
  3. “Security”;
  4. Em “Server authentication” marque a opção “SQL Server and Windows Authentication mode”.
  5. Reinicie o serviço.

 _

» Mudar o método de autenticação ao servidor nenhum acesso ao mesmo

Essa façanha pode ser feita através da edição de registro do Windows. o_O’

Abra o regedit do Windows e navegue até os registros do SQL Server. No meu caso o caminho é:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQLServer

Deverá haver o registro “LoginMode” no painel da direita. Se não encontrar o caminho correto, faça uma busca geral (CTRL+F) por “LoginMode” e deverá achar.

Edite esse registro com o valor hexadecimal “2″. O valor “1″ significa que o SQL Server está em Windows Authentication Mode apenas. Colocando “2″ será usado o ”SQL Server and Windows Authentication mode”. Reinicie o serviço para aplicar a alteração.

Por hora é isso. Espero que ajude alguém em momentos de desespero. =P

Fontes:
Suporte Microsoft
MSDN Library
MS SQL Password Unlocker
MSDN Forum
MSDN Library