Я только что установил 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';
Просто готово и работает!