Wie setzt man das sa Passwort zurück?

22

Ich habe das sa-Kennwort auf einem Computer verloren. Wenn ich mich direkt über ein Konto in der Administratorgruppe am Computer anmelde, kann ich mich mit SQL Server Management Studio nicht mit Windows-Authentifizierung anmelden.

Mein Plan war, mich einfach beim Server anzumelden, eine Verbindung über die Windows-Authentifizierung herzustellen und sa zurückzusetzen, um ein neues Kennwort zu verwenden. Da ich keine Verbindung über die Windows-Authentifizierung herstellen kann, funktioniert dies nicht.

Wie kann ich sonst das sa-Passwort zurücksetzen?

Daniel Williams
quelle
Ich habe die Antwort gefunden. Ich konnte mich nicht als Domain-Administrator anmelden, aber die Verwendung des lokalen Administrators hat problemlos funktioniert.
Daniel Williams
Meinst du damit, dass ein Mitglied der Administratorengruppe des lokalen Computers dies konnte? Welche konkreten Schritte haben Sie für die Nachwelt unternommen?
Campbell
Das Konto war das lokale Administratorkonto. Dieses Konto ist Teil der lokalen Adminsitrators-Gruppe, ebenso wie mein Domain-Konto. Aber nur das lokale Administratorkonto konnte die Windows-Authentifizierung verwenden, um sich bei SQL Server anzumelden. Ich hoffe das hilft.
Daniel Williams
Wenn Sie die Instanz im Einzelbenutzermodus starten, kann auch jedes lokale Konto, das Teil der lokalen Administratorgruppe ist, auf die Instanz zugreifen. Bearbeiten: Der Link @ user1419 weist darauf hin.
Shawn Melton

Antworten:

10

Sie können die im folgenden Link genannten Schritte ausführen, um das SA-Kennwort zurückzusetzen:

Schritte im Folgenden zusammengefasst:

  1. Öffnen Sie den SQL Server-Konfigurations-Manager über Startmenü> Programme> Microsoft SQL Server 20xx> Konfigurationstools>, die für die neueste Version von SQL Server relevant sind, die Sie installiert haben (verwenden Sie z. B. die Version 2012, wenn Sie 2005 und 2012 installiert haben). Noch kein Startmenü? Beginnen Sie auf dem Windows 8-Startbildschirm mit der Eingabe von SQL Server Con ..., bis es angezeigt wird.
  2. Beenden Sie die SQL Server-Instanz, die Sie wiederherstellen möchten, indem Sie mit der rechten Maustaste auf die Instanz in SQL Server Services klicken und "Beenden" auswählen.
  3. Klicken Sie mit der rechten Maustaste auf die gerade gestoppte Instanz, klicken Sie auf Eigenschaften und fügen Sie auf der Registerkarte "Erweitert" im Textfeld "Eigenschaften" in der Option "Startparameter" am Ende der Liste "; –m" hinzu (bei neueren Versionen auch Sie) Sie können direkt zur Registerkarte "Startparameter" wechseln, "-m" eingeben und auf "Hinzufügen" klicken, ohne sich Gedanken über die Syntax, das Semikolon oder etwas anderes zu machen.
  4. Klicken Sie auf die Schaltfläche "OK" und starten Sie die SQL Server-Instanz neu
  5. Nachdem die SQL Server-Instanz im Einzelbenutzermodus gestartet wurde, kann das Windows-Administratorkonto mithilfe des Dienstprogramms sqlcmd und der Windows-Authentifizierung eine Verbindung zu SQL Server herstellen. Sie können Transact-SQL-Befehle wie "sp_addsrvrolemember" verwenden, um der Sysadmin-Serverrolle eine vorhandene (oder eine neu erstellte) Anmeldung hinzuzufügen.

Im folgenden Beispiel wird der Sysadmin-Rolle das Konto "Buck" in der Domäne "CONTOSO" hinzugefügt:

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

Nachdem der Sysadmin-Zugriff wiederhergestellt wurde, entfernen Sie mithilfe des Konfigurations-Managers das "; -m" aus den Startparametern und starten Sie die SQL Server-Instanz erneut.

HINWEIS: Stellen Sie sicher, dass zwischen ";" und "-m" kein Leerzeichen steht. Der Registrierungsparameter-Parser reagiert empfindlich auf solche Tippfehler. In der SQL Server-ERRORLOG-Datei sollte ein Eintrag mit dem Titel "SQL Server wurde im Einzelbenutzermodus gestartet" angezeigt werden.


Zusätzliche Ressourcen:

Letztendlich können Sie die Datenbankdateien jederzeit in eine andere Instanz kopieren oder SQL Server neu installieren (dabei ein lokales Konto als Sysadmin hinzufügen).

Fehlerbehebung in SQL
quelle
9

Was Sie tun, hängt von Ihrer SQL Server-Version ab sowie davon, ob Sie es sich leisten können, den SQL Server-Dienst herunterzufahren, um neue Anmeldeinformationen einzurichten. Die ersten beiden Methoden erfordern keinen Neustart der Instanz:


Für SQL Server 2005-, 2008- und 2008 R2-Instanzen

Sie können über das NT AUTHORITY\SYSTEMKonto (oder andere Backdoor-Methoden) eine Verbindung herstellen. Einige Antworten enthalten einige Details:

Ich habe auch einen Tipp auf MSSQLTips.com , der dieses Problem behebt :

Im Wesentlichen laden Sie PSExec von Microsoft herunter und starten dann Management Studio, sobald Sie es installiert haben:

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

Dadurch wird die Verbindung hergestellt, NT AUTHORITY\SYSTEMund Sie können folgende Aufgaben im Objekt-Explorer ausführen:

  • Ändern Sie die Instanz in den SQL Server- und Windows-Authentifizierungsmodus. Klicken Sie mit der rechten Maustaste auf den Servernamen, klicken Sie auf Eigenschaften und ändern Sie das Optionsfeld, wenn derzeit nur Windows ausgewählt ist:

    Bildbeschreibung hier eingeben

  • Legen Sie das Kennwort für das saKonto fest - erweitern Sie Sicherheit, erweitern Sie Anmeldungen, klicken Sie mit der rechten Maustaste saund klicken Sie auf Eigenschaften. Im daraufhin angezeigten Dialogfeld werden zwei Kennworteingabefelder angezeigt:

    Bildbeschreibung hier eingeben

  • Fügen Sie Ihr eigenes Login hinzu alssysadmin - Klicken Sie mit der rechten Maustaste auf Logins, New Login ... Geben Sie Ihren Login-Namen (im Formular DOMAIN\username) ein, wechseln Sie zur Registerkarte Server Roles und aktivieren Sie das Kontrollkästchen sysadminund klicken Sie auf OK:

    Bildbeschreibung hier eingeben

  • (Wenn Ihr Login bereits aufgeführt ist, klicken Sie mit der rechten Maustaste auf Eigenschaften und vergewissern Sie sysadminsich, dass unter Serverrollen das Kontrollkästchen aktiviert ist.)


Für SQL Server 2012 und neuere Instanzen

Ab SQL Server 2012 wurden NT Authority\SYSTEMstandardmäßig keine Rechte mehr an SQL Server vergeben. Eine weitere Möglichkeit, dies in diesen neueren Versionen zu tun, wurde von Argenis Fernandez beschrieben :

  1. Wenn der SQL VSS Writer-Dienst ausgeführt wird, beenden Sie ihn und setzen Sie alle Wartungspläne oder Sicherungssoftware von Drittanbietern aus, die möglicherweise darauf angewiesen sind.
  2. Öffnen Sie regedit.exeund ändern Sie den Wert von HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\SQLWriter\ImagePath, um auf zu zeigen SQLCMD.exe, was in sein wird C:\Program Files (x86)\Microsoft SQL Server\Client SDK\ODBC\**<...110|120|130|140...>**\Tools\Binn. Nach der Bearbeitung sollte der Registrierungswert wie folgt aussehen (Entschuldigung für das Scrollen):

    "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. Versuchen Sie, den SQL VSS Writer-Dienst erneut zu starten (es wird eine Fehlermeldung angezeigt; das ist in Ordnung).

  4. Sie sollten nun in der Lage sein, eine Verbindung mit sysadminherzustellen YourDomain\YourUserName. Beenden Sie daher den SQL VSS Writer-Dienst, korrigieren Sie die Registrierung und starten Sie den Dienst neu (wenn er ausgeführt werden muss oder wenn er ausgeführt wurde, bevor Sie ihn gestartet haben).

Ich habe dies in einem zweiten Tipp ausführlicher erläutert:

Obwohl , wenn ich diesen Tipp habe ich verwendet , um einen umständlichen Ansatz zur Herstellung einer Kopie SQLCMD.exeund ersetzen sqlwriter.exe- viel einfacher, nur den Dienst verweist auf SQLCMD.exedirekt.


Wenn Sie es sich leisten können, den SQL Server-Dienst herunterzufahren

Es gibt einen offiziell unterstützten Pfad von Microsoft, für den ein Neustart der Instanz im Einzelbenutzermodus erforderlich ist:

In dbatools.io , einer Powershell-Lösung zum Verwalten von SQL Server, gibt es auch eine Funktion mit dem Namen Reset-DbaAdmin:


Sicherheit ist hier nicht das Hauptproblem

Ich sehe viele Leute, die Microsoft auffordern, diese sogenannten "Schwachstellen" zu "beheben". Dies sind gültige Methoden zum Wiederherstellen des Zugriffs auf eine Instanz von SQL Server, deren Eigentümer Sie zu Recht sind. Sie alle erfordern erhöhte Berechtigungen auf dem physischen Host, auf dem sich SQL Server befindet. Wenn Sie nicht möchten, dass Entwickler mit SQL Server-Installationen in Konflikt geraten, sollten Sie sie nicht zu Administratoren machen.

Aaron Bertrand
quelle
Kann ich mit dieser Methode auch das SA-Konto aktivieren? Ich stecke in einer Situation fest, in der mein SA-Konto deaktiviert ist und ich eine AD-Gruppe mit der Rolle "Öffentlich" habe. Kann ich diese Schritte ausführen, ohne die Instanz herunterzufahren? Ich frage, weil sich mein Server jetzt in einer Produktionsumgebung befindet.
Sean Perkins
1
@Sean Ja, Sie sollten in der Lage sein, sa wieder zu aktivieren und / oder ein anderes SQL-Auth-Konto zu erstellen oder Ihren AD-Benutzer (nicht die Gruppe!) Speziell einer höheren Rolle hinzuzufügen. Keiner dieser Vorgänge erfordert einen Neustart von SQL Server (der einzige Fall, in dem dies erforderlich wäre, ist der Wechsel zwischen gemischter Authentifizierung und nur Windows).
Aaron Bertrand
Ich erhalte die folgende Fehlermeldung, wenn ich versuche, den von Ihnen beschriebenen Vorgang durchzuführen. Ich habe darauf geachtet, auch einen Screenshot der einzigen aufgelisteten Konten zu machen. Gab es irgendwann eine Änderung in SQL 2012, die diese Methode nicht zulässt? Meine aktuelle Version ist 11.0.3128 . Außerdem ist es unerheblich, welche Art von Änderung ich vornehme. Ich erhalte eine Variation eines Fehlers, der besagt, dass ich keine Berechtigungen habe. Eine letzte Sache, ich bezweifle, dass dies einen Unterschied macht, aber ich habe PowerShell mit Administratorrechten geöffnet, cmd.exe ausgeführt und dann psexec -i -s "C: \ ...... smss.exe"! ( i.stack.imgur.com/ITOja.p
Sean Perkins
Das angehängte Bild zeigt jetzt nichts an, aber es hatte "SA" und "NT AUTHORITY \ SYSTEM" als die einzigen aufgelisteten Konten. Die Fehlermeldung lautete: "Benutzer hat keine Berechtigung zum Ausführen dieser Aktion. (Microsoft SQL Server, Fehler: 15247)"
Sean Perkins
@ Sean PowerShell? PSExec hat nichts mit PowerShell zu tun. Sind Sie ein lokaler Administrator auf dem Computer? Bist du sicher?
Aaron Bertrand