¿Cómo restableces la contraseña sa?

22

Perdí la contraseña sa en una máquina, y cuando inicio sesión en la máquina directamente usando una cuenta en el grupo de administración, SQL Server Management Studio no me permitirá iniciar sesión usando la autenticación de Windows.

Mi plan era simplemente iniciar sesión en el servidor, conectarme a través de la autenticación de Windows y restablecer sa para usar una nueva contraseña. Como no puedo conectarme a través de la autenticación de Windows, esto no funcionará.

¿De qué otra forma puedo restablecer la contraseña sa?

Daniel Williams
fuente
Encontré la respuesta. No pude iniciar sesión como administrador de dominio, pero el uso de administrador local funcionó bien.
Daniel Williams
¿Quiere decir que un miembro del grupo local de 'Administradores' de la máquina pudo hacer esto? Para la posteridad, ¿qué pasos exactos tomaste?
p.campbell
La cuenta era la cuenta de administrador local en sí. Esta cuenta es parte del grupo local de Administradores, al igual que mi cuenta de dominio. Pero solo la cuenta de administrador local pudo usar la autenticación de Windows para iniciar sesión en SQL Server. Espero que eso ayude.
Daniel Williams
iniciar la instancia en modo de usuario único también permitirá que cualquier cuenta local que forme parte del grupo de administradores locales tenga acceso a la instancia. Editar: El enlace @ user1419 señala esto.
Shawn Melton

Respuestas:

10

Puede seguir los pasos mencionados en el siguiente enlace para restablecer la contraseña SA:

Pasos resumidos a continuación:

  1. Abra el Administrador de configuración de SQL Server desde el menú Inicio> Programas> Microsoft SQL Server 20xx> Herramientas de configuración> relevantes para la versión más reciente de SQL Server que haya instalado (por ejemplo, si tiene 2005 y 2012 instalado, use la versión 2012). ¿No tienes un menú de inicio? En la pantalla de Inicio de Windows 8, comience a escribir SQL Server Con ... hasta que aparezca.
  2. Detenga la instancia de SQL Server que necesita recuperar haciendo clic derecho en la instancia en los Servicios de SQL Server y seleccionando "Detener"
  3. Haga clic con el botón derecho en la instancia que acaba de detener, haga clic en Propiedades y, en la pestaña "Avanzado", en el cuadro de texto Propiedades, agregue "; –m" al final de la lista en la opción "Parámetros de inicio" (en las versiones más recientes, usted puede ir directamente a la pestaña "Parámetros de inicio", escribir "-m" y hacer clic en Agregar, sin preocuparse por la sintaxis, el punto y coma o cualquier otra cosa).
  4. Haga clic en el botón "Aceptar" y reinicie la instancia de SQL Server
  5. Una vez que la instancia de SQL Server se inicia en modo de usuario único, la cuenta de administrador de Windows puede conectarse a SQL Server mediante la utilidad sqlcmd mediante la autenticación de Windows. Puede usar comandos de Transact-SQL como "sp_addsrvrolemember" para agregar un inicio de sesión existente (o uno recién creado) a la función del servidor sysadmin.

El siguiente ejemplo agrega la cuenta "Buck" en el dominio "CONTOSO" a la función sysadmin:

EXEC sp_addsrvrolemember 'CONTOSO\Buck', 'sysadmin';

Una vez que se haya recuperado el acceso del administrador del sistema, elimine el "; -m" de los parámetros de inicio con Configuration Manager y reinicie la instancia de SQL Server una vez más.

NOTA: asegúrese de que no haya espacio entre ";" y "-m", el analizador de parámetros de registro es sensible a tales errores tipográficos. Debería ver una entrada en el archivo ERRORLOG de SQL Server que dice "SQL Server se inició en modo de usuario único".


Recursos adicionales:

En última instancia, siempre puede copiar los archivos de la base de datos a otra instancia, o incluso reinstalar SQL Server (agregando una cuenta local como sysadmin durante ese proceso).

Solucionar problemas de SQL
fuente
9

Lo que haga dependerá de su versión de SQL Server, así como de si puede darse el lujo de quitar el servicio de SQL Server para establecer nuevas credenciales. Los primeros dos métodos aquí no requieren reiniciar la instancia:


Para instancias de SQL Server 2005, 2008 y 2008 R2

Puede conectarse usando la NT AUTHORITY\SYSTEMcuenta (u otros métodos de puerta trasera). Hay algunos detalles en algunas de las respuestas aquí:

También tengo un consejo sobre MSSQLTips.com que aborda este problema:

Básicamente, descarga PSExec de Microsoft, luego lo usa para iniciar Management Studio una vez que lo tiene instalado:

PsExec -s -i "C:\...\Ssms.exe"

Esto se conectará como NT AUTHORITY\SYSTEMy le permitirá hacer cosas en Object Explorer, como:

  • Cambie la instancia a SQL Server y al modo de autenticación de Windows : haga clic con el botón derecho en el nombre del servidor, presione propiedades y cambie el botón de opción si actualmente está configurado solo en Windows:

    ingrese la descripción de la imagen aquí

  • Establezca la contraseña para la sacuenta : expanda Seguridad, expanda Inicios de sesión, haga clic con el botón derecho y presione saPropiedades, y en el cuadro de diálogo resultante habrá dos campos de ingreso de contraseña:

    ingrese la descripción de la imagen aquí

  • Agregue su propio inicio de sesión comosysadmin : haga clic con el botón derecho en Inicios de sesión, Nuevo inicio de sesión ... ingrese su nombre de inicio de sesión (en el formulario DOMAIN\username), luego vaya a la pestaña Roles del servidor y marque la sysadmincasilla y haga clic en Aceptar:

    ingrese la descripción de la imagen aquí

  • (o, si su inicio de sesión ya está en la lista, haga clic con el botón derecho en Propiedades y asegúrese de que sysadminesté marcado en Roles del servidor)


Para SQL Server 2012 y las instancias más recientes

A partir de SQL Server 2012, NT Authority\SYSTEMya no se le otorgaron derechos a SQL Server de forma predeterminada. Así que Argenis Fernández ha detallado otra forma de hacerlo en estas versiones más nuevas :

  1. Si el servicio SQL VSS Writer se está ejecutando, deténgalo y suspenda todos los planes de mantenimiento o software de respaldo de terceros que puedan depender de él.
  2. Abra regedit.exey cambie el valor de HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\SQLWriter\ImagePathpara apuntar SQLCMD.exe, que va a estar adentro C:\Program Files (x86)\Microsoft SQL Server\Client SDK\ODBC\**<...110|120|130|140...>**\Tools\Binn. Después de editar, el valor del registro debería ser similar al siguiente (perdón por el desplazamiento):

    "C:Program Files (x86)\Microsoft SQL Server\Client SDK\ODBC\130\Tools\Binn\SQLCMD.exe" -S .\instancename -E -Q "ALTER ROLE sysadmin ADD MEMBER [YourDomain\YourUserName];"
  3. Intente iniciar el servicio SQL VSS Writer nuevamente (obtendrá un error; está bien).

  4. Ahora debería poder conectarse como sysadminusando YourDomain\YourUserName. Por lo tanto, detenga el servicio SQL VSS Writer, repare el registro y reinicie el servicio (si necesita que se esté ejecutando, o si se estaba ejecutando antes de comenzar esto).

He pasado por esto con mucho más detalle en un segundo consejo:

Sin embargo, cuando escribí esa sugerencia, utilicé un enfoque más engorroso de hacer una copia SQLCMD.exey reemplazarla sqlwriter.exe, mucho más fácil señalar el servicio SQLCMD.exedirectamente.


Si puede permitirse quitar el servicio de SQL Server

Hay una ruta oficial de Microsoft que requiere reiniciar la instancia en modo de usuario único:

También hay una función en dbatools.io , una solución de Powershell para administrar SQL Server, llamada Reset-DbaAdmin:


La seguridad no es el problema principal aquí

Veo a muchas personas que piden a Microsoft que "repare" estas llamadas "vulnerabilidades". Estos son enfoques válidos para recuperar el acceso a una instancia de SQL Server que usted posee legítimamente. Todos requieren privilegios elevados en el host físico donde reside SQL Server; como le he dicho a varias personas, si no desea que los desarrolladores jueguen con las instalaciones de SQL Server, no los convierta en administradores.

Aaron Bertrand
fuente
¿este método me permitirá habilitar también la cuenta SA? Estoy atrapado en una posición en la que mi cuenta SA está deshabilitada y tengo un grupo AD con el rol Público. Además, su método en la lista, ¿podré realizar estos pasos sin eliminar la instancia? Pregunto porque mi servidor está en un entorno de producción ahora.
Sean Perkins
1
@Sean sí, debería poder volver a habilitar sa, y / o crear otra cuenta de autenticación SQL, o agregar su usuario AD (¡no grupo!) Específicamente a un rol más elevado. Ninguno de estos requerirá reiniciar SQL Server (el único caso en el que sería necesario es cambiar entre autenticación mixta y solo Windows).
Aaron Bertrand
Recibo el siguiente error cuando intento realizar el proceso delineado. Me aseguré de tomar una captura de pantalla de las únicas cuentas enumeradas también. ¿Hubo algún cambio en algún momento en SQL 2012 que no permita este método? Mi versión actual es 11.0.3128 . Además, no importa qué tipo de cambio realice, obtendré alguna variación de un error que indica que no tengo permisos. Una última cosa, dudo que esto haga la diferencia, ¡pero abrí PowerShell con derechos de administrador, ejecuté cmd.exe, luego psexec -i -s "C: \ ...... smss.exe"! [Error de creación de cuenta] ( i.stack.imgur.com/ITOja.p
Sean Perkins
La imagen adjunta no muestra nada ahora, pero tenía "SA" y "NT AUTHORITY \ SYSTEM" como las únicas cuentas enumeradas. El mensaje de error que recibí fue "El usuario no tiene permiso para realizar esta acción. (Microsoft SQL Server, Error: 15247)"
Sean Perkins
@Sean PowerShell? PSExec no tiene nada que ver con PowerShell. ¿Eres un administrador local en la máquina? ¿Estás seguro?
Aaron Bertrand