Conectar-se ao SQL Server quando os administradores do sistema estão bloqueados

Aplica-se: SQL Server

Este artigo descreve como você poderá recuperar o acesso ao Mecanismo de Banco de Dados do SQL Server como administrador do sistema se você tiver sido bloqueado. Um administrador do sistema pode perder o acesso a uma instância do SQL Server devido a um dos seguintes motivos:

  • Todos os logons que são membros da função de servidor fixa sysadmin foram removidos por engano.

  • Todos os Grupos do Windows que são membros da função de servidor fixa sysadmin foram removidos por engano.

  • Os logons que são membros da função de servidor fixa sysadmin são para indivíduos que deixaram a empresa ou que não estão disponíveis.

  • A conta sa está desabilitada ou ninguém sabe a senha.

Resolução

Para resolver o problema de acesso, recomendamos que você inicie a instância do SQL Server no modo de usuário único. Esse modo impede que outras conexões ocorram enquanto você tenta restabelecer o acesso. Daqui em diante, você pode se conectar à instância do SQL Server e adicionar o seu logon à função de servidor sysadmin. As etapas detalhadas para essa solução são fornecidas na seção etapas passo a passo.

Você pode iniciar uma instância do SQL Server no modo de usuário único com as opções -m ou -f da linha de comando. Qualquer membro do grupo de Administradores locais do computador pode conectar-se à instância do SQL Server como membro da função de servidor fixa sysadmin.

Ao iniciar uma instância no modo de usuário único, interrompa o serviço SQL Server Agent. Caso contrário, o SQL Server Agent pode se conectar primeiro, usando a única conexão disponível ao servidor e impedindo que você faça logon.

Também é possível que um aplicativo cliente desconhecido assuma a única conexão disponível antes de você poder fazer logon. Para evitar que isso aconteça, você pode usar a opção -m seguida por um nome de aplicativo para limitar as conexões a uma conexão no aplicativo especificado. Por exemplo, iniciar o SQL Server com -mSQLCMD limita as conexões a uma conexão que se identifica como o programa cliente sqlcmd. Para conectar-se pelo Editor de Consulta no Management Studio, use -m"Microsoft SQL Server Management Studio - Query".

Importante

Não use -m com um nome de aplicativo como um recurso de segurança. Os aplicativos cliente especificam o nome do aplicativo por meio das configurações de cadeia de conexão, para ele que possa ser falsificado com um nome falso sem dificuldades.

A tabela a seguir resume as diferentes maneiras de iniciar a sua instância no modo de usuário único na linha de comando.

Opção Descrição Quando usar
-m Limita as conexões a uma conexão Não há outros usuários tentando se conectar à instância ou você não tem certeza do nome do aplicativo que está usando para se conectar à instância.
-mSQLCMD Limita conexões a uma conexão que precisa se identificar como o programa cliente sqlcmd Você planeja se conectar à instância com sqlcmd e deseja impedir que outros aplicativos usem a única conexão disponível.
-m"Microsoft SQL Server Management Studio - Query" Limita as conexões a uma conexão que precisa se identificar como o aplicativo Microsoft SQL Server Management Studio – Consulta. Você planeja se conectar à instância com o Editor de Consulta no Management Studio e deseja impedir que outros aplicativos usem a única conexão disponível.
-f Limita as conexões a uma conexão e inicia a instância na configuração mínima Alguma outra configuração está impedindo a inicialização.

Instruções passo a passo

Para obter instruções passo a passo sobre como iniciar o SQL Server no modo de usuário único, confira Iniciar o SQL Server no Modo de Usuário Único.

Usar o PowerShell

Opção 1: executar as etapas diretamente em um notebook executável usando o Azure Data Studio

Observação

Antes de tentar abrir este notebook, verifique se o Azure Data Studio está instalado no computador. Para instalar o Azure Data Studio, vá até Saiba como instalar o Azure Data Studio.

Opção 2: seguir a etapa manualmente

  1. Abra um prompt elevado do Windows PowerShell.

  2. Configure o nome do serviço, a instância do SQL Server e as variáveis de logon do Windows. Substitua esses valores por valores que correspondam ao seu ambiente.

    Se você tem uma instância padrão, use MSSQLSERVER sem um nome de instância.

    $service_name = "MSSQL`$instancename"
    $sql_server_instance = "machine_name\instance"
    $login_to_be_granted_access = "[CONTOSO\PatK]"
    
  3. Pare o serviço SQL Server para que ele possa ser reiniciado com o modo de usuário único usando o seguinte comando:

    Se você tem uma instância padrão, use MSSQLSERVER sem um nome de instância.

    net stop $service_name
    
  4. Agora, inicie a instância do SQL Server no modo de usuário único e somente permita que o SQLCMD.exe se conecte (/mSQLCMD):

    Observação

    Lembre-se de colocar SQLCMD em letras maiúsculas

    Se você tem uma instância padrão, use MSSQLSERVER sem um nome de instância.

    net start $service_name /f /mSQLCMD
    
  5. Usando sqlcmd, execute um comando CREATE LOGIN seguido do comando ALTER SERVER ROLE. Esta etapa considera que você fez logon no Windows com uma conta membro do grupo Administradores Locais. Essa etapa pressupõe que você substituiu os nomes de domínio e de logon pelas credenciais que deseja conceder à associação sysadmin.

    Se você tem uma instância padrão, use o nome do servidor.

    sqlcmd.exe -E -S $sql_server_instance -Q "CREATE LOGIN $login_to_be_granted_access FROM WINDOWS; ALTER SERVER ROLE sysadmin ADD MEMBER $login_to_be_granted_access; "
    

    Se você receber o erro a seguir, verifique se nenhum outro sqlcmd se conectou com o SQL Server:

    Sqlcmd: Error: Microsoft ODBC Driver X for SQL Server : Login failed for user 'CONTOSO\BobD'. Reason: Server is in single user mode. Only one administrator can connect at this time.

  6. Modo Misto (opcional): se a instância do SQL Server estiver sendo executado no modo de autenticação mista, você também poderá:

    1. Conceda a associação da função sysadmin a um logon SQL Server. Execute o código da maneira exibida a seguir para criar um logon de autenticação do SQL Server que é membro da função de servidor fixa sysadmin. Substitua <strong_password> por uma senha forte de sua escolha.

      Se você tem uma instância padrão, use o nome do servidor.

      $strong_password = "<strong_password>"
      sqlcmd.exe -E -S $sql_server_instance -Q "CREATE LOGIN TempLogin WITH PASSWORD = '$strong_password'; ALTER SERVER ROLE sysadmin ADD MEMBER TempLogin; "
      
    2. Incluindo, se a sua instância do SQL Server estiver sendo executado no modo de autenticação mista e você quiser redefinir a senha de uma conta sa habilitada. Alterar a senha da conta sa com a sintaxe a seguir. Substitua <strong_password> por uma senha forte de sua escolha:

      Se você tem uma instância padrão, use o nome do servidor.

      $strong_password = "<strong_password>"
      sqlcmd.exe -E -S $sql_server_instance -Q "ALTER LOGIN sa WITH PASSWORD = $strong_password; "
      
  7. Parar e reiniciar a instância do SQL Server no modo multiusuário

    Se você tem uma instância padrão, use MSSQLSERVER sem um nome de instância.

    net stop $service_name
    net start $service_name
    

Use o SQL Server Configuration Manager e o SSMS (SQL Server Configuration Manager)

Essas instruções presumem que:

  • O SQL Server está sendo executado no Windows 8 ou superior. São fornecidos pequenos ajustes para as versões anteriores do SQL Server ou do Windows, quando aplicáveis.

  • O SQL Server Management Studio está instalado no computador.

Execute estas instruções enquanto estiver conectado ao Windows como membro do grupo de administradores local.

  1. No menu Iniciar do Windows, clique com o botão direito do mouse no ícone SQL Server Configuration Manager e selecione Executar como administrador para passar as suas credenciais de administrador para o Configuration Manager.

  2. No SQL Server Configuration Manager, no painel esquerdo, selecione Serviços do SQL Server. No painel direito, localize a instância do SQL Server. (A instância padrão do SQL Server inclui (MSSQLSERVER) após o nome do computador. As instâncias nomeadas aparecem em maiúsculas com o mesmo nome apresentado na área Servidores Registrados.) Clique com o botão direito do mouse na instância do SQL Server e selecione Propriedades.

  3. Na guia Parâmetros de Inicialização, na caixa Especificar um parâmetro de inicialização, digite -m e selecione Adicionar. (É um traço seguido da letra m minúscula.)

    Em algumas versões anteriores do SQL Server , não há uma guia Parâmetros de Inicialização. Nesse caso, na guia Avançado, clique duas vezes em Parâmetros de Inicialização. Os parâmetros são abertos em uma janela pequena. Tenha cuidado para não alterar os parâmetros existentes. No final, adicione um novo parâmetro ;-m e selecione OK. (É um ponto-e-vírgula seguido da letra m minúscula.)

  4. Selecione OK e, após a mensagem de reinicialização, clique com o botão direito do mouse no nome do servidor e escolha Reiniciar.

  5. Depois que o SQL Server reiniciar, seu servidor estará no modo de usuário único. Confira se o SQL Server Agent não está em execução. Se for iniciado, ele usará sua única conexão.

  6. No menu Iniciar do Windows, clique com o botão direito do mouse no ícone do Management Studio e selecione Executar como administrador. As credenciais do administrador são passadas para o SSMS.

    Nas versões anteriores do Windows, a opção Executar como administrador aparece como um submenu.

    Em algumas configurações, o SSMS tenta criar várias conexões. Várias conexões falharão porque o SQL Server está no modo de usuário único. De acordo com o seu cenário, execute uma das ações a seguir.

    1. Conecte-se ao Pesquisador de Objetos usando a Autenticação do Windows, que inclui as credenciais do Administrador. Expanda Segurança, expanda Logonse clique duas vezes no seu próprio logon. Na página Funções de Servidor, selecione sysadmin e clique em OK.

    2. Em vez de conectar-se ao Pesquisador de Objetos, conecte-se à Janela de Consulta usando a autenticação do Windows (que inclui as credenciais do administrador). (Você só poderá se conectar dessa maneira se não tiver se conectado ao Pesquisador de Objetos.) Execute o código da seguinte maneira para adicionar um novo logon de autenticação do Windows que é membro da função de servidor fixa sysadmin. O exemplo a seguir adiciona um usuário de domínio chamado CONTOSO\PatK.

      CREATE LOGIN [CONTOSO\PatK] FROM WINDOWS;
      ALTER SERVER ROLE sysadmin ADD MEMBER [CONTOSO\PatK];
      
    3. Se o SQL Server estiver sendo executado no modo de autenticação mista, conecte-se a uma Janela de Consulta usando a autenticação do Windows (que inclui as credenciais do administrador). Execute o código da maneira exibida a seguir para criar um logon de autenticação do SQL Server que é membro da função de servidor fixa sysadmin.

      CREATE LOGIN TempLogin WITH PASSWORD = '<strong_password>';
      ALTER SERVER ROLE sysadmin ADD MEMBER TempLogin;
      

      Aviso

      Substitua <strong_password> por uma senha forte.

    4. Se o SQL Server estiver sendo executado no modo de autenticação mista e você quiser redefinir a senha da conta sa, conecte-se a uma Janela de Consulta usando a Autenticação do Windows (que inclui as credenciais do Administrador). Alterar a senha da conta sa com a sintaxe a seguir.

      ALTER LOGIN sa WITH PASSWORD = '<strong_password>';
      

      Aviso

      Substitua <strong_password> por uma senha forte.

  7. Feche o Management Studio.

  8. As próximas etapas retornam o SQL Server para o modo de vários usuários. No SQL Server Configuration Manager, no painel esquerdo, selecione Serviços do SQL Server.

  9. No painel direito, clique com o botão direito do mouse na instância do SQL Server e selecione Propriedades.

  10. Na guia Parâmetros de Inicialização, na caixa Parâmetros existentes, selecione -m e escolha Remover.

    Em algumas versões anteriores do SQL Server , não há uma guia Parâmetros de Inicialização. Nesse caso, na guia Avançado, clique duas vezes em Parâmetros de Inicialização. Os parâmetros são abertos em uma janela pequena. Remova o ;-m adicionado anteriormente e selecione OK.

  11. Clique com o botão direito do mouse no nome do servidor e selecione Reiniciar. Certifique-se de iniciar o SQL Server Agent novamente, se você o tiver interrompido antes de iniciar o SQL Server no modo de usuário único.

Você poderá se conectar normalmente com uma das contas, que agora é membro da função de servidor fixa sysadmin.