Dela via


Anslut till SQL Server när systemadministratörer är utelåsta

gäller för:SQL Server

Den här artikeln beskriver hur du kan återfå åtkomsten till SQL Server Database Engine som systemadministratör om du är utelåst. En systemadministratör kan förlora åtkomsten till en instans av SQL Server på grund av någon av följande orsaker:

  • Alla användarkonton som är medlemmar i den fasta serverrollen sysadmin togs bort av misstag.

  • Alla Windows-grupper som är medlemmar i sysadmin fast serverroll togs bort av misstag.

  • Användarkontona som är medlemmar i sysadmin fast serverroll är för personer som har lämnat företaget eller inte är tillgängliga.

  • Det sa kontot är inaktiverat eller så känner ingen till lösenordet.

Upplösning

För att lösa ditt åtkomstproblem rekommenderar vi att du startar instansen av SQL Server i enanvändarläge. Det här läget förhindrar att andra anslutningar inträffar när du försöker få åtkomst igen. Härifrån kan du ansluta till din instans av SQL Server och lägga till din inloggning i sysadmin serverroll. Detaljerade steg för den här lösningen finns i avsnittet stegvisa instruktioner.

Du kan starta en instans av SQL Server i enanvändarläge med antingen alternativen -m eller -f från kommandoraden. Alla medlemmar i datorns lokala administratörsgrupp kan sedan ansluta till instansen av SQL Server som medlem i sysadmin fast serverroll.

När du startar instansen i enanvändarläge stoppar du SQL Server Agent-tjänsten. Annars kan SQL Server-agenten ansluta först, ta den enda tillgängliga anslutningen till servern och blockera dig från att logga in.

Det är också möjligt för ett okänt klientprogram att ta den enda tillgängliga anslutningen innan du kan logga in. För att förhindra att detta inträffar kan du använda alternativet -m följt av ett programnamn för att begränsa anslutningar till en enda anslutning från det angivna programmet. Om du till exempel startar SQL Server med -mSQLCMD begränsas anslutningar till en enda anslutning som identifierar sig som sqlcmd klientprogram. Om du vill ansluta via frågeredigeraren i Management Studio använder du -m"Microsoft SQL Server Management Studio - Query".

Viktig

Använd inte -m med ett programnamn som en säkerhetsfunktion. Klientprogram anger programnamnet via inställningarna för anslutningssträngen, så att det enkelt kan förfalskas med ett falskt namn.

I följande tabell sammanfattas de olika sätten att starta instansen i enanvändarläge på kommandoraden.

Alternativ Beskrivning När du ska använda
-m Begränsar anslutningar till en enda anslutning Det finns inga andra användare som försöker ansluta till instansen, eller så är du inte säker på vilket programnamn du använder för att ansluta till instansen.
-mSQLCMD Begränsar anslutningar till en enda anslutning som måste identifiera sig som sqlcmd klientprogram Du planerar att ansluta till instansen med sqlcmd, och du vill förhindra att andra program tar den enda tillgängliga anslutningen.
-m"Microsoft SQL Server Management Studio - Query" Begränsar anslutningar till en enda anslutning som måste identifiera sig som Microsoft SQL Server Management Studio – Query-programmet. Du planerar att ansluta till instansen via frågeredigeraren i Management Studio och du vill förhindra att andra program tar den enda tillgängliga anslutningen.
-f Begränsar anslutningar till en enda anslutning och startar instansen i minimal konfiguration En annan konfiguration hindrar dig från att starta.

Stegvisa instruktioner

Stegvisa instruktioner om hur du startar SQL Server i enanvändarläge finns i Starta SQL Server i Single-User läge.

Använda PowerShell

Alternativ 1: Kör stegen direkt i en körbar notebook-fil med Hjälp av Azure Data Studio

Notifikation

Innan du försöker öppna den här notebook-filen kontrollerar du att Azure Data Studio är installerat på den lokala datorn. Information om hur du installerar Azure Data Studio finns i Lär dig hur du installerar Azure Data Studio.

Alternativ 2: Följ steget manuellt

  1. Öppna en upphöjd Windows PowerShell-kommandotolk.

  2. Konfigurera tjänstnamn och SQL Server-instans och Windows-inloggningsvariabler. Ersätt dessa värden med värden som matchar din miljö.

    Om du har en standardinstans använder du MSSQLSERVER utan instansnamn.

    $service_name = "MSSQL`$instancename"
    $sql_server_instance = "machine_name\instance"
    $login_to_be_granted_access = "[CONTOSO\PatK]"
    
  3. Stoppa SQL Server-tjänsten så att den kan startas om med enanvändarläge med hjälp av följande kommando:

    Om du har en standardinstans använder du MSSQLSERVER utan instansnamn.

    net stop $service_name
    
  4. Starta nu SQL Server-instansen i ett enda användarläge och tillåt endast SQLCMD.exe att ansluta (/mSQLCMD):

    Not

    Se till att använda versaler SQLCMD

    Om du har en standardinstans använder du MSSQLSERVER utan instansnamn.

    net start $service_name /f /mSQLCMD
    
  5. Använd sqlcmdoch kör ett CREATE LOGIN kommando följt av kommandot ALTER SERVER ROLE. Det här steget förutsätter att du loggade in på Windows med ett konto som är medlem i gruppen Lokala administratörer. Det här steget förutsätter att du ersatte domän- och inloggningsnamnen med de autentiseringsuppgifter som du vill ge sysadmin-medlemskap.

    Om du har en standardinstans använder du namnet på servern.

    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; "
    

    Om du får följande fel måste du se till att inga andra sqlcmd är anslutna till SQL Server:

    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. blandat läge (valfritt): Om SQL Server-instansen körs i blandat autentiseringsläge kan du också:

    1. Bevilja sysadmin rollmedlemskap till en SQL Server-inloggning. Kör kod som följande för att skapa en ny SQL Server-autentiseringsinloggning som är medlem i sysadmin fast serverroll. Ersätt <strong_password> med ett starkt lösenord.

      Om du har en standardinstans använder du namnet på servern.

      $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. Om SQL Server-instansen körs i blandat autentiseringsläge och du vill återställa lösenordet för ett aktiverat sa konto. Ändra lösenordet för sa-kontot med följande syntax. Se till att ersätta <strong_password> med ett starkt lösenord som du väljer:

      Om du har en standardinstans använder du namnet på servern.

      $strong_password = "<strong_password>"
      sqlcmd.exe -E -S $sql_server_instance -Q "ALTER LOGIN sa WITH PASSWORD = $strong_password; "
      
  7. Stoppa och starta om SQL Server-instansen i läget för flera användare

    Om du har en standardinstans använder du MSSQLSERVER utan instansnamn.

    net stop $service_name
    net start $service_name
    

Använda SQL Server Configuration Manager och Management Studio (SSMS)

Dessa instruktioner förutsätter:

  • SQL Server körs på Windows 8 eller senare. Små justeringar för tidigare versioner av SQL Server eller Windows tillhandahålls i tillämpliga fall.

  • SQL Server Management Studio är installerat på datorn.

Utför dessa instruktioner när du är inloggad i Windows som medlem i den lokala administratörsgruppen.

  1. På Start-menyn i Windows högerklickar du på ikonen för SQL Server Configuration Manager och väljer Kör som administratör för att skicka administratörsautentiseringsuppgifterna till Configuration Manager.

  2. I SQL Server Configuration Manager väljer du SQL Server Servicesi den vänstra rutan. Leta reda på din instans av SQL Server i den högra rutan. (Standardinstansen av SQL Server innehåller (MSSQLSERVER) efter datornamnet. Namngivna instanser visas i versaler med samma namn som de har i registrerade servrar.) Högerklicka på instansen av SQL Server och välj sedan Egenskaper.

  3. På fliken startparametrar i rutan Ange en startparameter skriver du -m och väljer sedan Lägg till. (Det är ett bindestreck och sedan gemener m.)

    För vissa tidigare versioner av SQL Server finns det ingen flik med Startup Parameters. I så fall, i fliken Avancerat, dubbelklicka på Startparametrar. Parametrarna öppnas i ett litet fönster. Var noga med att inte ändra någon av de befintliga parametrarna. I slutet lägger du till en ny parameter ;-m och väljer sedan OK. (Det är ett semikolon, och sedan ett bindestreck och liten bokstav m.)

  4. Välj OKoch högerklicka på servernamnet när meddelandet ska startas om och välj sedan Starta om.

  5. När SQL Server har startats om är servern i enanvändarläge. Kontrollera att SQL Server-agenten inte körs. Om den startas tar den din enda anslutning.

  6. På Start-menyn i Windows högerklickar du på ikonen för Management Studio och väljer Kör som administratör. Detta skickar administratörsautentiseringsuppgifterna till SSMS.

    För tidigare versioner av Windows visas alternativet Kör som administratör som en undermeny.

    I vissa konfigurationer försöker SSMS upprätta flera anslutningar. Flera anslutningar misslyckas eftersom SQL Server är i enanvändarläge. Utför någon av följande åtgärder baserat på ditt scenario.

    1. Anslut med Object Explorer med Windows-autentisering, som innehåller dina administratörsautentiseringsuppgifter. Expandera Security, expandera Inloggningaroch dubbelklicka på din egen inloggning. På sidan Serverroller väljer du sysadminoch väljer sedan OK.

    2. I stället för att ansluta med Object Explorer ansluter du med ett frågefönster med Windows-autentisering (som innehåller dina administratörsautentiseringsuppgifter). (Du kan bara ansluta på det här sättet om du inte har anslutit till Object Explorer.) Kör kod som följande för att lägga till en ny Windows-autentiseringsinloggning som är medlem i sysadmin fast serverroll. I följande exempel läggs en domänanvändare med namnet CONTOSO\PatK.

      CREATE LOGIN [CONTOSO\PatK] FROM WINDOWS;
      ALTER SERVER ROLE sysadmin ADD MEMBER [CONTOSO\PatK];
      
    3. Om SQL Server körs i blandat autentiseringsläge ansluter du till ett frågefönster med Windows-autentisering (som innehåller dina administratörsautentiseringsuppgifter). Kör kod som följande för att skapa en ny SQL Server-autentiseringsinloggning som är medlem i sysadmin fast serverroll.

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

      Varning

      Ersätt <strong_password> med ett starkt lösenord.

    4. Om SQL Server körs i blandat autentiseringsläge och du vill återställa lösenordet för sa-kontot ansluter du till ett frågefönster med Windows-autentisering (som innehåller dina administratörsuppgifter). Ändra lösenordet för sa-kontot med följande syntax.

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

      Varning

      Ersätt <strong_password> med ett starkt lösenord.

  7. Stäng Management Studio.

  8. De här följande stegen ändrar SQL Server tillbaka till läget för flera användare. I SQL Server Configuration Manager väljer du SQL Server Servicesi den vänstra rutan.

  9. Högerklicka på instansen av SQL Server i det högra fönstret och välj sedan Egenskaper.

  10. På fliken startparametrar i rutan Befintliga parametrar väljer du -m och väljer sedan Ta bort.

    För vissa tidigare versioner av SQL Server finns inte fliken Startparametrar . I så fall, på fliken Avancerat , dubbelklickar du på Startparametrar. Parametrarna öppnas i ett litet fönster. Ta bort ;-m som du lade till tidigare och välj sedan OK.

  11. Högerklicka på servernamnet och välj sedan Starta om. Se till att starta SQL Server-agenten igen om du stoppade den innan du startar SQL Server i enanvändarläge.

Nu bör du kunna ansluta normalt med ett av de konton som nu är medlem i sysadmin fast serverroll.