Herstellen einer Verbindung mit SQL Server, wenn Systemadministratoren den Zugriff verloren haben

Gilt für: SQL Server

In diesem Artikel wird beschrieben, wie Sie als Systemadministrator den verlorenen Zugriff auf SQL Server-Datenbank-Engine wiedererlangen können. Ein Systemadministrator kann aufgrund einer der folgenden Ursachen den Zugriff auf eine SQL Server-Instanz verlieren:

  • Alle Anmeldedaten, die Mitglieder der festen Serverrolle sysadmin sind, wurden versehentlich entfernt.

  • Alle Windows-Gruppen, die Mitglieder der festen Serverrolle sysadmin sind, wurden versehentlich entfernt.

  • Die Anmeldedaten, die Mitglieder der festen Serverrolle sysadmin sind, gehören zu Mitarbeitern, die das Unternehmen verlassen haben oder nicht verfügbar sind.

  • Das sa-Konto wurde deaktiviert, oder das Kennwort ist unbekannt.

Lösung

Es wird empfohlen, die SQL Server-Instanz im Einzelbenutzermodus zu starten, um Ihr Zugriffsproblem zu lösen. Dieser Modus verhindert, dass andere Verbindungen hergestellt werden, während Sie versuchen, den Zugriff zurückzugewinnen. Anschließend können Sie eine Verbindung zu Ihrer SQL Server-Instanz herstellen und Ihre Anmeldung zur Serverrolle sysadmin hinzufügen. Eine ausführliche Anleitung für diese Lösung finden Sie im Abschnitt Schrittweise Anleitung.

SQL Server-Instanzen können mithilfe der Option -m oder -f über die Befehlszeile im Einzelbenutzermodus gestartet werden. Jedes Mitglied der lokalen Administratorengruppe des Computers kann als Mitglied der festen Serverrolle sysadmin eine Verbindung zur SQL Server-Instanz herstellen.

Wenn Sie die Instanz im Einzelbenutzermodus starten, müssen Sie den SQL Server-Agent-Dienst beenden. Andernfalls stellt SQL Server-Agent möglicherweise zuerst eine Verbindung her und belegt die einzige verfügbare Verbindung zum Server. Dadurch wird Ihre Anmeldung blockiert.

Die einzige verfügbare Verbindung kann auch von einer unbekannten Clientanwendung besetzt werden, bevor Sie sich anmelden können. Damit dies nicht geschieht, können Sie die -m-Option gefolgt von einem Anwendungsnamen verwenden, um die Verbindungen der angegebenen Anwendung auf eine einzelne Verbindung zu beschränken. Wenn Sie SQL Server mit -mSQLCMD starten, werden Verbindungen z. B. auf eine einzelne Verbindung beschränkt, die sich selbst als sqlcmd-Clientprogramm identifiziert. Für eine Verbindungsherstellung über den Abfrage-Editor in Management Studio müssen Sie -m"Microsoft SQL Server Management Studio - Query" verwenden.

Wichtig

Verwenden Sie -m unter keinen Umständen als Sicherheitsfeature mit einem Anwendungsnamen. Clientanwendungen geben den Anwendungsnamen über die Einstellungen der Verbindungszeichenfolgen an, sodass er problemlos mit einem falschen Namen gespooft werden kann.

In der folgenden Tabelle werden die verschiedenen Methoden zusammengefasst, mit denen die Instanz über die Befehlszeile im Einzelbenutzermodus gestartet werden kann.

Option Beschreibung Verwendung
-m Beschränkt die Verbindungen auf eine einzelne Verbindung Keine anderen Benutzer versuchen, eine Verbindung mit der Instanz herzustellen, oder Sie den Namen der Anwendung nicht kennen, mit der die Verbindung zur Instanz hergestellt wird.
-mSQLCMD Beschränkt die Verbindungen auf eine einzelne Verbindung, die sich als sqlcmd-Clientprogramm identifizieren muss Stellen Sie mit sqlcmd eine Verbindung zur Instanz her und verhindern Sie, dass andere Anwendungen die einzige verfügbare Verbindung belegen.
-m"Microsoft SQL Server Management Studio - Query" Beschränkt die Verbindungen auf eine einzelne Verbindung, die sich selbst als die Anwendung Microsoft SQL Server Management Studio - Query identifizieren muss. Sie stellen über den Abfrage-Editor in Management Studio eine Verbindung zur Instanz her und Sie verhindern, dass andere Anwendungen die einzige verfügbare Verbindung belegen.
-f Beschränkt die Verbindungen auf eine einzelne Verbindung und startet die Instanz mit einer minimalen Konfiguration Eine andere Konfiguration verhindert gerade den Start.

Schrittweise Anweisungen

Eine detaillierte Anleitung zum Start von SQL Server im Einzelbenutzermodus finden Sie unter Starten von SQL Server im Einzelbenutzermodus.

Verwenden von PowerShell

Option 1: Ausführen der Schritte direkt in einem ausführbaren Notebook mit Azure Data Studio

Hinweis

Bevor Sie versuchen, dieses Notebook zu öffnen, stellen Sie sicher, dass Azure Data Studio auf Ihrem lokalen Computer installiert ist. Informationen zur Installation von Azure Data Studio finden Sie unter Installieren von Azure Data Studio.

Option 2: Manuelles Ausführen des Schritts

  1. Öffnen Sie eine Windows PowerShell-Eingabeaufforderung mit erhöhten Rechten.

  2. Richten Sie einen Dienstnamen und eine SQL Server-Instanz sowie Windows-Anmeldevariablen ein. Ersetzen Sie diese Werte durch Werte, die Ihrer Umgebung entsprechen.

    Wenn Sie über eine Standardinstanz verfügen, verwenden MSSQLSERVER Sie ohne Instanznamen.

    $service_name = "MSSQL`$instancename"
    $sql_server_instance = "machine_name\instance"
    $login_to_be_granted_access = "[CONTOSO\PatK]"
    
  3. Beenden Sie den SQL Server-Dienst, damit er mithilfe des folgenden Befehls im Einzelbenutzermodus neu gestartet werden kann:

    Wenn Sie über eine Standardinstanz verfügen, verwenden MSSQLSERVER Sie ohne Instanznamen.

    net stop $service_name
    
  4. Starten Sie nun Ihre SQL Server-Instanz im Einzelbenutzermodus, und gestatten Sie nur SQLCMD.exe das Herstellen einer Verbindung (/mSQLCMD):

    Hinweis

    Achten Sie darauf, für SQLCMD Großbuchstaben zu verwenden.

    Wenn Sie über eine Standardinstanz verfügen, verwenden MSSQLSERVER Sie ohne Instanznamen.

    net start $service_name /f /mSQLCMD
    
  5. Führen Sie mit sqlcmd einen CREATE LOGIN Befehl gefolgt von Befehl ALTER SERVER ROLE aus. Bei diesem Schritt wird davon ausgegangen, dass Sie sich mit einem Konto, das Mitglied der Gruppe „Lokale Administratoren“ ist, bei Windows angemeldet haben. Dieser Schritt setzt voraus, dass Sie die Domänen- und Anmeldenamen durch die Anmeldeinformationen ersetzt haben, denen Sie die sysadmin-Mitgliedschaft erteilen möchten.

    Wenn Sie über eine Standardinstanz verfügen, verwenden Sie den Namen des Servers.

    sqlcmd.exe -E -S $sql_server_instance -Q "CREATE LOGIN $login_to_be_granted_access FROM WINDOWS; ALTER SERVER ROLE sysadmin ADD MEMBER $login_to_be_granted_access; "
    

    Wenn der folgende Fehler angezeigt wird, müssen Sie sicherstellen, dass keine andere sqlcmd-Instanz mit SQL Server verbunden ist:

    Sqlcmd: Error: Microsoft ODBC Driver X for SQL Server : Login failed for user 'CONTOSO\BobD'. Reason: Server is in single user mode. Only one administrator can connect at this time.

  6. Gemischter Modus (optional): Wenn Ihre SQL Server-Instanz im gemischten Authentifizierungsmodus ausgeführt wird, haben Sie die folgenden Möglichkeiten:

    1. Gewähren Sie einer SQL Server-Anmeldung die Mitgliedschaftsrechte der sysadmin-Rolle. Führen Sie Code wie den folgenden aus, um eine neue SQL Server-Anmeldung, die Mitglied der festen Serverrolle sysadmin ist, mit Authentifizierung zu erstellen. Ersetzen Sie <strong_password> durch ein sicheres Kennwort Ihrer Wahl.

      Wenn Sie über eine Standardinstanz verfügen, verwenden Sie den Namen des Servers.

      $strong_password = "<strong_password>"
      sqlcmd.exe -E -S $sql_server_instance -Q "CREATE LOGIN TempLogin WITH PASSWORD = '$strong_password'; ALTER SERVER ROLE sysadmin ADD MEMBER TempLogin; "
      
    2. Dies gilt auch, wenn Ihre SQL Server-Instanz im gemischten Authentifizierungsmodus ausgeführt wird und Sie das Kennwort eines aktivierten sa-Kontos zurücksetzen möchten. Ändern Sie das Kennwort des sa -Kontos mit folgender Syntax. Stellen Sie sicher, <strong_password> durch ein sicheres Kennwort Ihrer Wahl zu ersetzen:

      Wenn Sie über eine Standardinstanz verfügen, verwenden Sie den Namen des Servers.

      $strong_password = "<strong_password>"
      sqlcmd.exe -E -S $sql_server_instance -Q "ALTER LOGIN sa WITH PASSWORD = $strong_password; "
      
  7. Beenden Sie Ihre SQL Server-Instanz im Mehrbenutzermodus, und starten Sie sie neu.

    Wenn Sie über eine Standardinstanz verfügen, verwenden MSSQLSERVER Sie ohne Instanznamen.

    net stop $service_name
    net start $service_name
    

Verwenden des SQL Server-Konfigurations-Managers und von Management Studio (SSMS)

In dieser Anleitung wird Folgendes vorausgesetzt:

  • SQL Server wird unter Windows 8 oder höher ausgeführt. Auf geringfügige Abweichungen bei früheren Versionen von SQL Server oder Windows wird ggf. hingewiesen.

  • SQL Server Management Studio ist auf dem Computer installiert.

Führen Sie diese Schritte aus, während Sie in Windows als Mitglied der lokalen Administratorgruppe angemeldet sind.

  1. Klicken Sie im Windows-Startmenü mit der rechten Maustaste auf das Symbol für den SQL Server-Konfigurations-Manager, und wählen Sie Als Administrator ausführen aus, um Ihre Administratoranmeldeinformationen an den Konfigurations-Manager zu übergeben.

  2. Wählen Sie im linken Bereich des SQL Server -Konfigurations-Managers die Option SQL Server-Diensteaus. Suchen Sie im rechten Bereich Ihre SQL Server-Instanz. (Bei der Standardinstanz von SQL Server ist (MSSQLSERVER) nach dem Computernamen angegeben. Benannte Instanzen werden in Großbuchstaben mit demselben Namen wie unter Registrierte Server angezeigt.) Klicken Sie mit der rechten Maustaste auf die SQL Server-Instanz, und wählen Sie dann Eigenschaften aus.

  3. Geben Sie auf der Registerkarte Startparameter im Feld Startparameter angeben die Zeichenfolge -m ein, und wählen Sie dann Hinzufügen aus. (Der Parameter entspricht einem Bindestrich und dem Kleinbuchstaben m.)

    Bei einigen früheren SQL Server-Versionen gibt es keine Registerkarte Startparameter. Doppelklicken Sie in diesem Fall auf der Registerkarte Advanced auf Startparameter. Die Parameter werden in einem kleinen Fenster geöffnet. Achten Sie darauf, die vorhandenen Parameter nicht zu ändern. Fügen Sie ganz unten den neuen Parameter ;-m hinzu, und wählen Sie OK aus. (Der Parameter entspricht einem Semikolon, einem Bindestrich und dem Kleinbuchstaben m.)

  4. Wählen Sie OK aus, klicken Sie nach Ausgabe der Neustartmeldung mit der rechten Maustaste auf den Servernamen, und wählen Sie dann Neu starten aus.

  5. Nachdem SQL Server neu startet, befindet sich Ihr Server im Einzelbenutzermodus. Stellen Sie sicher, dass der SQL Server-Agent nicht ausgeführt wird. Wenn gestartet, belegt er Ihre einzige Verbindung.

  6. Klicken Sie im Windows-Startmenü mit der rechten Maustaste auf das Symbol für Management Studio, und wählen Sie Als Administrator ausführen aus. Dadurch werden Ihre Administratoranmeldeinformationen an SQL Server Management Studio übergeben.

    In früheren Windows-Versionen wird die Option Als Administrator ausführen als Untermenü angezeigt.

    In einigen Konfigurationen versucht SSMS, mehrere Verbindungen herzustellen. Mehrere Verbindungen verursachen einen Fehler, da SQL Server im Einzelbenutzermodus ausgeführt wird. Führen Sie Ihrem Szenario entsprechend die passende Aktion aus:

    1. Stellen Sie mithilfe der Windows-Authentifizierung, die Ihre Administratoranmeldeinformationen enthält, eine Verbindung zum Objekt-Explorer her. Erweitern Sie Sicherheitsowie Anmeldungen, und doppelklicken Sie auf Ihre eigene Anmeldung. Wählen Sie auf der Seite Serverrollen die Option sysadmin und dann OK aus.

    2. Anstatt über den Objekt-Explorer stellen Sie in einem Abfragefenster unter Verwendung der Windows-Authentifizierung (die Ihre Administratoranmeldeinformationen enthält) eine Verbindung her. (Diese Art der Verbindung wird nur unterstützt, wenn sie nicht über den Objekt-Explorer hergestellt wurde.) Führen Sie Code (wie im folgenden Beispiel) aus, um eine neue Anmeldung mit Windows-Authentifizierung hinzuzufügen, die Mitglied der festen Serverrolle sysadmin ist. Im folgenden Beispiel wird ein Domänenbenutzer mit dem Namen CONTOSO\PatK hinzugefügt.

      CREATE LOGIN [CONTOSO\PatK] FROM WINDOWS;
      ALTER SERVER ROLE sysadmin ADD MEMBER [CONTOSO\PatK];
      
    3. Wenn SQL Server im gemischten Authentifizierungsmodus ausgeführt wird, stellen Sie eine Verbindung in einem Abfragefenster unter Verwendung der Windows-Authentifizierung her (die Ihre Administratoranmeldeinformationen enthält). Führen Sie Code wie den folgenden aus, um eine neue SQL Server-Anmeldung, die Mitglied der festen Serverrolle sysadmin ist, mit Authentifizierung zu erstellen.

      CREATE LOGIN TempLogin WITH PASSWORD = '<strong_password>';
      ALTER SERVER ROLE sysadmin ADD MEMBER TempLogin;
      

      Warnung

      Ersetzen Sie <strong_password> durch ein sicheres Kennwort.

    4. Wenn SQL Server im gemischten Authentifizierungsmodus ausgeführt wird und Sie das Kennwort des sa-Kontos zurücksetzen möchten, stellen Sie unter Verwendung der Windows-Authentifizierung (die Ihre Administratoranmeldeinformationen enthält) eine Verbindung zu einem Abfragefenster her. Ändern Sie das Kennwort des sa-Kontos mit folgender Syntax.

      ALTER LOGIN sa WITH PASSWORD = '<strong_password>';
      

      Warnung

      Ersetzen Sie <strong_password> durch ein sicheres Kennwort.

  7. Schließen Sie Management Studio.

  8. In den folgenden Schritten wird SQL Server in den Mehrbenutzermodus zurückversetzt. Wählen Sie im linken Bereich des SQL Server -Konfigurations-Managers die Option SQL Server-Diensteaus.

  9. Klicken Sie im rechten Bereich mit der rechten Maustaste auf die Instanz von SQL Server, und wählen Sie dann Eigenschaften aus.

  10. Wählen Sie auf der Registerkarte Startparameter im Feld Vorhandene Parameter den Parameter -m und dann Entfernen aus.

    Bei einigen früheren SQL Server-Versionen gibt es keine Registerkarte Startparameter. Doppelklicken Sie in diesem Fall auf der Registerkarte Advanced auf Startparameter. Die Parameter werden in einem kleinen Fenster geöffnet. Entfernen Sie den zuvor hinzugefügten Parameter ;-m und wählen Sie dann OK aus.

  11. Klicken Sie mit der rechten Maustaste auf den Servernamen, und wählen Sie dann Neu starten aus. Stellen Sie sicher, dass der SQL Server-Agent neu gestartet wird, wenn Sie ihn vor dem Start von SQL Server im Einzelbenutzermodus beendet haben.

Nun sollten Sie in der Lage sein, mit einem der Konten, das jetzt Mitglied der festen Serverrolle sysadmin ist, auf normale Weise eine Verbindung herzustellen.