Jak dodać sysadmin do użytkownika w SQL Server 2008, gdy nie istnieją konta sysadmin

25

Mam uruchomioną instancję SQL Server 2008. Niestety podczas testowania odznaczyłem uprawnienia sysadmin dla mojego loginu i teraz nie mogę go odczytać (ponieważ nie mam uprawnień sysadmin).

Nie ma żadnych innych kont sysadmin dla instancji z wyjątkiem SA.

Zostałem skonfigurowany tylko do uwierzytelniania systemu Windows, więc zhakowałem tryb logowania w rejestrze do 2, aby móc zalogować się jako SA przy użyciu uwierzytelniania Sql. To rzeczywiście ustawia tryb logowania na Mieszany, jednak użytkownik SA jest domyślnie wyłączony i nie mogę go włączyć ponownie, ponieważ nie mam uprawnień sysadmin.

Jak włączyć logowanie SA, aby móc się zalogować i ponownie przypisać sysadmin do mojego normalnego konta? Czy jest to również ustawienie rejestru lub czy jest ono zapisane w głównej bazie danych?


źródło

Odpowiedzi:

11

Nawet najbardziej uber-adminowa opcja połączenia Dedicated Administrator Connection ( DAC ), która może być używana tylko jako połączenie lokalne i pozwala cofnąć wszelkiego rodzaju zło, nadal wymaga danych logowania. Więc nie sądzę, żeby był to oficjalny sposób.

Najszybszym sposobem na przywrócenie tego systemu może być zamknięcie programu SQL Server, skopiowanie plików bazy danych użytkownika w bezpieczne miejsce, odinstalowanie, ponowna instalacja (upewnienie się, że pakiet serwisowy jest co najmniej na poziomie, na którym był wcześniej), skopiowanie plików z powrotem i załączenie bazy danych. (Nie jestem pewien, czy kopiowanie jest wymagane, ale dla bezpieczeństwa ...).

Nadal będziesz musiał ręcznie odzyskać obiekty na poziomie serwera (np. Loginy)

Damien_The_Unbeliever
źródło
1
Dzięki - odinstalowałem instancję i ponownie zainstalowałem. Po ponownym podłączeniu do bazy danych wszystko znów jest w porządku. Kilka rzeczy, na które trzeba uważać, to użycie instalatora pełnego silnika bazy danych do ponownej instalacji instancji (miałem tylko instalator narzędzi do zarządzania, który przez chwilę mnie zaskoczył). Musisz także zmienić uprawnienia do plików bazy danych, aby w przeciwnym razie wystąpił błąd podczas dołączania (błąd 5). Poza tym - wszystko działało dobrze.
Zrobiłem też kopię plików bazy danych, ale okazało się, że nie było to konieczne. Deinstalacja nie usunęła baz danych. Jednak nadal zalecałbym kopiowanie plików bazy danych na wypadek, gdyby zachowanie to różniło się w różnych wersjach serwera SQL.
27

Istnieje prawdziwy backdoor do SQL Server, który nie wymaga restartowania i / lub restartowania czegokolwiek w trybie pojedynczego użytkownika. Zrobiłem to w systemach, w których nie miałem dostępu, ale musiałem sprawdzić rzeczy.

Pobierz narzędzia PSexec stąd . Umieść to na serwerze, a następnie w wierszu polecenia wykonaj następujące polecenie: psexec -i -s SSMS.exelub sqlwb.exe

Otworzy to SSMS jako konto systemowe, które ma dostęp sysadmin do instancji SQL Server. Odbywa się to podczas instalacji programu SQL Server, jednak słyszałem, że tak nie będzie w przypadku SQL 2012.

Shawn Melton
źródło
1
Nie, to nie działa w SQL Server 2012 RTM i nowszych. Aby się dostać, musisz zrestartować usługę SQL Server w trybie pojedynczego użytkownika jako członek lokalnej grupy administracyjnej serwera.
Shawn Melton,
15

SQL Server 2008 różni się od SQL Server 2005 tym, że lokalni administratorzy nie dziedziczą już stałej roli serwera sysadmin.

Po zainstalowaniu SQL Server 2008 monituje o wskazanie konta, które ma zostać dodane do roli sysadmin. Jeśli jednak pojawi się okno po zainstalowaniu oprogramowania, nie pomoże to zbytnio.

Na szczęście Microsoft zachował funkcjonalność 2005 roku, gdy SQL Server działa w trybie pojedynczego użytkownika. Oto co robisz:

  • zaloguj się na serwerze jako administrator lokalny systemu Windows
  • zatrzymaj serwer SQL
  • w wierszu polecenia, w katalogu, w którym znajduje się sqlservr.exe, wpisz sqlservr.exe -m i naciśnij klawisz enter - uruchomi to SQL Server w trybie pojedynczego użytkownika
  • otwórz SQL Server EM i dodaj swoje konto do stałej roli serwera sysadmin
  • zatrzymaj serwer SQL, uruchom ponownie (w wierszu polecenia lub w SQL Server EM

źródło
To rozwiązanie działa pięknie. Chciałem tylko dodać, że nie musisz być zalogowany jako lokalny administrator, aby uruchomić sqlservr.exe w trybie pojedynczego użytkownika, tylko wtedy, gdy musisz się zalogować przez SSMS lub OSQL lub cokolwiek innego.
AbeyMarquez,
5

To świetne pytanie, a ktoś znajdzie się w takiej sytuacji i potrzebuje na to pomocy.

Cały kredyt należy do codykonior

Jeśli jesteś administratorem systemu Windows na serwerze , możesz użyć skryptu PowerShell v2, aby uzyskać dostęp bez przestoju i bez znanego ryzyka. Robi to przez duplikowanie tokenu logowania do usługi SQL Server, nawet jeśli działa ona pod kontem usługi AD, kontem wirtualnym lub jest chroniona identyfikatorem SID dla usługi

Poniższy skrypt iteruje usługi SQL Server i doda cię do roli sysadmin, gdziekolwiek będziesz brakować:

#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
źródło
2

Nadal możesz utworzyć login z dostępem „sysadmin”. Dzięki Principal Data Engineer w Microsoft (Saleem Hakani) napisał poniższe wskazówki i porady dotyczące programu SQL Server.

Znalazłem to, kiedy utknąłem w podobnym stanie, gdy zapomniałem hasła sa do mojej maszyny testowej.

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

Oto kroki, które musisz wykonać:

  1. Uruchom wystąpienie programu SQL Server przy użyciu trybu pojedynczego użytkownika (lub minimalnej konfiguracji, która przełączy również program SQL Server w tryb pojedynczego użytkownika)

W wierszu polecenia wpisz: SQLServr.Exe –m (lub SQLServr.exe –f)

Uwaga: jeśli folder Binn nie znajduje się w Twojej ścieżce środowiskowej, musisz przejść do folderu Binn.

(Zwykle folder Binn znajduje się w: C: \ Program Files \ Microsoft SQL Server \ MSSQL10.MSSQLSERVER \ MSSQL \ Binn)

  1. Po uruchomieniu usługi SQL Server w trybie pojedynczego użytkownika lub przy minimalnej konfiguracji, możesz teraz użyć polecenia SQLCMD z wiersza polecenia, aby połączyć się z programem SQL Server i wykonać następujące operacje, aby dodać siebie jako administratora w instancji SQL Server.

SQLCMD –S

Zostaniesz teraz zalogowany do SQL Server jako administrator.

  1. Po zalogowaniu się do SQL Server za pomocą SQLCMD, wydaj następujące polecenia, aby utworzyć nowe konto lub dodać istniejące logowanie do roli serwera SYSADMIN.

Aby utworzyć nowy login i dodać go do roli serwera SYSADMIN:

1> UTWÓRZ LOGOWANIE '' z HASŁEM = ''

2> idź

1> SP_ADDSRVROLEMEMBER ”,„ SYSADMIN ”

2> idź

Aby dodać istniejący login do roli serwera SYSADMIN, wykonaj następujące czynności:

1> SP_ADDSRVROLEMEMBER ”,„ SYSADMIN ”

Powyższa operacja zajmie się nadaniem uprawnień SYSADMIN istniejącemu loginowi lub nowemu loginowi.

  1. Po pomyślnym wykonaniu powyższych kroków następnym krokiem jest zatrzymanie i uruchomienie usług SQL Server przy użyciu zwykłych opcji uruchamiania. (Tym razem nie będziesz potrzebować –f lub –m)
Ramakant Dadhichi
źródło
0

Możesz wykonać następujące czynności:
1) Utwórz konto użytkownika systemu Windows z uprawnieniami administracyjnymi
2) Zaloguj się w systemie Windows za pomocą nowego konta administracyjnego
3) Otwórz Studio zarządzania serwerem SQL za pomocą uwierzytelniania systemu Windows
4) Teraz jesteś zalogowany w SQL Server jako sysadmin, więc możesz utworzyć nowe konto lub zaktualizować użytkownika sa

Juan Carlos Velez
źródło
2
Próbowałem tego i to nie działało. Utworzyłem nowe konto logowania administratora na tym komputerze. Serwer SQL używa ról BUILTIN \ Users (które nie obejmują sysadmin) do zalogowania się. W związku z tym nadal nie mogę wprowadzać zmian typu admin.