Jak zresetować hasło sa?

22

Zgubiłem hasło sa na komputerze, a kiedy loguję się na komputerze bezpośrednio przy użyciu konta w grupie administracyjnej, SQL Server Management Studio nie pozwoli mi zalogować się przy użyciu uwierzytelnienia Windows.

Moim planem było po prostu zalogować się na serwerze, połączyć za pomocą uwierzytelniania systemu Windows i zresetować sa, aby użyć nowego hasła. Ponieważ nie mogę się połączyć przez uwierzytelnianie systemu Windows, to nie zadziała.

Jak inaczej mogę zresetować hasło sa?

Daniel Williams
źródło
Znalazłem odpowiedź. Nie mogłem zalogować się jako administrator domeny, ale używanie lokalnego administratora działało dobrze.
Daniel Williams
Czy masz na myśli, że członek grupy „Administratorzy” komputera lokalnego był w stanie to zrobić? Jakie kroki podjąłeś dla potomności?
p.campbell
Konto było samym kontem administratora lokalnego. To konto jest częścią lokalnej grupy administratorów, podobnie jak moje konto domeny. Ale tylko lokalne konto administratora było w stanie użyć uwierzytelnienia systemu Windows do zalogowania się na serwerze Sql Server. Mam nadzieję że to pomogło.
Daniel Williams
uruchomienie instancji w trybie pojedynczego użytkownika pozwoli również każdemu lokalnemu kontu, które jest częścią lokalnej grupy Administratorów, uzyskać dostęp do instancji. Edytuj: Link @ user1419 wskazuje na to.
Shawn Melton

Odpowiedzi:

10

Możesz wykonać czynności wymienione w linku poniżej, aby zresetować hasło SA:

Kroki podsumowane poniżej:

  1. Otwórz SQL Server Configuration Manager z Menu Start> Programy> Microsoft SQL Server 20xx> Narzędzia konfiguracyjne> dotyczące najnowszej zainstalowanej wersji SQL Server (np. Jeśli masz zainstalowany 2005 i 2012, użyj wersji 2012). Nie masz menu Start? Na ekranie startowym Windows 8 zacznij pisać SQL Server Con ..., aż się pojawi.
  2. Zatrzymaj wystąpienie programu SQL Server, które chcesz odzyskać, klikając prawym przyciskiem myszy wystąpienie w usługach SQL Server i wybierając „Zatrzymaj”
  3. Kliknij prawym przyciskiem myszy właśnie zatrzymaną instancję, kliknij Właściwości, a na karcie „Zaawansowane” w polu tekstowym Właściwości dodaj „; –m” na końcu listy w opcji „Parametry uruchamiania” (w nowszych wersjach możesz przejść bezpośrednio do zakładki „Parametry uruchamiania”, wpisać „-m” i kliknąć Dodaj, nie martwiąc się o składnię, średnik ani nic innego.
  4. Kliknij przycisk „OK” i zrestartuj wystąpienie programu SQL Server
  5. Po uruchomieniu wystąpienia programu SQL Server w trybie pojedynczego użytkownika konto administratora systemu Windows może połączyć się z programem SQL Server przy użyciu narzędzia sqlcmd przy użyciu uwierzytelniania systemu Windows. Możesz użyć poleceń Transact-SQL, takich jak „sp_addsrvrolemember”, aby dodać istniejący login (lub nowo utworzony) do roli serwera sysadmin.

Poniższy przykład dodaje konto „Buck” w domenie „CONTOSO” do roli sysadmin:

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

Po odzyskaniu dostępu sysadmin usuń „; -m” z parametrów uruchamiania za pomocą programu Menedżer konfiguracji i ponownie uruchom instancję programu SQL Server jeszcze raz.

UWAGA: upewnij się, że nie ma spacji między „;” a „-m”, parser parametrów rejestru jest wrażliwy na takie literówki. Powinieneś zobaczyć wpis w pliku ERRORLOG serwera SQL, który mówi „SQL Server uruchomiono w trybie pojedynczego użytkownika”.


Dodatkowe zasoby:

Ostatecznie zawsze możesz skopiować pliki bazy danych do innej instancji lub nawet ponownie zainstalować SQL Server (dodając konto lokalne jako sysadmin podczas tego procesu).

Rozwiązywanie problemów SQL
źródło
9

To, co zrobisz, będzie zależeć od wersji programu SQL Server, a także od tego, czy możesz pozwolić sobie na wycofanie usługi SQL Server w celu ustanowienia nowych poświadczeń. Dwie pierwsze metody tutaj nie wymagają ponownego uruchomienia instancji:


Dla instancji SQL Server 2005, 2008 i 2008 R2

Możesz połączyć się przy użyciu NT AUTHORITY\SYSTEMkonta (lub innych metod backdoor). Niektóre odpowiedzi znajdują się tutaj:

Mam również poradę dotyczącą witryny MSSQLTips.com, która rozwiązuje ten problem:

Zasadniczo pobierasz PSExec od Microsoft, a następnie używasz go do uruchomienia Management Studio po zainstalowaniu:

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

To połączy się NT AUTHORITY\SYSTEMi pozwoli ci robić rzeczy w Object Explorerze, takie jak:

  • Zmień instancję na SQL Server i tryb uwierzytelniania systemu Windows - kliknij prawym przyciskiem myszy nazwę serwera, wybierz właściwości i zmień przycisk opcji, jeśli jest on ustawiony tylko na system Windows:

    wprowadź opis zdjęcia tutaj

  • Ustaw hasło do sakonta - rozwiń Zabezpieczenia, rozwiń Loginy, kliknij prawym przyciskiem myszy sai kliknij Właściwości, aw wyświetlonym oknie dialogowym pojawią się dwa pola do wpisania hasła:

    wprowadź opis zdjęcia tutaj

  • Dodaj swój login jakosysadmin - kliknij prawym przyciskiem myszy Loginy, Nowy login ... wprowadź swoją nazwę logowania (w formularzu DOMAIN\username), następnie przejdź do zakładki Role serwera i zaznacz sysadminpole i kliknij OK:

    wprowadź opis zdjęcia tutaj

  • (lub, jeśli twój login jest już na liście, kliknij prawym przyciskiem myszy, Właściwości i upewnij się, że sysadminjest zaznaczony w obszarze Role serwera)


Dla SQL Server 2012 i nowszych wystąpień

Począwszy od SQL Server 2012, NT Authority\SYSTEMdomyślnie nie otrzymał już uprawnień do SQL Server. Argenis Fernandez szczegółowo opisał inny sposób, aby to zrobić w tych nowszych wersjach :

  1. Jeśli usługa SQL VSS Writer jest uruchomiona, zatrzymaj ją i zawieś wszystkie plany konserwacji lub oprogramowanie do tworzenia kopii zapasowych innych firm, które mogą na niej polegać.
  2. Otwórz regedit.exei zmień wartość parametru HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\SQLWriter\ImagePathpoint to SQLCMD.exe, który będzie C:\Program Files (x86)\Microsoft SQL Server\Client SDK\ODBC\**<...110|120|130|140...>**\Tools\Binn. Po edycji wartość rejestru powinna wyglądać mniej więcej tak (przepraszam za przewijanie):

    "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. Spróbuj ponownie uruchomić usługę SQL VSS Writer (pojawi się błąd; w porządku).

  4. Powinieneś być teraz w stanie połączyć się za sysadminpomocą YourDomain\YourUserName. Zatrzymaj więc usługę SQL VSS Writer, napraw rejestr i zrestartuj usługę (jeśli potrzebujesz, aby była uruchomiona lub działała przed uruchomieniem tej usługi).

Omówiłem to bardziej szczegółowo w drugiej wskazówce:

Chociaż, kiedy napisałem tę wskazówkę, zastosowałem bardziej kłopotliwe podejście do tworzenia kopii SQLCMD.exei zastępowania sqlwriter.exe- o wiele łatwiej jest po prostu bezpośrednio wskazać usługę SQLCMD.exe.


Jeśli możesz sobie pozwolić na wyłączenie usługi SQL Server

Istnieje oficjalnie obsługiwana ścieżka od Microsoft, która wymaga ponownego uruchomienia instancji w trybie pojedynczego użytkownika:

Istnieje również funkcja w dbatools.io , rozwiązaniu Powershell do zarządzania SQL Server, o nazwie Reset-DbaAdmin:


Bezpieczeństwo nie jest tutaj głównym problemem

Widzę wiele osób wzywających Microsoft do „naprawy” tych tak zwanych „luk”. Są to poprawne podejścia do odzyskiwania dostępu do wystąpienia programu SQL Server, który masz prawo. Wszystkie wymagają podwyższonych uprawnień na hoście fizycznym, na którym rezyduje SQL Server; jak powiedziałem kilku osobom, jeśli nie chcesz, aby programiści zadzierali z instalacjami programu SQL Server, nie rób ich administratorami.

Aaron Bertrand
źródło
czy ta metoda pozwoli mi również włączyć konto SA? Utknąłem w pozycji, w której moje konto SA jest wyłączone i mam grupę AD z rolą publiczną. Ponadto, na liście podanej przez ciebie metody, czy będę w stanie wykonać te kroki bez usuwania instancji? Pytam, ponieważ mój serwer jest teraz w środowisku produkcyjnym.
Sean Perkins
1
@Sean tak, powinieneś być w stanie ponownie włączyć sa i / lub utworzyć kolejne konto autoryzacji SQL lub dodać użytkownika AD (nie grupę!) Specjalnie do bardziej podwyższonej roli. Żadne z nich nie będzie wymagało ponownego uruchomienia programu SQL Server (jedynym przypadkiem, w którym byłoby to wymagane, jest zmiana między uwierzytelnianiem mieszanym a tylko systemem Windows).
Aaron Bertrand
Występuje następujący błąd podczas próby zdefiniowania przez Ciebie procesu. Zrobiłem zrzut ekranu tylko z wymienionych kont. Czy w pewnym momencie w SQL 2012 nastąpiła zmiana, która nie zezwala na tę metodę? Moja aktualna wersja to 11.0.3128 . Co więcej, nie ma znaczenia, jakiego rodzaju zmiany dokonam, dostanę odmianę błędu stwierdzającego, że nie mam uprawnień. Jeszcze jedna rzecz, wątpię, żeby to miało znaczenie, ale otworzyłem PowerShell z prawami administratora, wykonałem cmd.exe, a następnie psexec -i -s "C: \ ...... smss.exe"! [Błąd utworzenia konta] ( i.stack.imgur.com/ITOja.p
Sean Perkins
Załączone zdjęcie nic teraz nie pokazuje, ale jako jedyne wymienione konta miały „SA” i „NT AUTHORITY \ SYSTEM”. Otrzymałem komunikat o błędzie „Użytkownik nie ma uprawnień do wykonania tej akcji. (Microsoft SQL Server, Błąd: 15247)”
Sean Perkins
@Sean PowerShell? PSExec nie ma nic wspólnego z PowerShell. Czy jesteś lokalnym administratorem na komputerze? Jesteś pewny?
Aaron Bertrand