Как добавить sysadmin для пользователя в SQL Server 2008, когда учетные записи sysadmin не существуют

25

У меня запущен экземпляр SQL Server 2008. К сожалению, во время тестирования я отменил выбор прав sysadmin для своего логина и теперь не могу его прочитать (потому что у меня нет прав sysadmin).

Для этого экземпляра нет других учетных записей сисадмина, кроме SA.

Я был настроен только для проверки подлинности Windows, поэтому я взломал LoginMode в реестре до 2, чтобы я мог войти в систему как SA, используя Sql Authentication. Это действительно устанавливает режим входа в Mixed, однако пользователь SA по умолчанию отключен, и я не могу включить его, потому что у меня нет прав sysadmin.

Как включить вход в систему SA, чтобы я мог войти в систему и переназначить системного администратора на мою обычную учетную запись? Для этого тоже есть параметр реестра или он хранится в базе данных master?


источник

Ответы:

11

Даже для самого соединения типа Uber-Admin Dedicated Administrator Connection ( DAC ), которое можно использовать только как локальное соединение и которое позволяет вам устранять все виды зла, по-прежнему требуются учетные данные для входа. Так что я не думаю, что есть официальный способ сделать это.

Самым быстрым способом восстановления этой системы может быть завершение работы SQL Server, копирование файлов базы данных пользователей в безопасное место, удаление, переустановка (убедитесь, что пакет обновления не ниже того уровня, на котором вы были ранее), скопируйте файлы обратно и прикрепите базы данных. (Не уверен, что копирование / обратное требуется, но просто для безопасности ...).

Вам все равно нужно будет вручную восстанавливать объекты уровня сервера (например, логины)

Damien_The_Unbeliever
источник
1
Спасибо - я удалил экземпляр и переустановил. Снова подключил базу данных и все снова хорошо. Несколько вещей, на которые нужно было обратить внимание, - это использование полной программы установки ядра базы данных для переустановки экземпляра (у меня был только установщик инструментов управления, который на некоторое время поставил меня в тупик). Также вам нужно изменить права доступа к файлам базы данных, чтобы в противном случае вы получили ошибку при подключении (ошибка 5). Кроме этого - все работало нормально.
Кроме того, я сделал копию файлов базы данных, но оказалось, что в этом нет необходимости. Деинсталляция не удаляла базы данных. Тем не менее, я бы по-прежнему рекомендовал копировать файлы базы данных на случай, если это будет отличаться в разных версиях SQL-сервера.
27

Существует реальный бэкдор в SQL Server, который не требует перезапуска и / или перезагрузки чего-либо в однопользовательском режиме. Я сделал это в системах, где у меня не было доступа, но мне нужно было что-то проверить.

Загрузите инструменты PSexec отсюда . Поместите это на сервер и затем в командной строке выполните эту команду:, psexec -i -s SSMS.exeили sqlwb.exe

Это откроет SSMS как системную учетную запись, которая имеет доступ sysadmin к экземпляру SQL Server. Это делается во время установки SQL Server, однако я слышал, что это не будет так с SQL 2012.

Шон Мелтон
источник
1
Нет, это не работает в SQL Server 2012 RTM и выше. Чтобы войти в систему, необходимо перезапустить службу SQL Server в однопользовательском режиме в качестве члена локальной группы администраторов сервера.
Шон Мелтон
15

SQL Server 2008 отличается от SQL Server 2005 тем, что локальные администраторы больше не наследуют фиксированную роль сервера sysadmin.

Когда SQL Server 2008 установлен, он предлагает указать учетную запись, которая будет добавлена ​​в роль системного администратора. Однако если вы получите коробку после установки программного обеспечения, это не очень вам поможет.

К счастью, Microsoft сохранила функциональность 2005 года, когда SQL Server работает в однопользовательском режиме. Вот что вы делаете:

  • войти на сервер как локальный администратор windows
  • остановить сервер sql
  • в командной строке, в каталоге, где находится sqlservr.exe, введите sqlservr.exe -m и нажмите enter - это запустит SQL Server в однопользовательском режиме
  • откройте SQL Server EM и добавьте свою учетную запись в предопределенную роль сервера sysadmin
  • остановить сервер sql, перезагрузить (в командной строке или в SQL Server EM

источник
Это решение работает прекрасно. Просто хотел добавить, что вам не нужно входить в систему как локальный администратор, чтобы запустить sqlservr.exe в однопользовательском режиме, просто когда вам нужно войти в него через SSMS или osql или что-то еще.
AbeyMarquez
5

Это отличный вопрос, и кто-то окажется в такой ситуации и нуждается в спасении.

Весь кредит идет в codykonior

Если вы являетесь администратором Windows на сервере, вы можете использовать сценарий PowerShell v2, чтобы получить доступ без сбоев и известных рисков. Это достигается путем дублирования маркера входа службы SQL Server, даже если он работает под учетной записью службы AD, виртуальной учетной записью или защищен SID для каждой службы

Нижеприведенный скрипт будет перебирать службы SQL Server и добавлять вас к роли системного администратора, где бы вы ни отсутствовали:

#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
}
Кин Шах
источник
2

Вы по-прежнему можете создать логин с доступом «sysadmin». Спасибо основному инженеру данных из Microsoft (Салим Хакани), который создал приведенные ниже советы и подсказки по SQL Server.

Я обнаружил это, когда застрял в аналогичном состоянии, когда забыл пароль sa для моей тестовой машины.

Ссылка: https://blogs.technet.microsoft.com/sqlman/2011/06/14/tips-tricks-you-have-lost-access-to-sql-server-now-what/

Вот шаги, которые вам нужно будет выполнить:

  1. Запустите экземпляр SQL Server, используя однопользовательский режим (или минимальную конфигурацию, которая также переведет SQL Server в однопользовательский режим)

В командной строке введите: SQLServr.Exe –m (или SQLServr.exe –f).

Примечание. Если папка Binn не указана в вашем пути к среде, вам нужно перейти к папке Binn.

(Обычно папка Binn находится по адресу: C: \ Program Files \ Microsoft SQL Server \ MSSQL10.MSSQLSERVER \ MSSQL \ Binn)

  1. Как только служба SQL Server была запущена в однопользовательском режиме или с минимальной конфигурацией, теперь вы можете использовать команду SQLCMD из командной строки, чтобы подключиться к SQL Server и выполнить следующие операции, чтобы снова добавить себя в качестве администратора на экземпляре SQL Server.

SQLCMD –S

Теперь вы войдете в SQL Server как администратор.

  1. После входа в SQL Server с использованием SQLCMD введите следующие команды, чтобы создать новую учетную запись или добавить существующую учетную запись для роли сервера SYSADMIN.

Чтобы создать новый логин и добавить этот логин к роли сервера SYSADMIN:

1> СОЗДАТЬ ЛОГИН '' с ПАРОЛЕМ = ''

2> идти

1> SP_ADDSRVROLEMEMBER '', 'SYSADMIN'

2> идут

Чтобы добавить существующий логин в роль сервера SYSADMIN, выполните следующее:

1> SP_ADDSRVROLEMEMBER '', 'SYSADMIN'

Вышеуказанная операция позаботится о предоставлении привилегий SYSADMIN существующему логину или новому логину.

  1. Как только вышеупомянутые шаги успешно выполнены, следующий шаг должен остановить и запустить службы SQL Server, используя обычные параметры запуска. (На этот раз вам не понадобится –f или –m)
Рамакант Дадхичи
источник
0

Вы можете сделать следующее:
1) Создать учетную запись пользователя Windows с правами администратора.
2) Войдите в Windows с новой учетной записью администратора.
3) Откройте Sql Server Mangement Studio, используя проверку подлинности Windows.
4) Теперь вы вошли в систему SQL Server как sysadmin, поэтому Вы можете создать новые учетные записи или обновить пользователя SA

Хуан Карлос Велес
источник
2
Пробовал это, и это не сработало. Я создал новую учетную запись администратора на этой машине. SQL-сервер использует для входа в систему роли BUILTIN \ Users (которые не включают sysadmin). Поэтому я все еще не могу внести изменения в тип администратора.