Как узнать пароль mssql

Как узнать пароль mssql

Всем привет, сегодня расскажу как изменить или сбросить пароль 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’

Источник

Расшифровка сохранённых паролей в MS SQL Server

Давным-давно, в далёкой галактике, пред-предыдущий администратор вашего SQL Server задал в нём linked server, используя специально для этой цели созданный аккаунт со сгенерированным паролем. Теперь вам с этим линком нужно что-то сделать, например перенести его на другой SQL Server; но просто так это не сделать, потому что никто не знает пароля от того аккаунта. Знакомая ситуация?

Хотя MSSQL не хранит пароли для своих аккаунтов, а хранит только их хэши, — с linked server-ами так не получится, потому что для успешной аутентикации перед внешним сервером нужно обладать паролем в открытом виде. Пароли для linked server-ов хранятся в зашифрованном виде в таблице master.sys.syslnklgns :

Читайте также:  посмотреть кто подключен к точке доступа на телефоне

Но не всё так просто. Во-первых, эта таблица недоступна из обычного SQL-соединения, а доступна только из Dedicated Administrative Connection. На DAC накладываются существенные ограничения: открыть DAC может только пользователь с привилегией sysadmin, и одновременно к одному серверу может быть открыто только одно DAC. Если у вас есть права локального администратора на сервере, но вы не можете войти в MSSQL с правами sysadmin, то есть обходной путь — заходить не из-под своего аккаунта, а из-под аккаунта сервиса MSSQL или даже из-под LocalSystem.

Во-вторых, несмотря на то, что поле с зашифрованным паролем называется pwdhash — это никакой не хэш, а зашифрованные данные. Ключ для расшифровки хранится в системной таблице master.sys.key_encryptions :

Этот ключ хранится в двух экземплярах: первый ( thumbprint=0x01 ) позволяет использование только из-под аккаунта сервиса MSSQL, второй ( thumbprint=0x0300000001 ) — из-под любого аккаунта на сервере. Обратите внимание, что ни один из хранящихся ключей не пригоден для «офлайн-расшифровки» паролей вне сервера, так что если злоумышленнику и удастся украсть данные обеих этих системных таблиц, ему это ничего не даст.

В-третьих, ключ для расшифровки сам зашифрован, и «ключ для ключа» хранится в системном реестре в HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\$InstanceName\Security\Entropy :

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

Для получения всех трёх составляющих и расшифровки сохранённых паролей, автор создал удобный PowerShell-скрипт.

Если запустить его из-под аккаунта локального администратора на сервере, он порадует вас примерно таким окошком:

Аналогичным образом расшифровываются и credentials, сохранённые в базе для выполнения команд ( xp_cmdshell и т.п.) от имени менее привилегированных аккаунтов, нежели сервис MSSQL.

С одной стороны, всё это кажется вопиющим примером security through obscurity: если расшифровка паролей для соединения с linked server-ами уже реализована в MSSQL, то почему нет возможности показать эти пароли забывчивому администратору? С другой стороны, с точки зрения безопасности всё весьма неплохо: для расшифровки паролей нужен доступ к серверу с правами локального администратора, а если злоумышленник получил такой доступ, то он уже и так может делать с сервером всё что захочет. Нежелательное повышение привилегий возможно лишь в том случае, если пароль от какого-нибудь linked server-а используется впридачу для чего-нибудь важного, например как пароль администратора того же сервера :^)

Источник

BIGLAN.RU

Дешифруем пароли пользователей в MSSQL 2005, 2008, 2012


Учетные записи 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.

К таблице 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» автоматизирует расшифровку паролей. Скрипт:

Читайте также:  Железистая гиперплазия эндометрия что

Скрипт должен быть запущен локально на 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

Источник

Дешифровка паролей к учетным записям в 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.

Источник

Изменяем пароль 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’

Источник

Обучающий проект