Come aggiungere sysadmin all'utente in SQL Server 2008 quando non esistono account sysadmin


25

Ho un'istanza di SQL Server 2008 in esecuzione. Sfortunatamente durante il test ho deselezionato i diritti di amministratore di sistema per il mio login e ora non riesco a leggerlo (perché non ho i diritti di amministratore di sistema).

Non ci sono altri account di amministratore di sistema per l'istanza tranne SA.

Sono stato impostato solo per l'autenticazione di Windows, quindi ho hackerato la modalità di accesso nel registro su 2 in modo da poter accedere come SA utilizzando l'autenticazione Sql. Questo in effetti imposta la modalità di accesso su Misto, tuttavia l'utente SA è disabilitato di default e non posso riattivarlo perché non ho i diritti di amministratore di sistema.

Come abilito il login SA in modo da poter accedere e riassegnare il sysadmin al mio account normale? Esiste anche un'impostazione di registro per questo o è memorizzata nel database principale?

Risposte:


11

Anche il tipo di connessione più uber-admin Dedicated Administrator Connection ( DAC ), che può essere utilizzato solo come connessione locale e consente di annullare tutti i tipi di malvagità, richiede ancora credenziali di accesso. Quindi non penso che ci sia un modo ufficiale per farlo.

Il modo più rapido per resuscitare questo sistema potrebbe essere quello di chiudere SQL Server, copiare i file del database utente in un posto sicuro, disinstallarlo, reinstallarlo (assicurandosi di service pack fino almeno al livello precedente), copiare nuovamente i file e allegarli i database. (Non sono sicuro che sia necessario copiare / copiare, ma solo per sicurezza ...).

Sarà comunque necessario ripristinare manualmente gli oggetti a livello di server (ad es. Accessi)


1
Grazie: ho disinstallato l'istanza e reinstallato. Riattaccato il database e tutto va di nuovo bene. Un paio di cose a cui fare attenzione erano l'utilizzo del programma di installazione completo del motore di database per reinstallare l'istanza (avevo un programma di installazione degli strumenti di gestione che mi ha bloccato per un po '). Inoltre è necessario modificare le autorizzazioni per i file del database, altrimenti si verifica un errore durante il collegamento (errore 5). A parte questo, tutto ha funzionato bene.

Inoltre, ho fatto una copia dei file del database, ma alla fine non è stato necessario. La disinstallazione non ha rimosso i database. Tuttavia, consiglierei comunque di copiare i file del database nel caso in cui questo comportamento sia diverso su diverse versioni di SQL Server.

27

Esiste una backdoor effettiva in SQL Server che non richiede il riavvio e / o il riavvio di nulla in modalità utente singolo. L'ho fatto su sistemi in cui non avevo accesso ma dovevo controllare le cose.

Scarica gli strumenti PSexec da qui . Posizionalo sul server e quindi al prompt dei comandi esegui questo comando: psexec -i -s SSMS.exeo sqlwb.exe

Ciò aprirà SSMS come account di sistema con accesso amministratore di sistema all'istanza di SQL Server. Questo viene fatto durante l'installazione di SQL Server, tuttavia ho sentito che non sarà così con SQL 2012.


1
No, non funziona in SQL Server 2012 RTM e versioni successive. Per accedere, è necessario riavviare il servizio SQL Server in modalità utente singolo come membro del gruppo admin locale del server.
Shawn Melton,

15

SQL Server 2008 è diverso da SQL Server 2005, in quanto gli amministratori locali non ereditano più il ruolo predefinito del server sysadmin.

Quando viene installato SQL Server 2008, viene richiesto di designare un account da aggiungere al ruolo sysadmin. Se ricevi la confezione dopo l'installazione del software, tuttavia, questo non ti aiuta molto.

Fortunatamente, Microsoft ha conservato la funzionalità 2005 quando SQL Server è in esecuzione in modalità utente singolo. Ecco cosa fai:

  • accedere al server come amministratore locale di Windows
  • fermare il server sql
  • al prompt dei comandi, nella directory in cui risiede sqlservr.exe, digitare sqlservr.exe -m e premere Invio - questo avvierà SQL Server in modalità utente singolo
  • aprire SQL Server EM e aggiungere l'account al ruolo predefinito del server sysadmin
  • arrestare il server sql, riavviare (dalla riga di comando o in SQL Server EM

Questa soluzione funziona magnificamente. Volevo solo aggiungere che non è necessario accedere come amministratore locale per eseguire sqlservr.exe in modalità utente singolo, proprio quando è necessario accedere tramite SSMS o osql o altro.
AbeyMarquez,

5

Questa è una grande domanda e qualcuno sarà in questa situazione e ha bisogno di un salvataggio da essa.

Tutto il merito va a codykonior

Se sei un amministratore di Windows sul server , puoi utilizzare uno script di PowerShell v2 per ottenere l'accesso senza interruzioni e senza rischi noti. Lo fa duplicando il token di accesso del servizio SQL Server anche se è in esecuzione con un account di servizio AD, un account virtuale o protetto con un SID per servizio

Lo script di seguito ripeterà i servizi di SQL Server e ti aggiungerà al ruolo sysadmin ovunque ti manchi:

#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
}

2

È ancora possibile creare un accesso con accesso 'sysadmin'. Grazie a Principal Data Engineer presso Microsoft (Saleem Hakani) sono stati creati i seguenti suggerimenti e trucchi per SQL Server.

L'ho trovato mentre ero bloccato in uno stato simile quando ho dimenticato la password sa per la mia macchina di prova.

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

Ecco i passaggi che dovrai eseguire:

  1. Avviare l'istanza di SQL Server utilizzando la modalità utente singolo (o una configurazione minima che metterà anche SQL Server in modalità utente singolo)

Dal prompt dei comandi digitare: SQLServr.Exe –m (o SQLServr.exe –f)

Nota: se la cartella Binn non si trova nel tuo percorso ambientale, dovrai accedere alla cartella Binn.

(Di solito la cartella Binn si trova in: C: \ Programmi \ Microsoft SQL Server \ MSSQL10.MSSQLSERVER \ MSSQL \ Binn)

  1. Una volta avviato il servizio SQL Server in modalità utente singolo o con una configurazione minima, è ora possibile utilizzare il comando SQLCMD dal prompt dei comandi per connettersi a SQL Server ed eseguire le seguenti operazioni per aggiungersi nuovamente come amministratore sull'istanza di SQL Server.

SQLCMD –S

Ora si accederà a SQL Server come amministratore.

  1. Dopo aver effettuato l'accesso a SQL Server tramite SQLCMD, immettere i seguenti comandi per creare un nuovo account o aggiungere un accesso esistente al ruolo del server SYSADMIN.

Per creare un nuovo accesso e aggiungerlo al ruolo del server SYSADMIN:

1> CREA LOGIN '' con PASSWORD = ''

2> vai

1> SP_ADDSRVROLEMEMBER '', 'SYSADMIN'

2> go

Per aggiungere un accesso esistente al ruolo del server SYSADMIN, eseguire quanto segue:

1> SP_ADDSRVROLEMEMBER '', 'SYSADMIN'

L'operazione sopra descritta si occuperà di concedere i privilegi SYSADMIN a un accesso esistente o a un nuovo accesso.

  1. Dopo aver eseguito correttamente i passaggi precedenti, il passaggio successivo è arrestare e avviare i servizi di SQL Server utilizzando le normali opzioni di avvio. (Questa volta non avrai bisogno di –f o –m)

0

È possibile effettuare le seguenti operazioni:
1) Creare un account utente di Windows con privilegi di amministratore
2) Accesso a Windows con il nuovo account amministrativo
3) Aprire Sql Server Mangement Studio utilizzando l'autenticazione di Windows
4) Ora si accede a SQL Server come amministratore di sistema, quindi puoi creare nuovi account o aggiornare l'utente sa


2
Ho provato questo e non ha funzionato. Ho creato un nuovo account di accesso dell'amministratore su quella macchina. Il server SQL utilizza i ruoli BUILTIN \ Users (che non includono sysadmin) per accedere. Pertanto non riesco ancora a modificare il tipo di amministratore.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.