Как мне получить имя пользователя и пароль MySQL?

158

Я потерял свое имя пользователя и пароль MySQL. Как я могу получить это?

завивать волосы щипцами
источник

Ответы:

186

Остановите процесс MySQL.

Запустите процесс MySQL с параметром --skip-grant-tables.

Запустите консольный клиент MySQL с опцией -u root.

Список всех пользователей;

SELECT * FROM mysql.user;

Сброс пароля;

UPDATE mysql.user SET Password=PASSWORD('[password]') WHERE User='[username]';

Но НЕ ЗАБУДЬТЕ к

Остановите процесс MySQL

Запустите процесс MySQL как обычно (т.е. без опции --skip-grant-tables)

когда вы закончите. В противном случае безопасность вашей базы данных может быть нарушена.

Ксенф Ян
источник
7
Думаю, вам не нужно перезапускать демон для сброса обычных пользователей. просто "FLUSH PRIVILEGES"; после обновления пароля пользователя. --skip-grant-tables требуется только для сброса пароля пользователя root! Это обычно не рекомендуется для стандартного сброса пользователя.
Амос Фоларин
Каково значение использования dpkg-reconfigure mysql-server-5.5команды для сброса корневого пароля MySQL?
phillipsK
@Xenph, почему вы говорите " Запустите консольный клиент MySQL с опцией -u root "? В этом нет никакого смысла, так как -uпри запуске сервера он игнорируется --skip-grant-tables.
Pacerier
15
В MySQL 5.7. * Нет столбца в mysql.userвызываемом password, используйте authentication_stringвместо этого.
Адиб Аруи
3
Я нашел это + stackoverflow.com/a/35277160/1604601 очень полезным
Форма Чужой Жизни
42

К сожалению, ваш пароль пользователя необратим. Он был хеширован односторонним хешем, который, если вы не знаете, необратим. Я рекомендую пойти с Xenph Yan выше и просто создать новый.

Вы также можете использовать следующую процедуру из руководства для сброса пароля для любых корневых учетных записей MySQL в Windows:

  1. Войдите в систему как администратор.
  2. Остановите сервер MySQL, если он работает. Для сервера, работающего в качестве службы Windows, перейдите в диспетчер служб:

Пуск -> Панель управления -> Администрирование -> Сервисы

Затем найдите службу MySQL в списке и остановите ее. Если ваш сервер не работает как служба, вам может потребоваться использовать диспетчер задач, чтобы принудительно остановить его.

  1. Создайте текстовый файл и поместите в него следующие операторы. Замените пароль на пароль, который вы хотите использовать.

    UPDATE mysql.user SET Password=PASSWORD('MyNewPass') WHERE User='root';
    FLUSH PRIVILEGES;

    В UPDATE и FLUSH заявления каждый должен быть написан на одной строке. Оператор UPDATE сбрасывает пароль для всех существующих корневых учетных записей, а оператор FLUSH сообщает серверу перезагрузить таблицы предоставления в память.

  2. Сохраните файл. В этом примере файл будет называться C: \ mysql-init.txt.
  3. Откройте окно консоли, чтобы перейти к командной строке:

    Меню Пуск -> Выполнить -> cmd

  4. Запустите сервер MySQL с помощью специальной опции --init-file :

    C:\> C:\mysql\bin\mysqld-nt --init-file = C:\mysql-init.txt

    Если вы установили MySQL в папку, отличную от C: \ mysql , измените команду соответствующим образом.

    Сервер запускает содержимое файла, названного параметром --init-file, при запуске, изменяя пароль каждой учетной записи root .

    Вы также можете добавить в команду параметр --console, если хотите, чтобы выходные данные сервера отображались в окне консоли, а не в файле журнала.

    Если вы установили MySQL с помощью мастера установки MySQL, вам может потребоваться указать параметр --defaults-file :

    C:\> "C:\Program Files\MySQL\MySQL Server 5.0\bin\mysqld-nt.exe" --defaults-file="C:\Program Files\MySQL\MySQL Server 5.0\my.ini" --init-file=C:\mysql-init.txt

    Соответствующий параметр --defaults-file можно найти с помощью диспетчера служб:

    Пуск -> Панель управления -> Администрирование -> Сервисы

    Найдите сервис MySQL в списке, щелкните его правой кнопкой мыши и выберите «Свойства». Поле Путь к исполняемому файлу содержит параметр --defaults-file .

  5. После успешного запуска сервера удалите C: \ mysql-init.txt .
  6. Остановите сервер MySQL, затем перезапустите его в обычном режиме. Если вы запускаете сервер как сервис, запустите его из окна Windows Services. Если вы запускаете сервер вручную, используйте любую команду, которую вы обычно используете.

Теперь вы сможете подключиться к MySQL с правами суперпользователя, используя новый пароль.

Джейк
источник
5
@ Джейк - спасибо за ответ. Я хотел поблагодарить его, но по какой-то причине стека overoverflow не позволят мне сделать это из-за репутации. Ваше объяснение «к сожалению, ваш пароль пользователя необратим. Он был хеширован односторонним хешем, который, если вы не знаете, необратим», был ключом к моему пониманию, почему все остальное, что я прочитал ТОЛЬКО в Google, дало мне указания изменить мой пароль. хорошие объяснения более проницательны, чем одни инструкции.
dsdsdsdsd
1
@ Jake Я не могу найти MySQL в списке услуг. Скажите, пожалуйста, что делать?
1
Почему твой mysqld-ntвместо mysqld?
Pacerier
Кстати, есть ли не файловая опция --init-file? (Что-то похожее на команду mysql.exe --execute.)
Pacerier
34

Улучшение наиболее полезного ответа здесь:

1] Нет необходимости перезапускать сервер mysql.
2] Проблема безопасности для сервера MySQL, подключенного к сети.

Нет необходимости перезагружать сервер MySQL.

используйте FLUSH PRIVILEGES;после обновления оператор mysql.user для смены пароля.

Оператор FLUSH сообщает серверу перезагрузить таблицы предоставления в память, чтобы он заметил изменение пароля.

--skip-grant-optionsПозволяет любому соединяться без пароля и со всеми привилегиями. Поскольку это небезопасно, вы можете захотеть

используйте --skip-grant-tables вместе с --skip-network для предотвращения подключения удаленных клиентов.

from: reference: сброс-разрешения-универсальный

ThinkingMonkey
источник
@ThinkingMonkey, разве это не предполагает, что у текущего вошедшего в систему пользователя есть права на изменение mysql.user? Однако часто это не так.
Pacerier
6

Хотя вы не можете напрямую восстановить пароль MySQL без брутфорсинга, возможно, есть и другой способ - если вы использовали MySQL Workbench для подключения к базе данных и сохранили учетные данные в «хранилище», вы - золотой.

В Windows учетные данные хранятся в папке % APPDATA% \ MySQL \ Workbench \ workbench_user_data.dat - зашифрованы с помощью CryptProtectData (без какой-либо дополнительной энтропии). Расшифровка легко peasy:

std::vector<unsigned char> decrypt(BYTE *input, size_t length) {
    DATA_BLOB inblob { length, input };
    DATA_BLOB outblob;

    if (!CryptUnprotectData(&inblob, NULL, NULL, NULL, NULL, CRYPTPROTECT_UI_FORBIDDEN, &outblob)) {
            throw std::runtime_error("Couldn't decrypt");
    }

    std::vector<unsigned char> output(length);
    memcpy(&output[0], outblob.pbData, outblob.cbData);

    return output;
}

Или вы можете проверить этот поток DonationCoder для исходного + исполняемого файла быстрой и грязной реализации.

snemarch
источник
2
Это было прекрасно. Существует файл с исходным кодом в упомянутом потоке snemarch для получения пароля моей учетной записи пользователя, хранящегося в моем хранилище MySQL Workbench. Хотя эти другие методы, вероятно, сработали бы, если бы у меня были права на чтение или обновление пользовательской таблицы.
RobbZ
Но, условно говоря, очень мало людей используют Workbench.
Pacerier
Вот еще одна реализация, которую можно запустить после сборки с помощью Visual Studio для восстановления сохраненной в Workbench информации об имени пользователя и пароле: github.com/wclear/MySQLWorkbenchPasswordViewer
bnp887
6

Сделать это без простоя

Выполните следующую команду в Терминале, чтобы подключиться к СУБД (вам нужен root-доступ):

sudo mysql -u root -p;

запустите обновление пароля целевого пользователя (для моего примера имя пользователя mousaviи его пароль должны быть 123456):

UPDATE mysql.user SET authentication_string=PASSWORD('123456') WHERE user='mousavi';  

на этом этапе вам необходимо выполнить сброс, чтобы применить изменения:

FLUSH PRIVILEGES;

Готово! Вы сделали это без остановки или перезапуска службы MySQL.

SMMousavi
источник
5

Если у вас есть root-доступ к серверу, на котором работает mysql, вы должны остановить сервер mysql, используя эту команду

sudo service mysql stop

Теперь запустите mysql, используя эту команду

sudo /usr/sbin/mysqld --skip-grant-tables  --skip-networking &

Теперь вы можете войти в MySQL, используя

sudo mysql
FLUSH PRIVILEGES;
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('MyNewPass');

Полные инструкции можно найти здесь http://www.techmatterz.com/recover-mysql-root-password/

Саджад Ашраф
источник
3

Войдите в MySql из windows cmd, используя существующего пользователя:

mysql -u username -p
Введите пароль: ****

Затем выполните следующую команду:

mysql> SELECT * FROM mysql.user;

После этого скопируйте зашифрованный пароль md5 для соответствующего пользователя, и в Интернете появилось несколько приложений для расшифровки пароля. Используя этот расшифрованный пароль и используйте его для входа в следующий раз. или обновите пароль пользователя с помощью текущей команды:

mysql> UPDATE mysql.user SET Password=PASSWORD('[password]') WHERE User='[username]';

Затем войдите, используя новый пароль и пользователя.

Syeful Ислам
источник
0

Если у вас настроен ODBC, вы можете получить пароль из файла конфигурации ODBC. Это в /etc/odbc.ini для Linux и в папке Software / ODBC в реестре в Windows (их несколько - может потребоваться некоторая охота)

samplesize1
источник
0

Сохраните файл. В этом примере файл будет называться C: \ mysql-init.txt. он просит административные разрешения для сохранения файла

user12261119
источник
-1

Хотя строгая, логическая, компьютерная science'ish интерпретация вопроса ора был бы требовать и «Как я могу получить мой MySQL имя пользователя» и «пароль» - я думал , что это может быть полезным для кого - то входит также или интерпретация. Другими словами ...

1) Как мне получить имя пользователя MySQL?

ИЛИ

2) пароль

Это последнее условие, по-видимому, уже достаточно проработано, поэтому я не буду его беспокоить. Ниже приведено решение только для случая «Как получить мое имя пользователя MySQL». Е.И.В..

Чтобы найти ваше имя пользователя mysql, выполните следующие команды из оболочки mysql ...

ВЫБЕРИТЕ пользователя ИЗ mysql.user;

Он напечатает таблицу всех пользователей MySQL.

блеск
источник
1
Это поздний ответ, и вы должны публиковать его только в том случае, если ваше решение явно отличается от уже опубликованного или принятого. Дело не в этом, особенно в том, что ваш ответ дублирует принятый.
m.cekiera