Conexión a SQL Server cuando los administradores del sistema están bloqueados

Se aplica a: SQL Server

En este artículo, se explica cómo recuperar el acceso al Motor de base de datos de SQL Server como administrador del sistema si se le bloquea. Un administrador del sistema puede perder el acceso a una instancia de SQL Server por alguna de las razones siguientes:

  • Se han quitado por equivocación todos los inicios de sesión que son miembros del rol fijo de servidor sysadmin.

  • Se han quitado por equivocación todos los grupos de Windows que son miembros del rol fijo de servidor sysadmin.

  • Los inicios de sesión que son miembros del rol fijo de servidor sysadmin son para individuos que han dejado la empresa o no están disponibles.

  • La cuenta sa se ha deshabilitado o nadie conoce la contraseña.

Solución

Para resolver el problema de acceso, se recomienda iniciar la instancia de SQL Server en modo de usuario único. Este modo evita que se produzcan otras conexiones mientras se intenta recuperar el acceso. Desde ahí, puede conectar a la instancia de SQL Server y agregar el inicio de sesión al rol del servidor sysadmin. En la sección Instrucciones paso a paso se proporcionan los pasos detallados de esta solución.

Puede iniciar una instancia de SQL Server en modo de usuario único con las opciones -m o -f de la línea de comandos. Luego cualquier miembro del grupo Administradores local del equipo puede conectarse a la instancia de SQL Server como miembro del rol fijo de servidor sysadmin.

Cuando inicie la instancia en modo de usuario único, detenga el servicio Agente SQL Server. De lo contrario, el Agente SQL Server podría conectarse primero y tomar la única conexión disponible al servidor, con lo que usted no podría iniciar sesión.

También es posible que una aplicación cliente desconocida tomara la única conexión disponible antes de que usted pudiera iniciar sesión. Para evitar que esto suceda, puede usar la opción -m seguida de un nombre de aplicación para limitar las conexiones a una única conexión de la aplicación especificada. Por ejemplo, si se inicia SQL Server con -mSQLCMD se limitan las conexiones a una única conexión que se identifica a sí misma como el programa cliente sqlcmd. Para conectarse mediante el editor de consultas de Management Studio, use -m"Microsoft SQL Server Management Studio - Query".

Importante

No use -m con un nombre de aplicación como característica de seguridad. Las aplicaciones cliente especifican el nombre de aplicación por medio de la configuración de la cadena de conexión, así que se puede falsificar fácilmente con un nombre falso.

En la tabla siguiente se resumen las distintas formas de iniciar la instancia en modo de usuario único en la línea de comandos.

Opción Descripción Cuándo se usa
-m Limita las conexiones a una única conexión No hay ningún otro usuario intentando conectarse a la instancia o no está seguro del nombre de la aplicación que va a usar para conectarse a la instancia.
-mSQLCMD Limita las conexiones a una única conexión que se debe identificar a sí misma como el programa cliente sqlcmd Planea conectarse a la instancia con sqlcmd y quiere evitar que otras aplicaciones tomen la única conexión disponible.
-m"Microsoft SQL Server Management Studio - Query" Limita las conexiones a una única conexión que debe identificarse a sí misma como la aplicación Microsoft SQL Server Management Studio - Consulta. Planea conectarse a la instancia mediante el Editor de Power Query de Management Studio y quiere evitar que otras aplicaciones tomen la única conexión disponible.
-f Limita las conexiones a una única conexión e inicia la instancia en configuración mínima Alguna otra configuración está evitando que inicie.

Instrucciones paso a paso

Para obtener instrucciones paso a paso sobre cómo iniciar SQL Server en modo de usuario único, vea Iniciar SQL Server en modo de usuario único.

Uso de PowerShell

Opción 1: Ejecute los pasos directamente en un cuaderno ejecutable mediante Azure Data Studio

Nota:

Antes de intentar abrir este cuaderno, compruebe que Azure Data Studio está instalado en la máquina local. Para instalar Azure Data Studio, vaya a Aprender a instalar Azure Data Studio.

Opción 2: Seguir el paso manualmente

  1. Abra un símbolo del sistema de Windows PowerShell con privilegios elevados.

  2. Configure el nombre del servicio y la instancia de SQL Server, y las variables de inicio de sesión de Windows. Reemplace estos valores por otros que coincidan con el entorno.

    Si tiene una instancia predeterminada, use MSSQLSERVER sin un nombre de instancia.

    $service_name = "MSSQL`$instancename"
    $sql_server_instance = "machine_name\instance"
    $login_to_be_granted_access = "[CONTOSO\PatK]"
    
  3. Detenga el servicio SQL Server para que se pueda reiniciar con el modo de usuario único, mediante el comando siguiente:

    Si tiene una instancia predeterminada, use MSSQLSERVER sin un nombre de instancia.

    net stop $service_name
    
  4. Ahora, inicie la instancia de SQL Server en un modo de usuario único y solo permita la conexión de SQLCMD.exe (/mSQLCMD):

    Nota:

    Asegúrese de usar SQLCMD en mayúsculas

    Si tiene una instancia predeterminada, use MSSQLSERVER sin un nombre de instancia.

    net start $service_name /f /mSQLCMD
    
  5. Con sqlcmd, ejecute un comando CREATE LOGIN seguido de un comando ALTER SERVER ROLE. Con este paso se asegura de que ha iniciado sesión en Windows con una cuenta miembro del grupo de administradores locales. Este paso supone que ha reemplazado los nombres de dominio e inicio de sesión por las credenciales que quiere proporcionar a la pertenencia de sysadmin.

    Si tiene una instancia predeterminada, use el nombre del 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; "
    

    Si se produce el error siguiente, tendrá que asegurarse de que no hay conectada otra instancia de sqlcmd a 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 mixto (opcional): si la instancia de SQL Server se ejecuta en modo de autenticación mixta, también puede:

    1. Conceder la pertenencia al rol sysadmin a un inicio de sesión de SQL Server. Ejecute código como el siguiente para crear un nuevo inicio de sesión de autenticación de SQL Server que sea miembro del rol fijo de servidor sysadmin. Reemplace por <strong_password> una contraseña segura de su elección.

      Si tiene una instancia predeterminada, use el nombre del 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. Además, si la instancia de SQL Server se ejecuta en modo de autenticación mixta y quiere restablecer la contraseña de una cuenta sa habilitada. Cambie la contraseña de la cuenta sa con la siguiente sintaxis. Asegúrese de reemplazar <strong_password> con una contraseña segura de su elección:

      Si tiene una instancia predeterminada, use el nombre del servidor.

      $strong_password = "<strong_password>"
      sqlcmd.exe -E -S $sql_server_instance -Q "ALTER LOGIN sa WITH PASSWORD = $strong_password; "
      
  7. Detenga y reinicie la instancia de SQL Server en modo de varios usuarios.

    Si tiene una instancia predeterminada, use MSSQLSERVER sin un nombre de instancia.

    net stop $service_name
    net start $service_name
    

Uso del Administrador de configuración de SQL Server y SQL Server Management Studio (SSMS)

En estas instrucciones se da por hecho que:

  • SQL Server está en ejecución en Windows 8 o una versión superior. Se proporcionan pequeños ajustes para versiones anteriores de SQL Server o Windows si es necesario.

  • SQL Server Management Studio está instalado en el equipo.

Siga estas instrucciones con la sesión iniciada en Windows como miembro del grupo Administradores local.

  1. En el menú Inicio de Windows, haga clic con el botón derecho en el icono del Administrador de configuración de SQL Server y seleccione Ejecutar como administrador para pasar las credenciales de administrador al Administrador de configuración.

  2. En el Administrador de configuración de SQL Server , en el panel izquierdo, seleccione Servicios de SQL Server. En el panel derecho, busque la instancia de SQL Server. (La instancia predeterminada de SQL Server incluye (MSSQLSERVER) después del nombre del equipo. Las instancias con nombre aparecen en mayúsculas con el mismo nombre que tienen en Servidores registrados). Haga clic con el botón derecho en la instancia de SQL Server y, luego, seleccione Propiedades.

  3. En la pestaña Parámetros de inicio, en el cuadro Especifique un parámetro de inicio, escriba -m y, luego, seleccione Agregar. (Es un guion y a continuación una letra m minúscula).

    En algunas versiones anteriores de SQL Server no hay ninguna pestaña Parámetros de inicio . En ese caso, en la pestaña Opciones avanzadas , haga doble clic en Parámetros de inicio. Los parámetros se abrirán en una ventana pequeña. Tenga cuidado de no cambiar ninguno de los parámetros existentes. Al final, agregue un parámetro ;-m nuevo y, luego, seleccione Aceptar. (Es un punto y coma, después un guion y a continuación una letra m minúscula).

  4. Seleccione Aceptary, después del mensaje para reiniciar, haga clic con el botón derecho en el nombre del servidor; luego, seleccione Reiniciar.

  5. Después de que SQL Server se reinicie, el servidor se encuentra en modo de usuario único. Asegúrese de que el Agente SQL Server no esté en ejecución. Si está iniciado, usará su única conexión.

  6. En el menú Inicio de Windows, haga clic con el botón derecho en el icono de Management Studio y seleccione Ejecutar como administrador. Esto pasa las credenciales de administrador a SSMS.

    En versiones anteriores de Windows, la opción Ejecutar como administrador aparece como un submenú.

    En algunas configuraciones, SSMS intentará realizar varias conexiones. Se produce un error en varias conexiones porque SQL Server está en modo de usuario único. En función del escenario, realice una de las siguientes acciones.

    1. Conéctese al Explorador de objetos mediante autenticación de Windows, que incluye las credenciales de administrador. Expanda Seguridade Inicios de sesióny haga doble clic en su propio inicio de sesión. En la página Roles de servidor, seleccione sysadminy, luego, Aceptar.

    2. En lugar de conectar con el Explorador de objetos, conectar con una ventana de consulta mediante la autenticación de Windows (que incluye sus credenciales de administrador). (Solo puede conectarse de esta forma si no se conectó con el Explorador de objetos). Ejecute código como el siguiente para agregar un inicio de sesión de Autenticación de Windows nuevo que sea miembro del rol fijo de servidor sysadmin. El ejemplo siguiente agrega un usuario de dominio denominado CONTOSO\PatK.

      CREATE LOGIN [CONTOSO\PatK] FROM WINDOWS;
      ALTER SERVER ROLE sysadmin ADD MEMBER [CONTOSO\PatK];
      
    3. Si SQL Server se ejecuta en modo de autenticación mixto, conectar con una ventana de consulta mediante la autenticación de Windows (que incluye sus credenciales de administrador). Ejecute código como el siguiente para crear un nuevo inicio de sesión de autenticación de SQL Server que sea miembro del rol fijo de servidor sysadmin.

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

      Advertencia

      Reemplace <strong_password> por una contraseña segura.

    4. Si SQL Server se ejecuta en modo de autenticación mixto y quiere restablecer la contraseña de la cuenta sa, conecte con una ventana consulta por medio de la autenticación de Windows (que incluye sus credenciales de administrador). Cambie la contraseña de la cuenta sa con la siguiente sintaxis.

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

      Advertencia

      Reemplace <strong_password> por una contraseña segura.

  7. Cierre Management Studio.

  8. Los pasos siguientes cambian SQL Server al modo multiusuario. En el Administrador de configuración de SQL Server , en el panel izquierdo, seleccione Servicios de SQL Server.

  9. En el panel derecho, haga clic con el botón derecho en la instancia de SQL Server y, luego, seleccione Propiedades.

  10. En la pestaña Parámetros de inicio, en el cuadro Parámetros existentes, seleccione -m y, luego, Quitar.

    En algunas versiones anteriores de SQL Server no hay ninguna pestaña Parámetros de inicio . En ese caso, en la pestaña Opciones avanzadas , haga doble clic en Parámetros de inicio. Los parámetros se abrirán en una ventana pequeña. Quite el parámetro ;-m que agregó anteriormente y, luego, seleccione Aceptar.

  11. Haga clic con el botón derecho en el nombre del servidor y, luego, seleccione Reiniciar. Si ha detenido el Agente SQL Server, asegúrese de volver a iniciarlo antes de iniciar SQL Server en modo de usuario único.

Ahora debe poder conectarse normalmente con una de las cuentas que es miembro del rol fijo de servidor sysadmin.