Назад | Перейти на главную страницу

Это нормально, что можно получить доступ к MySQL как root без ввода пароля, хотя пароль установлен?

Я только что установил MySQL (Ver 14.14 Distrib 5.7.22) на Ubuntu 18.04 и обнаружил кое-что странное:

Я установил MySQL и использовал mysql_secure_installation чтобы установить пароль для root, но как только я вхожу в SSH с любым пользователем с sudo-правами, я могу просто получить доступ к MySQL без запроса на ввод пароля через mysql -u root или через mysql -u root -p & просто щелкнув ENTER (при запросе «Введите пароль:»).

Это нормально?

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

Пакеты MySQL Ubuntu (основанные на Debian) по умолчанию используют auth_socket плагин. С этим плагином при подключении с локальной машины пароль не требуется, но сервер идентифицирует пользователя операционной системы и сопоставляет этого пользователя. Итак, если вы являетесь пользователем root в системе и входите в систему, вы становитесь root. Это позволяет избежать предварительной установки пароля root MySQL.

Смотрите также https://wiki.debian.org/MySql

Ты должен бежать SHOW GRANTS FOR 'root'@'localhost';

Если в результатах отображается эта строка:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED VIA unix_socket WITH GRANT OPTION

а не эта строка:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY PASSWORD '*xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' WITH GRANT OPTION

это означает, что пользователь root автоматически аутентифицируется с помощью учетных данных сокета unix. Если вы этого не хотите, вы можете ввести команду GRANT вручную (не стреляйте себе в ногу при этом), которая переопределит предыдущую, например:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY 'mysecurepassword' WITH GRANT OPTION;

Теперь mysql запросит пароль, но может использоваться любым пользователем, имеющим доступ к сокету unix (поэтому по умолчанию просто используется mysql -u root -p не будучи root, но, конечно, зная пароль). Вы должны подумать, какой из них более безопасен.

Я не знаю почему mysql_secure_installation не объясняет об этом.

В Ubuntu 18.04 с MySql 5.7 это вообще не работает. Сделайте следующее:

использовать mysql

выберите плагин от пользователя, где user = 'root';

Вы заметите, что это плагин auth_socket, который отвечает за поведение, которое нам не нравится.

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

ALTER USER 'root' @ 'localhost' ИДЕНТИФИКАЦИЯ MYSQL_NATIVE_PASSWORD BY 'mypass';

Просто готово и работает!