Cómo agregar sysadmin al usuario en SQL Server 2008 cuando no existen cuentas de sysadmin

25

Tengo una instancia de SQL Server 2008 en ejecución. Desafortunadamente, durante las pruebas, deseleccioné los derechos de administrador del sistema para mi inicio de sesión y ahora no puedo leerlo (porque no tengo derechos de administrador del sistema).

No hay otras cuentas de administrador del sistema para la instancia, excepto SA.

Estaba configurado solo para la autenticación de Windows, así que pirateé el modo de inicio de sesión en el registro a 2 para poder iniciar sesión como SA usando la autenticación SQL. De hecho, esto establece el modo de inicio de sesión en Mixto, sin embargo, el usuario SA está deshabilitado de forma predeterminada y no puedo volver a habilitarlo porque no tengo derechos de administrador de sistemas.

¿Cómo habilito el inicio de sesión de SA para poder ingresar y reasignar el administrador del sistema a mi cuenta normal? ¿Existe también una configuración de registro para esto o está almacenado en la base de datos maestra?


fuente

Respuestas:

11

Incluso la opción de conexión de tipo más súper-administradora Conexión de administrador dedicada ( DAC ), que solo se puede usar como conexión local y le permite deshacer todo tipo de maldad, aún requiere credenciales de inicio de sesión. Así que no creo que haya una forma oficial de hacer esto.

La forma más rápida de resucitar este sistema puede ser cerrar SQL Server, copiar los archivos de la base de datos del usuario en un lugar seguro, desinstalar, reinstalar (asegurándose de mantener el paquete de servicio al menos en el nivel en que estaba anteriormente), copiar los archivos y adjuntarlos las bases de datos (No estoy seguro de que sea necesario copiar / volver, pero solo para estar seguro ...).

Aún necesitará recuperar manualmente los objetos a nivel del servidor (por ejemplo, inicios de sesión)

Damien_The_Unbeliever
fuente
1
Gracias. Desinstalé la instancia y la reinstalé. Vuelve a conectar la base de datos y todo vuelve a estar bien. Un par de cosas a tener en cuenta fueron usar el instalador completo del motor de base de datos para reinstalar la instancia (tuve un instalador de herramientas de administración que me dejó perplejo por un tiempo). También debe cambiar los permisos en los archivos de la base de datos, de lo contrario obtendrá un error al adjuntar (error 5). Aparte de eso, todo funcionó bien.
Además, hice una copia de los archivos de la base de datos, pero resultó que esto no era necesario. La desinstalación no eliminó las bases de datos. Sin embargo, aún recomendaría copiar los archivos de la base de datos en caso de que este comportamiento sea diferente en diferentes versiones del servidor SQL.
27

Existe una puerta trasera real en SQL Server que no requiere reiniciar y / o reiniciar nada en modo de usuario único. Lo he hecho en sistemas donde no tenía acceso pero necesitaba verificar cosas.

Descargue las herramientas de PSexec desde aquí . Coloque esto en el servidor y luego, en el símbolo del sistema, ejecute este comando: psexec -i -s SSMS.exeo sqlwb.exe

Esto abrirá SSMS como la cuenta del sistema que tiene acceso de administrador del sistema a la instancia de SQL Server. Esto se realiza durante la instalación de SQL Server, sin embargo, he oído que esto no será así con SQL 2012.

Shawn Melton
fuente
1
No, no funciona en SQL Server 2012 RTM y superior. Para ingresar, debe reiniciar el servicio SQL Server en modo de usuario único como miembro del grupo de administración local del servidor.
Shawn Melton el
15

SQL Server 2008 es diferente de SQL Server 2005, ya que los administradores locales ya no heredan la función fija de servidor sysadmin.

Cuando se instala SQL Server 2008, le solicita que designe una cuenta que se agregará a la función sysadmin. Sin embargo, si recibe la caja después de instalar el software, esto no le ayudará mucho.

Afortunadamente, Microsoft conservó la funcionalidad de 2005 cuando SQL Server se ejecuta en modo de usuario único. Esto es lo que haces:

  • iniciar sesión en el servidor como administrador local de Windows
  • detener el servidor sql
  • en el símbolo del sistema, en el directorio donde reside sqlservr.exe, escriba sqlservr.exe -m y presione Intro; esto iniciará SQL Server en modo de usuario único
  • abra SQL Server EM y agregue su cuenta a la función fija de servidor sysadmin
  • detener el servidor sql, reiniciar (en la línea de comandos o en SQL Server EM

fuente
Esta solución funciona muy bien. Solo quería agregar que no tiene que iniciar sesión como administrador local para ejecutar sqlservr.exe en modo de usuario único, justo cuando necesita iniciar sesión a través de SSMS u osql o lo que sea.
AbeyMarquez
5

Esta es una gran pregunta y alguien estará en esta situación y necesita un rescate.

Todo el crédito va a codykonior

Si usted es un administrador de Windows en el servidor , puede usar un script de PowerShell v2 para obtener acceso sin interrupciones y sin riesgos conocidos. Lo hace duplicando el token de inicio de sesión del servicio de SQL Server incluso si se ejecuta bajo una cuenta de servicio AD, cuenta virtual o protegido con un SID por servicio

El siguiente script iterará los servicios de SQL Server y lo agregará a la función sysadmin dondequiera que se pierda:

#GITHUB Link : https://github.com/codykonior/HackSql
$userName = [System.Security.Principal.WindowsIdentity]::GetCurrent().Name

$services = Get-Service | Where { ($_.Name -eq 'MSSQLSERVER' -or $_.Name -like 'MSSQL$*') -and $_.Status -eq "Running" }
foreach ($service in $services) {
    if ($service.Name -eq "MSSQLSERVER") {
        $sqlName = ".\"
    } else {
        $sqlName = ".\$($service.Name.Substring(6))"
    }

    Write-Host "Attempting $sqlName"
    $serviceProcess = Get-WmiObject -Class Win32_Service -Filter "Name = '$($service.Name)'"

    Invoke-TokenManipulation -ProcessId $serviceProcess.ProcessID -ImpersonateUser | Out-Null
    $impersonatedUser = [System.Security.Principal.WindowsIdentity]::GetCurrent().Name
    Write-Host "Service $($service.Name) on PID $($serviceProcess.ProcessID) will connect to $sqlName as $impersonatedUser"

    $sqlConnection = New-Object System.Data.SqlClient.SqlConnection("Data Source=$sqlName;Trusted_Connection=True")
    $sqlConnection.Open()
    $sqlCommand = New-Object System.Data.SqlClient.SqlCommand("If Not Exists (Select Top 1 0 From sys.server_principals Where name = '$userName')
Begin
    Create Login [$userName] From Windows
End

If Not Exists (Select Top 1 0 From master.sys.server_principals sp Join master.sys.server_role_members srp On sp.principal_id = srp.member_principal_id Join master.sys.server_principals spr On srp.role_principal_id = spr.principal_id Where sp.name = '$userName' And spr.name = 'sysadmin')
Begin
    Exec sp_addsrvrolemember '$userName', 'sysadmin'
End", $sqlConnection)
    $sqlCommand.ExecuteNonQuery() | Out-Null
    $sqlConnection.Close()
    Invoke-TokenManipulation -RevToSelf | Out-Null
}
Kin Shah
fuente
2

Todavía puede crear un inicio de sesión con acceso 'sysadmin'. Gracias al ingeniero de datos principal de Microsoft (Saleem Hakani) fue el autor de los siguientes consejos y trucos de SQL Server.

Encontré esto mientras estaba atascado en un estado similar cuando olvidé la contraseña sa de mi máquina de prueba.

Enlace: https://blogs.technet.microsoft.com/sqlman/2011/06/14/tips-tricks-you-have-lost-access-to-sql-server-now-what/

Estos son los pasos que deberá realizar:

  1. Inicie la instancia de SQL Server utilizando el modo de usuario único (o una configuración mínima que también pondrá a SQL Server en modo de usuario único)

Desde el símbolo del sistema, escriba: SQLServr.Exe –m (o SQLServr.exe –f)

Nota: Si la carpeta Binn no está en su ruta ambiental, deberá navegar a la carpeta Binn.

(Por lo general, la carpeta Binn se encuentra en: C: \ Archivos de programa \ Microsoft SQL Server \ MSSQL10.MSSQLSERVER \ MSSQL \ Binn)

  1. Una vez que el servicio SQL Server se ha iniciado en modo de usuario único o con una configuración mínima, ahora puede usar el comando SQLCMD desde el símbolo del sistema para conectarse a SQL Server y realizar las siguientes operaciones para agregarse nuevamente como administrador en la instancia de SQL Server.

SQLCMD –S

Ahora iniciará sesión en SQL Server como administrador.

  1. Una vez que haya iniciado sesión en SQL Server con SQLCMD, emita los siguientes comandos para crear una nueva cuenta o agregar un inicio de sesión existente a la función del servidor SYSADMIN.

Para crear un nuevo inicio de sesión y agregar ese inicio de sesión a la función del servidor SYSADMIN:

1> CREAR INICIO DE SESIÓN '' con CONTRASEÑA = ''

2> ir

1> SP_ADDSRVROLEMEMBER '', 'SYSADMIN'

2> ir

Para agregar un inicio de sesión existente a la función del servidor SYSADMIN, ejecute lo siguiente:

1> SP_ADDSRVROLEMEMBER '', 'SYSADMIN'

La operación anterior se encargará de otorgar privilegios SYSADMIN a un inicio de sesión existente o a un nuevo inicio de sesión.

  1. Una vez que los pasos anteriores se realizan con éxito, el siguiente paso es detener e iniciar los servicios de SQL Server utilizando las opciones de inicio regulares. (Esta vez no necesitará –f – –m)
Ramakant Dadhichi
fuente
0

Puede hacer lo siguiente:
1) Cree una cuenta de usuario de Windows con privilegios administrativos
2) Inicie sesión en Windows con la nueva cuenta administrativa
3) Abra Sql Server Mangement Studio usando la autenticación de Windows
4) Ahora ha iniciado sesión en SQL Server como sysadmin, así que puede crear nuevas cuentas o actualizar el usuario sa

Juan carlos velez
fuente
2
Intenté esto y no funcionó. Creé una nueva cuenta de inicio de sesión de administrador en esa máquina. El servidor SQL usa los roles BUILTIN \ Users (que no incluyen sysadmin) para iniciar sesión. Por lo tanto, todavía no puedo hacer cambios de tipo de administrador.