Hinzufügen von sysadmin zum Benutzer in SQL Server 2008, wenn keine sysadmin-Konten vorhanden sind

25

Ich habe eine SQL Server 2008-Instanz ausgeführt. Leider habe ich beim Testen die Sysadmin-Rechte für mein Login abgewählt und kann sie jetzt nicht lesen (weil ich keine Sysadmin-Rechte habe).

Es gibt keine anderen Sysadmin-Konten für die Instanz außer SA.

Ich war nur für die Windows-Authentifizierung eingerichtet, also habe ich den LoginMode in der Registrierung auf 2 gehackt, damit ich mich mit SQL-Authentifizierung als SA anmelden konnte. Dies setzt den Anmeldemodus in der Tat auf Gemischt. Der SA-Benutzer ist jedoch standardmäßig deaktiviert und kann nicht erneut aktiviert werden, da ich keine Sysadmin-Rechte habe.

Wie aktiviere ich die SA-Anmeldung, damit ich den Sysadmin meinem normalen Konto zuweisen kann? Gibt es auch dafür eine Registrierungseinstellung oder ist sie in der master-Datenbank gespeichert?


quelle

Antworten:

11

Auch für die am häufigsten verwendete Verbindungsoption für Administratoren ( DAC ), die nur als lokale Verbindung verwendet werden kann und das Rückgängigmachen aller Arten von Fehlern ermöglicht, sind noch Anmeldeinformationen erforderlich. Ich glaube nicht, dass es einen offiziellen Weg gibt, dies zu tun.

Die schnellste Möglichkeit, dieses System wiederherzustellen, besteht darin, SQL Server herunterzufahren, die Benutzerdatenbankdateien an einen sicheren Ort zu kopieren, sie zu deinstallieren, neu zu installieren (wobei Sie sicherstellen müssen, dass das Service Pack mindestens auf dem Stand ist, auf dem Sie sich zuvor befunden haben), die Dateien zurück zu kopieren und sie anzuhängen die Datenbanken. (Ich bin mir nicht sicher, ob das Heraus- / Zurückkopieren erforderlich ist, aber nur um sicher zu gehen ...).

Sie müssen weiterhin Objekte auf Serverebene (z. B. Anmeldungen) manuell wiederherstellen.

Damien_The_Unbeliever
quelle
1
Danke - Ich habe die Instanz deinstalliert und neu installiert. Hängt die Datenbank wieder an und alles ist wieder in Ordnung. Ein paar Dinge, auf die man achten sollte, waren das Verwenden des vollständigen Datenbankmodul-Installationsprogramms zum erneuten Installieren der Instanz (ich hatte nur ein Installationsprogramm für Verwaltungstools, das mich für eine Weile stutzte). Außerdem müssen Sie die Berechtigungen für die Datenbankdateien ändern, damit andernfalls beim Anhängen eine Fehlermeldung angezeigt wird (Fehler 5). Davon abgesehen hat alles gut funktioniert.
Ich habe auch eine Kopie der Datenbankdateien erstellt, aber es stellte sich heraus, dass dies nicht erforderlich war. Bei der Deinstallation wurden die Datenbanken nicht entfernt. Ich würde jedoch weiterhin empfehlen, die Datenbankdateien zu kopieren, nur für den Fall, dass dieses Verhalten in verschiedenen Versionen von SQL Server unterschiedlich ist.
27

Es gibt eine tatsächliche Hintertür zu SQL Server, für die kein Neustart und / oder Neustart im Einzelbenutzermodus erforderlich ist. Ich habe dies auf Systemen gemacht, auf denen ich keinen Zugriff hatte, aber Dinge überprüfen musste.

Laden Sie die PSexec-Tools hier herunter . psexec -i -s SSMS.exeStellen Sie dies auf den Server und führen Sie dann an einer Eingabeaufforderung den folgenden Befehl aus :, oder sqlwb.exe

Dadurch wird SSMS als Systemkonto geöffnet, das über Sysadmin-Zugriff auf die Instanz von SQL Server verfügt. Dies geschieht während der Installation von SQL Server. Ich habe jedoch gehört, dass dies bei SQL 2012 nicht der Fall sein wird.

Shawn Melton
quelle
1
Nein, es funktioniert nicht in SQL Server 2012 RTM und höher. Um einzusteigen, müssen Sie den SQL Server-Dienst als Mitglied der lokalen Administratorgruppe des Servers im Einzelbenutzermodus neu starten.
Shawn Melton
15

SQL Server 2008 unterscheidet sich von SQL Server 2005 darin, dass lokale Administratoren die feste Serverrolle sysadmin nicht mehr erben.

Bei der Installation von SQL Server 2008 werden Sie aufgefordert, ein Konto anzugeben, das der Sysadmin-Rolle hinzugefügt werden soll. Wenn Sie die Box jedoch nach der Installation der Software erhalten, hilft Ihnen dies nicht viel.

Glücklicherweise hat Microsoft die 2005-Funktionalität beibehalten, wenn SQL Server im Einzelbenutzermodus ausgeführt wird. Folgendes machst du:

  • Melden Sie sich als lokaler Windows-Administrator am Server an
  • Stoppen Sie den SQL Server
  • Geben Sie an der Eingabeaufforderung in das Verzeichnis sqlservr.exe den Befehl sqlservr.exe -m ein und drücken Sie die Eingabetaste. Dadurch wird SQL Server im Einzelbenutzermodus gestartet
  • Öffnen Sie SQL Server EM und fügen Sie Ihr Konto der festen Serverrolle sysadmin hinzu
  • Beenden Sie SQL Server, starten Sie neu (in der Befehlszeile oder in SQL Server EM)

quelle
Diese Lösung funktioniert wunderbar. Ich wollte nur hinzufügen, dass Sie nicht als lokaler Administrator angemeldet sein müssen, um sqlservr.exe im Einzelbenutzermodus auszuführen, nur wenn Sie sich über SSMS oder osql oder was auch immer anmelden müssen.
AbeyMarquez
5

Dies ist eine großartige Frage, und jemand wird in dieser Situation sein und muss gerettet werden.

Der gesamte Kredit geht an Codykonior

Wenn Sie ein Windows-Administrator auf dem Server sind , können Sie ein PowerShell v2-Skript verwenden, um Zugriff ohne Ausfall und ohne bekanntes Risiko zu erhalten. Dazu wird das Anmeldetoken des SQL Server-Diensts dupliziert, selbst wenn es unter einem AD-Dienstkonto, einem virtuellen Konto oder mit einer SID pro Dienst ausgeführt wird

Das folgende Skript iteriert die SQL Server-Dienste und fügt Sie der Sysadmin-Rolle hinzu, wo immer Sie fehlen:

#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
quelle
2

Sie können weiterhin eine Anmeldung mit "sysadmin" -Zugriff erstellen. Dank Principal Data Engineer von Microsoft (Saleem Hakani) wurde der folgende SQL Server Tips & Trick verfasst.

Ich fand dies, als ich in einem ähnlichen Zustand feststeckte, als ich das sa-Passwort für meinen Testcomputer vergaß.

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

Hier sind die Schritte, die Sie ausführen müssen:

  1. Starten Sie die SQL Server-Instanz im Einzelbenutzermodus (oder mit einer minimalen Konfiguration, die SQL Server auch in den Einzelbenutzermodus versetzt).

Geben Sie an der Eingabeaufforderung Folgendes ein: SQLServr.Exe –m (oder SQLServr.exe –f)

Hinweis: Befindet sich der Ordner "Binn" nicht in Ihrem Umgebungspfad, müssen Sie zum Ordner "Binn" navigieren.

(Normalerweise befindet sich der Ordner Binn unter: C: \ Programme \ Microsoft SQL Server \ MSSQL10.MSSQLSERVER \ MSSQL \ Binn)

  1. Nachdem der SQL Server-Dienst im Einzelbenutzermodus oder mit minimaler Konfiguration gestartet wurde, können Sie jetzt über die Eingabeaufforderung den Befehl SQLCMD verwenden, um eine Verbindung zu SQL Server herzustellen, und die folgenden Vorgänge ausführen, um sich wieder als Administrator in der SQL Server-Instanz hinzuzufügen.

SQLCMD –S

Sie werden nun als Administrator bei SQL Server angemeldet.

  1. Wenn Sie mit SQLCMD bei SQL Server angemeldet sind, geben Sie die folgenden Befehle ein, um ein neues Konto zu erstellen oder der SYSADMIN-Serverrolle eine vorhandene Anmeldung hinzuzufügen.

So erstellen Sie eine neue Anmeldung und fügen diese Anmeldung der SYSADMIN-Serverrolle hinzu:

1> LOGIN ERSTELLEN '' mit PASSWORD = ''

2> gehen

1> SP_ADDSRVROLEMEMBER '', 'SYSADMIN'

2> gehen

Führen Sie die folgenden Schritte aus, um der SYSADMIN-Serverrolle eine vorhandene Anmeldung hinzuzufügen:

1> SP_ADDSRVROLEMEMBER '', 'SYSADMIN'

Mit der obigen Operation werden SYSADMIN-Berechtigungen für ein vorhandenes Login oder ein neues Login erteilt.

  1. Sobald die obigen Schritte erfolgreich ausgeführt wurden, besteht der nächste Schritt darin, die SQL Server-Dienste mit regulären Startoptionen zu beenden und zu starten. (Diesmal brauchen Sie weder –f noch –m)
Ramakant Dadhichi
quelle
0

Sie können Folgendes tun:
1) Erstellen Sie ein Windows-Benutzerkonto mit Administratorrechten.
2) Melden Sie sich in Windows mit dem neuen Administratorkonto an.
3) Öffnen Sie das SQL Server Mangement Studio mithilfe der Windows-Authentifizierung.
4) Sie sind jetzt als Sysadmin bei SQL Server angemeldet Sie können neue Konten erstellen oder den sa-Benutzer aktualisieren

Juan Carlos Velez
quelle
2
Versuchte dies und es hat nicht funktioniert. Ich habe auf diesem Computer ein neues Administrator-Anmeldekonto erstellt. SQL Server verwendet die Rollen BUILTIN \ Users (die nicht sysadmin enthalten), um mich anzumelden. Daher kann ich immer noch keine Änderungen am Admin-Typ vornehmen.