Восстановление прав администратора на Microsoft SQL Server 2008/2005

2010-05-16, 17:17 / Argon

При наличии у пользователя прав локального администратора в операционной системе, в которой установлен Microsoft SQL Server (я предполагаю версию 2008), может случиться ситуация, что прав на подключение или управление сервером SQL у такого пользователя нет. Случиться такое может по разным причинам, от саботажа до банальной установки SQL Server’а доменным пользователем, которого уже удалили. Однако, есть возможность без переустановки SQL Server’а получить административные права любому пользователю, обладающим локальными административными правами на уровне ОС. Для этого нужно проделать следующие действия…

  1. зайти в систему от имени пользователя с правами локального администратора
  2. запустить командную строку с правами администратора (начиная с Windows Server 2008 по умолчанию включен UAC, поэтому для полных прав в системе все программы нужно запускать правым кликом → запуск от админа)
  3. выполнить остановку службы SQL Server
    net stop MSSQLSERVER
  4. выполнить запуск службы SQL Server в однопользовательском режиме
    net start MSSQLSERVER /m
  5. подключиться к командному процессору управления SQL Server с правами текущего пользователя
    sqlcmd -E
  6. добавить объект безопасности Windows (локального или доменного пользователя или группу) в базу данных пользователей SQL Server
    CREATE LOGIN [builtin\администраторы] FROM WINDOWS;
    GO;
  7. назначить этому пользователю права администратора SQL Server’a
    EXEC sp_addsrvrolemember 'builtin\администраторы', 'sysadmin';
    GO;
  8. выйти из sqlcmd ;)
    exit
  9. запустить службу SQL Server в обычном режиме
    net start MSSQLSERVER
  10. теперь можно подключаться с помощью Management Studio к вашему SQL серверу и выполнять необходимые действия


15 комментариев

Евгени
# Комментарий от 2010-11-30, 08:48

а если пишет Reason: Server is in single user mode. Only one administrator can connect at this time. Ну пущает в sqlcmd (((

Argon
# Комментарий от 2010-11-30, 10:47

Кто-то уже успел потклчиться к серверу. Перезапусти службу MS Sql Server и подключись первым через sqlcmd.

Евгений
# Комментарий от 2011-03-06, 14:35

Удалил доменного админа из SQL, а пользователь sa заблокирован, других админов нет. Огромное спасибо!!!! Выручил. Думал вешалка. Не надеялся…. Но все получилось, без шума и пыли.

Владилена
# Комментарий от 2011-04-07, 11:59

Блин, дружище!!!!
Чтоб я без тебя делала!!!
Спасиииииииииииибо тебе огромное!!!!!

Олег
# Комментарий от 2011-07-05, 18:15

1000 благодарностей думал кирдык, аж вспотел! молодца! огромное спасибо еще раз

HarpyWar
# Комментарий от 2011-09-05, 22:30

Что делать, если пишет нет разрешения?

C:\Program Files\Microsoft SQL Server\100\Tools\Binn>sqlcmd -E
1> EXEC sp_addsrvrolemember ‘WIN-58VES4PDRM8\Администратор’, ‘sysadmin’
2> GO
Сообщение 15247, уровень 16, состояние 1, сервер WIN-58VES4PDRM8\SQLEXPRESS, про
цедура sp_addsrvrolemember, строка 29
У пользователя нет разрешений на выполнение данного действия.

Argon
# Комментарий от 2011-09-06, 00:33

Нужно убедиться, что предыдущие шаги были выполнены успешно ;)

Алексей
# Комментарий от 2012-04-19, 10:37

Добрый день, спасибо за пост.
Вопрос, а если я выполняю вышеописанные действия, но нет ни результата ни ошибок. Что можно еще сделать?

Argon
# Комментарий от 2012-04-27, 11:40

Что можно сделать… Попытаться понять, все ли делаете правильно, посмотреть логи.

Ефимов Геннадий
# Комментарий от 2012-06-09, 15:11

Небольшие дополнения:
1) Лучше использовать дополнительную опцию в команде sqlcmd (или osql): -S Полное_имя_экземпляра (S — большое). Если не известные экземпляры, то попытаться использовать -L. А еще лучше -? и google sqlcmd.exe syntax
2) Если включен UAG, то лучше повысить привилегии, на случай если пользователя под которым выполняется действие нет в логинах sql’а
3) Если используется кластер, то необходимо остановить службы в кластере, а потом на текущем владельце производить все указанные манипуляции. При этом ресурс имени, IP и диска останавливать не нужно.
4) Если ничего не получается с командой net start, то попробовать запустить экземляр в ручном режиме: %programfiles%\microsoft….\…\sqlservr.exe -m

Argon
# Комментарий от 2012-06-10, 13:11

Спасибо, Гена!

Михаил
# Комментарий от 2013-01-22, 12:53

Argon Большой тебе респект!

Kodiak
# Комментарий от 2013-02-13, 06:26

У меня не получилось по написанному тут… Сделал по другому:

net stop SQLSERVER_SERVICENAME
net start SQLSERVER_SERVICENAME /m

sqlcmd -S COMPUTERNAME\SQLSERVERNAME -E

или так, если хочется работать через SQL Server Management Studio:

«C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\Ssms.exe» -S COMPUTERNAME\SQLSERVERNAME -E

Собственно запрос:
————————————————————
USE [MASTER]
GO
CREATE LOGIN [NEW_ADMIN_USERNAME] WITH PASSWORD=N’pass@word1′, DEFAULT_DATABASE=[master], CHECK_EXPIRATION=ON, CHECK_POLICY=ON
GO
EXEC sp_addsrvrolemember ‘NEW_ADMIN_USERNAME’, ‘sysadmin’
GO
————————————————————

net stop SQLSERVER_SERVICENAME
net start SQLSERVER_SERVICENAME

Затем вхожу не под виндовой аутентификацией, а под SQLной.

Сергей
# Комментарий от 2013-05-15, 14:06

помогло только в случае запуска SQL в обычном режиме. при запуске в однопользовательском — не работало!

BigL
# Комментарий от 2017-05-05, 16:15

Господа, имея локального админа, проще запустить smms от админа и добавить юзера.

Добавить комментарий