как узнать пароль sql сервера
Дешифровка паролей к учетным записям в MSSQL
Некоторое время назад я написал статью о дешифровке паролей для связанных серверов (https://blog.netspi.com/decrypting-mssql-database-link-server-passwords/). Используя ту же самую технику, возможна дешифровка паролей учетных записей SQL-сервера. Я немного модифицировал предыдущий скрипт, предназначенный для расшифровки паролей, а именно поменял местонахождение зашифрованных паролей. В итоге получился обновленный Powershell-скрипт для расшифровки паролей учетных записей.
Замечания те же самые, что и при расшифровке паролей для связанных серверов. Плохая новость в том, что для дешифровки требуются привилегии сисадмина (sysadmin) SQL-сервера и локального администратора Windows-сервера. С другой стороны, если злоумышленник обладает правами администратора, то потенциально сможет расшифровать большинство сохраненных паролей. Так что не следует хранить бесхозные учетные записи в базе данных, и не наделять ненужными правами те учетные записи, которые используются для доступа к внешним ресурсам.
Учетные записи SQL-сервера
Microsoft SQL Server позволяет добавлять учетные записи в базу данных. Подобные аккаунты, обычно представляющие собой комбинацию имени пользователя и пароля, могут использоваться для доступа к ресурсам, находящимся вне SQL-сервера. Одна учетная запись может использоваться несколькими пользователями.
Простой пример – использование учетной записи прокси-сервера. Во время запуска xp_cmdshell по умолчанию используются права служебной учетной записи SQL-сервера (SQL Server service account). Однако учетную запись прокси-сервера можно сконфигурировать так, что сохраненная процедура xp_cmdshell использовала менее привилегированный аккаунт операционной системы, а не служебную учетную запись, часто наделенную расширенными полномочиями.
Когда учетные записи сохраняются в базу SQL-сервера, пароли шифруются при помощи обратимого алгоритма шифрования (чтобы не возникало никаких проблем при использовании этих аккаунтов). Следовательно, становится возможным расшифровка паролей, чему, собственно, и посвящена данная статья.
Где хранятся пароли
MSSQL хранит пароли к учетным записям в таблице master.sys.sysobjvalues. Я смог выяснить местонахождение зашифрованных паролей после просмотра описания представления master.sys.credentials при помощи следующего запроса:
Компания Microsoft дает довольно размытое описание таблицы master.sys.sysobjvalues: «Таблица есть в каждой базе данных и хранит значения общих свойств для каждой записи. На каждое свойство предусмотрена отдельная строка таблицы». Таблица master.sys.sysobjvalues содержит огромное количество информации. У свойств, имеющих отношение к учетным записям, в колонке valueclass находится значение 28. Зашифрованные пароли хранятся в колонке imageval с valclass=28 и valnum=2.
Рисунок 1: Строки, имеющие отношение к зашифрованным учетным записям
К таблице master.sys.sysobjvalues можно получить доступ только при помощи выделенного административного соединения (Dedicated Administrative Connection, DAC) (более подробно про DAC написано в http://technet.microsoft.com/en-us/library/ms178068%28v=sql.105%29.aspx).
Алгоритм шифрования в MSSQL
Основные моменты, касающиеся шифрования в MSSQL, описаны в статье https://blog.netspi.com/decrypting-mssql-database-link-server-passwords/. В двух словах: пароли шифруются при помощи главного ключа службы (Service Master Key, SMK), который можно получить, используя DPAPI (Data Protection Application Programming Interface).
В зависимости от версии MSSQL-сервера пароли шифруются при помощи алгоритма AES (MSSQL 2012+) или 3DES (MSSQL 2008 и более ранние версии). Пароли, хранящиеся в таблице sys.sysobjvalues в колонке imageval, перед дешифровкой должны быть слегка обработаны (тем же самым способом, что пароли связных серверов). После парсинга пароли можно расшифровать при помощи SMK.
Расшифровка паролей при помощи powershell-скрипта
Немного модифицированная версия «Get-MSSQLLinkPasswords.psm1» с предсказуемым именем «Get-MSSQLCredentialPasswords.psm1» автоматизирует расшифровку паролей. Скрипт находится здесь https://github.com/NetSPI/Powershell-Modules/blob/master/Get-MSSQLCredentialPasswords.psm1
Скрипт должен быть запущен локально на MSSQL-сервере (поскольку DPAPI требует доступа к локальному машинному ключу). Пользователь, запускающий скрипт, должен иметь привилегии администратора (sysadmin) ко всем экземплярам базы данных (требуется для DAC-соединения) и локального администратора Windows-сервера (для доступа к байтам с энтропией в реестре). Кроме того, если включен контроль учетных записей пользователя (User Account Control, UAC), скрипт должен быть запущен от имени администратора.
Ниже показан алгоритм работы скрипта.
1. Идентификация всех экземпляров MSSQL на сервере.
2. Создание DAC-соединения к каждому экземпляру.
3. Выборка зашифрованных паролей из таблицы master.sys.sysobjvalues (колонка imageval) для каждого экземпляра.
4. Получение главного ключа службы (Service Master Key, SMK) из таблицы master.sys.key_encryptions (строки со значениями key_id равным 102). Получение версии SQL-сервера, зашифрованной как LocalMachine, на основе колонки thumbprint.
5. Извлечение значения энтропии из реестра по адресу HKLM:\\SOFTWARE\Microsoft\Microsoft SQL Server\[instancename]\Security\Entropy.
6. Использование полученной информации для дешифровки SMK.
7. Определение алгоритма шифрования (AES или 3DES), который использовался для шифрования SMK, на основе версии SQL-сервера и длины SMK-ключа.
8. Дешифровка паролей при помощи SMK.
9. В случае успеха скрипт отображает расшифрованные пароли.
Пример работы скрипта:
PS C:\> Get-MSSQLCredentialPasswords | out-gridview
Рисунок 2: Результат работы скрипта
Скрипт был протестирован на MSSQL 2008 и 2012.
Как узнать пароль sql сервера
Всем привет, сегодня расскажу как изменить или сбросить пароль sa sql сервера. Напомню sa это логин пользователя в MS SQL, имеющий по умолчанию самые высокие привилегии, сама учетка локальная, зачастую даже выключенная, но тем не менее часто используемая. Может получиться такая ситуация, что вы забыли от нее пароль и тем самым потеряли доступ к базам данных, сегодня вы научитесь это обходить и восстанавливать доступ до ваших БД.
И так у вас есть MS SQL, как установить sql я уже рассказывал, кто не знает посмотрите. У вас задача сменить пароль для пользователя sa sql.
Пароль sa по умолчанию
Сменить пароль sa в sql через графический интерфейс
Начнемс, откройте пуск и идите по пути Все программы > Microsoft SQL Server 2012 R2 > Среда SQL Server Management Studio
Либо вы можете открыть командную строку и ввести там ssms.
Не важно какой способ вы выбрали эффект будет один и тот же у вас откроется SQL Server Management Studio. Но второй способ явно быстрее.
По умолчанию стоит проверка подлинности Windows, что означает, что вы сможете войти только с локальной учетной записью Windows или доменной, главное чтобы были права.
Как видите, учетная запись sa по умолчанию отключена, но это не помешает вам сменить ей пароль.
ms sql позволяет сбросить пароль sa через ее свойства, для этого щелкаете правым кликом и выбираете свойства из контекстного меню.
На вкладке общие вы увидите, поле для ввода нового пароля, единственное учтите, что если стоит галка Требовать использование политики паролей, вам придется придумать стойкий пароль отвечающий требованиям безопасности, а именно
Если галку снять, то можно задать что угодно, я задал например от 1 до 6. Как видите сменить пароль sa в sql, проще паренной репы.
Единственное, если вы хотите использовать учетную запись sa, то ее нужно включить, для этого перейдите в пункт состояние и укажите Имя входя Включено.
Еще нюанс, вы же помните, что у вас стоит проверка подлинности Windows, а это значит, что нам это не подходит для sa. Щелкнем правым кликом по названию сервера, вверху иерархии и выберем свойства.
На вкладке безопасность, выберем вариант Проверка подлинности SQL Server и Windows. Теперь вы можете заходить с помощью пользователя sa в sql.
Если при попытке войти Management Studio выдает ошибку 233, что подключение к серверу успешно установлено, но затем произошла ошибка при входе, то сделайте следующее.
Откройте Пуск > Панель управления > Администрирование > Службы и перезапустите службу SQL Server.
Как видите, теперь я успешно залогинился.
Сменить пароль sa в sql через командную строку
Чтобы в sql сбросить пароль sa через командную строку воспользуйтесь вот такими командами.
Данной командой вы увидите все доступные сервера MS SQL их SPN
Далее вводите команду
Если вылезет сообщение Password validation failed. The password does not meet Windows policy requirements because it is too short. То задайте более строгий пароль.
Все после этого вы сбросите пароль sa в sql.
Еще вариант использования osql это вот так
затем мы пытаемся подключиться под доверенной учетной записей ОС
И последний рубеж
ALTER LOGIN SA WITH PASSWORD= ‘new_password’
она заменит пароль на new_password
С помощью программы Asunsoft SQL Password Geeker
Есть утилита Asunsoft SQL Password Geeker, к сожалению платная, но способная выполнить поставленную задачу. Запускаем ее жмем Browse далее идем по пути C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA и открываем master.mdf
теперь, чтобы сбросить пароль sa в sql, выберите его и нажмите Reset.
Сменить пароль sa в монопольном режиме
Есть еще четвертый способ поменять пароль от sa, и заключается он в запуске MS SQL в однопользовательском режиме (single-user mode). Что нам потребуется.
Первое это останавливаем MS SQL Server, можно через службы, а можно и из командной строки
Далее открываете реестр Windows и переходите в ветку
Теперь запускаете MS SQL командой
Теперь SQL запущен в однопользовательском режиме и позволяет любому члену локальной группы администраторов компьютера подсоединяться к экземпляру SQL Server с правами sysadmin, но нужно SQL об этом сказать. Посмотреть режим работы можно в свойствах службы.
В командной строке пишем
sqlcmd.exe: EXEC sp_addsrvrolemember ‘имя сервера\имя пользователя’, ‘sysadmin’
Изменяем пароль sa в MS SQL
Меняем пароль sa в sql
«sa» — это логин пользователя в MS SQL, имеющий по умолчанию самые высокие привилегии, сама учетка локальная, зачастую даже выключенная, но тем не менее часто используемая. Если вы потеряли или забыли пароль от этой учетки «sa», то у вас не будет доступа к управлению вашими БД.
Пароль sa по умолчанию
Сменить пароль sa в sql через графический интерфейс
Начнемс, откройте пуск и идите по пути Все программы > Microsoft SQL Server 2012 R2 > Среда SQL Server Management Studio
Либо вы можете открыть командную строку и ввести там ssms.
У вас откроется SQL Server Management Studio.
По умолчанию стоит проверка подлинности Windows, что означает, что вы сможете войти только с локальной учетной записью Windows или доменной, главное чтобы были права.
Учетная запись sa по умолчанию отключена, но это не помешает вам сменить ей пароль.
ms sql позволяет сбросить пароль sa через ее свойства, для этого щелкаете правым кликом и выбираете свойства из контекстного меню.
На вкладке общие вы увидите, поле для ввода нового пароля, единственное учтите, что если стоит галка Требовать использование политики паролей, вам придется придумать стойкий пароль отвечающий требованиям безопасности, а именно
Если галку снять, то можно задать новый пароль и сохранить. Пароль на пользователя sa в sql изменен.
Единственное, если вы хотите использовать учетную запись sa, то ее нужно включить, для этого перейдите в пункт состояние и укажите Имя входя Включено.
Еще нюанс, вы же помните, что у вас стоит проверка подлинности Windows, а это значит, что нам это не подходит для sa. Щелкнем правым кликом по названию сервера, вверху иерархии и выберем свойства.
На вкладке безопасность, выберем вариант Проверка подлинности SQL Server и Windows. Теперь вы можете заходить с помощью пользователя sa в sql.
Если при попытке войти Management Studio выдает ошибку 233, что подключение к серверу успешно установлено, но затем произошла ошибка при входе, то сделайте следующее.
Откройте Пуск > Панель управления > Администрирование > Службы и перезапустите службу SQL Server.
Тогда подключение проходит успешно и без ошибок.
Сменить пароль sa в sql через командную строку
Чтобы в sql сбросить пароль sa через командную строку воспользуйтесь командами.
Данной командой вы увидите все доступные сервера MS SQL их SPN
Далее вводите команду
Если вылезет сообщение Password validation failed. The password does not meet Windows policy requirements because it is too short. То задайте более строгий пароль.
Все после этого вы сбросите пароль sa в sql.
Еще вариант использования osql это вот так
cd C:\Program Files\Microsoft SQL Server\110\Tools\Binnзатем мы пытаемся подключиться под доверенной учетной записей ОС
И последний рубеж
ALTER LOGIN SA WITH PASSWORD= ‘new_password’
она заменит пароль на new_password
С помощью программы Asunsoft SQL Password Geeker
Есть утилита Asunsoft SQL Password Geeker, она платная, но способная выполнить поставленную задачу. Запускаем ее жмем Browse далее идем по пути C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA и открываем master.mdf
теперь, чтобы сбросить пароль sa в sql, выберите его и нажмите Reset.
Сменить пароль sa в монопольном режиме
Есть еще четвертый способ поменять пароль от sa, и заключается он в запуске MS SQL в однопользовательском режиме (single-user mode).
Первое это останавливаем MS SQL Server, можно через службы, а можно и из командной строки
Далее открываете реестр Windows и переходите в ветку
Теперь запускаете MS SQL командой
Теперь SQL запущен в однопользовательском режиме и позволяет любому члену локальной группы администраторов компьютера подсоединяться к экземпляру SQL Server с правами sysadmin, но нужно SQL об этом сказать. Посмотреть режим работы можно в свойствах службы.
В командной строке пишем
cd C:\Program Files\Microsoft SQL Server\110\Tools\Binnsqlcmd.exe: EXEC sp_addsrvrolemember ‘имя сервера\имя пользователя’, ‘sysadmin’
Забыт пароль на учетную запись SA
Всякое бывает и всякое не бывает, но лучше иметь проработку на будущее чтобы не метаться потом, с вопросом — А как? Так вот сейчас я разберу давно волновавший меня вопрос, что делать если на сервере базы данных 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 меняем от имени кого будет происходить запуск службы как показано на представленном скриншоте ниже:
Confirm password: 712mbddr@
Следом последует окно с текстом:
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
Теперь запускаю службу для применения настроек. Если по службам 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 ввожу новый пароль:
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
Теперь я еще больше знаю по SQL Server 2008 R2 на всякий непредвиденный случай, вдруг у нас в отделе кто-то возьмет и намеренно все поменяет не предупредив ни кого. Задача поставленная в самом начале данной заметки выполнена. На этом я прощаюсь, с уважением автор блога — Олло Александр aka ekzorchik.
Используйте прокси ((заблокировано роскомнадзором, используйте vpn или proxy)) при использовании Telegram клиента:
Поблагодари автора и новые статьи
будут появляться чаще 🙂
Карта МКБ: 4432-7300-2472-8059
Большое спасибо тем кто благодарит автора за практические заметки небольшими пожертвованиями. С уважением, Олло Александр aka ekzorchik.