Включить беспарольный доступ к MySQL


15

Как я могу удалить свой пароль для MySQL? Я не хочу иметь пароль для подключения к базе данных. Мой сервер работает под управлением Ubuntu.


Просто ради интереса, почему вы не хотите пароль?
Джон Гарденье

Например, я сталкиваюсь с ошибками при запуске «dpkg-reconfigure phpmyadmin». Он останавливается с ошибкой 1045, когда доступ запрещен root @ localhost "пароль: нет" и заканчивается.
Lacek

Ответы:


29

Лично я думаю, что вместо этого лучше установить пароль и сохранить его в /root/.my.cnf:

Первый:

mysqladmin -u root password 'asdfghjkl'

Затем отредактируйте корневой файл .my.cnf:

[client]
password = asdfghjkl

Обязательно chmod 0600 .my.cnf.

Теперь у вас есть пароль, но он больше не запрашивается. Моя установка по умолчанию для сервера MySQL - это совершенно произвольный уникальный пароль для каждого сервера MySQL, сохраненный в файле .my.cnf, например так.


1
Я полностью согласен с настройкой вашей среды для автоматической аутентификации вас против удаления пароля.
Зоредаче

2
Возможно, вам понадобятся кавычки вокруг этого пароля в .my.cnf. Без меня это не сработало.
user67641

1
@ user67641: Может зависеть от версии и того, что находится в вашем пароле ... Все мои представляют собой длинные случайные строки буквенно-цифровых символов (без специальных символов) и не нуждаются в кавычках.
Freiheit

2
Если вам нужно создать /root/.my.cnf, стоит явно установить для него разрешения 0600, чтобы быть уверенным, что ни один другой пользователь не сможет отследить. В большинстве случаев обычные пользователи не могут войти в / root, но дополнительная паранойя почти всегда оправдана.
Дейл Андерсон

Отсутствует mv ./+%Y%m%d. $ Db.sql $ OUTPUT` между mysqldump и gzip
Сиддхарт

9

Если у вас действительно установлен пароль для MySQL, следуйте инструкциям в разделе Восстановление корневого пароля MySQL , а затем установите для вашего пароля значение null:

Для 5.7.6 и позже

ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass'

Для 5.7.5 и ранее

update user set password=PASSWORD("") where User='root';

* требуется перезагрузка БД (см. инструкции по ссылке), чтобы это вступило в силу.

sudo service mysql restart

в этом случае не забывайте «сбрасывать привилегии»;
Марко Рамос

@ meyosef - отметьте ответ как ответ, если он решил вашу проблему (нажмите на зеленую галочку под количеством голосов).
Jneves

Я думал, что мог бы использовать пустой пароль только для сокета Unix, а не loopback, но это невозможно. unix_socketПлагин делает немного другую вещь.
бассейн

9

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

через unix_socket:

grant usage on *.* to 'root'@'localhost' identified via unix_socket;

Это дает вам доступ к mysql без пароля для локально вошедшего в систему пользователя root. Btw. это значение по умолчанию в последних выпусках Ubuntu / Debian.

some_user@box: mysql -u root  # denied
root@box: mysql               # good
some_user@box: sudo mysql     # good, if "some_user" has sudo rights.

Пояснительные слайды: https://www.slideshare.net/ottokekalainen/less-passwords-more-security-unix-socket-authentication-and-other-mariadb-hardening-tips .


2
Добро пожаловать в SF! Прекрасный первый ответ: ясно, хорошее резюме, ссылка для дальнейшего изучения, и это добавляет что-то к существующему корпусу ответов. Я рад быть вашим первым голосом, и я надеюсь, что вы останетесь рядом, чтобы написать больше ответов, как этот.
MadHatter

Слайды в порядке, но это фактическая документация: mariadb.com/kb/en/library/authentication-plugin-unix-socket
JonnyJD

5

Вы также можете сделать:

grant all privileges on *.* to 'root'@'localhost' identified by '';

1

Я почти уверен, что по умолчанию пароль отсутствует, если вы пользователь admin и обращаетесь к нему локально. Вы находите что-то другое, чем это?

Это работает?

#> mysqladmin -u root password ''
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.