Всякое бывает и всякое не бывает, но лучше иметь проработку на будущее чтобы не метаться потом, с вопросом – А как? Так вот сейчас я разберу давно волновавший меня вопрос, что делать если на сервере базы данных MS SQL Server 2008 R2 который достался Мне в наследство от предыдущего системного администратора не оставил вообще никаких паролей для подключения в оснастку управления именуемую как SQL Management Studio. Конечно оно все работает до поры до времени, но вот это время всегда приходится на такой парадокс:
Все обычно падает в пятницу, а в понедельник, что не упало в пятницу.
Я же этого всячески избегаю и прорабатываю постоянно сценки и шаги по восстановлению и резервированию если что-то пойдет не так.
Что можно узнать из развернутого?
Start — Control Panel — Administrative Tools — Services, служба относящаяся к сервису MSSQL — SQL Server (MSSQLSERVER) при открытии ее свойств (Properties) и перехода на вкладку Log On работает от имени системной учетной записи. Это хорошо. Теперь в любое время когда у Вас запланированы регламентные работы делаем так, переопределяем запуск данной службы от имени учетной записи с правами (обязательно) администратора на этой системе, но сперва конечно же создаем пользователя:
Start — All Programs — Accessories — запускаем Command Prompt с правами администратора и создаем пользователи и даем ему права локального администратора:
C:\Windows\system32>net user ekzorchik 712mbddr@ /add
The command completed successfully.
C:\Windows\system32>net localgroup Administrators ekzorchik /add
The command completed successfully.
C:\Windows\system32>exit
Теперь во вкладке Log On свойств службы SQL Server меняем от имени кого будет происходить запуск службы как показано на представленном скриншоте ниже:
This account: .\ekzorchik
Password: 712mbddr@
Confirm password: 712mbddr@
Следом последует окно с текстом:
The account .\ekzorchik has been granted the Log On As a Service right.
The new logon name will not take effect until you stop and restart the service
По такому же принципу проделываем и для службы SQL Server Agent от имени кого запускать данную службу.
Ну все правильно изменения применятся когда служба будет остановлена, а после запущена.
C:\Windows\system32>net stop SQLSERVERAGENT
The SQL Server Agent (MSSQLSERVER) service is stopping..
The SQL Server Agent (MSSQLSERVER) service was stopped successfully.
C:\Windows\system32>net stop MSSQLSERVER
The SQL Server (MSSQLSERVER) service is stopping.
The SQL Server (MSSQLSERVER) service was stopped successfully.
C:\Windows\system32>net start SQLSERVERAGENT
The SQL Server Agent (MSSQLSERVER) service is starting.
The SQL Server Agent (MSSQLSERVER) service was started successfully.
Затем делаю Logoff, а потом Logon в систему под уже созданной локальной учетной записью ekzorchik. Открываю оснастку SQL Management Studio:
Start — All Programs — Microsoft SQL Server 2008 R2 — SQL Server Management Studio и авторизуюсь с использованием Windows Authentication
Нажимаю Connect, но в ответ вместо успешно входа получаю ошибку:
Делаю вывод что не прокатит такой фокус, вспоминая что еще можно сделать, вот в Ubuntu как сбрасываю пароль на учетную запись суперпользователя root в mysql я захожу в однопользовательский режим, интересно а тут такое есть.
Возвращаю все как было, т. е. Запуск службы от имени системы
Чтение документации на официальном сайте Microsoft привело меня вот к таким вот действиям по сбросу пароля на учетную запись SA:
Запускаю оснастку SQL Server Configuration Manager:
Start — All Programs — Microsoft SQL Server 2008 R2 — Configuration Tools — SQL Server Configuration Manager, затем останавливаю сервис SQL Server (MSSQLSERVER)
После чего остановленного сервиса открываю через правый клик его свойства (Properties), тут переключаюсь на вкладку Advanced (Расширенные) и в строке:
Startup Parameters после: -dC:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\master.mdf;-eC:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Log\ERRORLOG;-lC:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\mastlog.ldf
указываю ключ -mSQLCMD
. В итоге должно получиться следующее:
Теперь запускаю службу для применения настроек. Если по службам SQL в оснастке управления все хорошо, служба запустилась то переходим к следующему этапу.
Открываю консоль командной строки с правами администратора:
Start — All Programs — Accessories — запускаем Command Prompt с правами администратора
C:\Windows\system32>sqlcmd
1> create login recovery with password='712mbddr@'
2> go
1> sp_addsrvrolemember 'recovery','sysadmin'
2> go
1> quit
Снова останавливаю сервис SQL Server (MSSQLServer), запускаю свойства, перехожу на вкладку Advanced и убираю добавленный параметр в запуске и запускаю сервис снова.
Теперь пробую авторизоваться
Нажимаю Connect
Что теперь? А просто изменяем пароль sql учетной записи sa как и планировалось, а текущая останется на всякий случай:
(local) (SQL Server 10.50.1600 — recovery) — Security — Logins — выделяю учетную запись sa и через правый клик Properties ввожу новый пароль:
Password: 712mbddr@@
Confirm password: 712mbddr@@
И нажимаю OK. Разлогиниваюсь и проверяю что могу подключиться под учетной запись SQL:
File — Disconnect Object Explorer
File — Connect Object Explorer…
Нажимаю Connect и вуаля все получилось, как и было задумано.
На заметку: Но все можно проделать и из командной строки:
C:\Windows\system32>net stop mssqlserver
The SQL Server (MSSQLSERVER) service is stopping.
The SQL Server (MSSQLSERVER) service was stopped successfully.
C:\Windows\system32>net start mssqlserver /mSQLCMD
The SQL Server (MSSQLSERVER) service is starting.
The SQL Server (MSSQLSERVER) service was started successfully.
C:\Windows\system32>sqlcmd
1> <я_подключился>
Теперь я еще больше знаю по SQL Server 2008 R2 на всякий непредвиденный случай, вдруг у нас в отделе кто-то возьмет и намеренно все поменяет не предупредив ни кого. Задача поставленная в самом начале данной заметки выполнена. На этом я прощаюсь, с уважением автор блога — Олло Александр aka ekzorchik.