Як додати sysadmin до користувача в SQL Server 2008, коли немає облікових записів sysadmin


25

У мене працює екземпляр SQL-сервера 2008 року. На жаль, під час тестування я відмінив права sysadmin на свій логін, і тепер не можу прочитати його (тому що у мене немає прав на sysadmin).

Для цього примірника немає інших облікових записів sysadmin, крім SA.

Мене створили лише для автентифікації Windows, тому я зламав LoginMode в реєстрі до 2, щоб я міг увійти як SA за допомогою автентифікації Sql. Це дійсно встановлює режим входу змішаним, проте користувач SA відключений за замовчуванням, і я не можу його повторно ввімкнути, оскільки я не маю прав sysadmin.

Як увімкнути вхід у систему SA, щоб я міг увійти і передати системний адміністратор на свій звичайний рахунок? Чи є для цього також налаштування реєстру чи він зберігається в головній базі даних?

Відповіді:


11

Навіть найпоширеніший варіант з'єднання uber-admin Виділений підключення адміністратора ( DAC ), який може використовуватися лише як локальне з'єднання і дозволяє скасовувати всі види зла, все одно вимагає облікових даних для входу. Тому я не думаю, що існує офіційний спосіб зробити це.

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

Вам все одно потрібно буде вручну відновити об'єкти на рівні сервера (наприклад, реєстрації)


1
Дякую - я видалив екземпляр та перевстановив. Знову встановили базу даних і знову все добре. Декілька речей, на які слід звернути увагу, використовували повний інсталятор двигуна бази даних, щоб перевстановити екземпляр (у мене були інструменти управління лише інсталятор, який мене на деякий час натикав). Також вам потрібно змінити дозволи на файли бази даних, щоб в іншому випадку ви отримали помилку при приєднанні (помилка 5). Крім цього - все працювало чудово.

Також я зробив копію файлів бази даних, але виявилося, що це не потрібно. Видалення не видаляло бази даних. Однак я все-таки рекомендую копіювати файли бази даних на випадок, якщо така поведінка відрізняється на різних версіях SQL-сервера.

27

Існує фактичний зворотний блок в SQL Server, який не вимагає перезавантаження та / або перезавантаження нічого в режимі для одного користувача. Я робив це в системах, до яких у мене не було доступу, але потрібно було перевірити речі.

Завантажте інструменти PSexec звідси . Розмістіть це на сервері, а потім у командному рядку виконайте цю команду: psexec -i -s SSMS.exeабо sqlwb.exe

Це відкриє SSMS як системний обліковий запис, який має доступ до системи екземпляра SQL Server. Це робиться під час встановлення SQL Server, однак я чув, що це не буде так із SQL 2012.


1
Ні, це не працює в SQL Server 2012 RTM і вище. Для того, щоб увійти, вам слід перезапустити послугу SQL Server в режимі однокористувача як член локальної групи адміністратора сервера.
Шон Мелтон

15

SQL Server 2008 відрізняється від SQL Server 2005 тим, що місцеві адміністратори більше не успадковують роль фіксованого сервера sysadmin.

Коли встановлено SQL Server 2008, він запропонує вам призначити обліковий запис для додавання до ролі sysadmin. Якщо ви отримаєте вікно після встановлення програмного забезпечення, однак це не дуже допоможе вам.

На щастя, Microsoft зберегла функціонал 2005 року, коли SQL Server працює в режимі одного користувача. Ось що ви робите:

  • увійдіть на сервер як локальний адміністратор Windows
  • зупинити сервер sql
  • в командному рядку в каталозі, де знаходиться sqlservr.exe, введіть sqlservr.exe -m і натисніть клавішу Enter - це запустить SQL Server в режимі однокористування
  • відкрийте EM SQL Server і додайте свій обліковий запис до ролі фіксованого сервера sysadmin
  • зупинити сервер sql, перезапустити (в командному рядку або в EM SQL Server

Це рішення прекрасно працює. Просто хотів додати, що вам не потрібно входити в систему як локальний адміністратор, щоб запустити sqlservr.exe в режимі одиночного користувача, саме тоді, коли вам потрібно буде увійти в нього через SSMS або osql або інше.
AbeyMarquez

5

Це велике запитання, і хтось опиниться в цій ситуації і потребує порятунку від цього.

Весь кредит припадає на кодіконіор

Якщо ви адміністратор Windows на сервері, ви можете використовувати скрипт PowerShell v2, щоб отримати доступ без відключення та жодного відомого ризику. Це робиться шляхом дублювання маркера входу служби SQL Server, навіть якщо він працює під обліковим записом служби AD, віртуальним обліковим записом або захищеним SID послуги

Нижче сценарій буде повторювати послуги SQL Server і додасть вас до ролі sysadmin, де б ви не бракували:

#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 (Saleem Hakani) є автором наведених нижче підказок "Підказки та хитрості" SQL Server.

Я виявив це, поки я застряг у подібному стані, коли забув пароль для моєї тестової машини.

Посилання: 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> СТВОРИТИ ВХІД '' за допомогою PASSWORD = ''

2> йти

1> SP_ADDSRVROLEMEMBER '', 'SYSADMIN'

2> йти

Щоб додати існуючий логін для ролі сервера SYSADMIN, виконайте такі дії:

1> SP_ADDSRVROLEMEMBER '', 'SYSADMIN'

Вищеописана операція допоможе надати привілеї SYSADMIN існуючому входу або новому входу.

  1. Після того, як вищезазначені кроки будуть успішно виконані, наступним кроком є ​​зупинка та запуск сервісів SQL Server, використовуючи звичайні параметри запуску. (Цього разу вам не знадобиться –f або –m)

0

Ви можете зробити наступне:
1) Створити обліковий запис користувача Windows з адміністративними привілеями
2) Увійти у вікна з новим адміністративним обліковим записом
3) Відкрити Sql Server Mangement Studio за допомогою Windows Authentication
4) Тепер ви ввійшли в систему SQL Server як sysadmin, так ви можете створювати нові облікові записи або оновлювати користувача користувача


2
Спробував це, і не вийшло. Я створив новий обліковий запис адміністратора на цій машині. SQL-сервер використовує для входу в систему ролі BUILTIN \ Users (які не включають sysadmin). Тому я все ще не можу змінювати тип адміністратора.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.