Я только что установил Ubuntu 16.04 LTS вместе с пакетами php
, mariadb
и nginx
. Я запустил mysql_secure_installation
и изменил пароль root.
Теперь, когда я пытаюсь войти в mysql
, используя учетную запись root, во время входа в Ubuntu как обычная учетная запись пользователя, доступ запрещен.
Когда я захожу с помощью sudo mysql
, mysql даже не спрашивает меня пароль. Если я запускаю mysql_secure_installtion
, я вижу, что старые настройки никогда не устанавливались постоянно.
Что я делаю не так?
Я недавно обновляю свою Ubuntu 15.04 до 16,04, и это работало на меня:
Первый, подключение в Проверке sudo mysql
sudo mysql -u root
Ваши учетные записи, существующие в Вашем дб
SELECT User,Host FROM mysql.user;
+------------------+-----------+
| User | Host |
+------------------+-----------+
| admin | localhost |
| debian-sys-maint | localhost |
| magento_user | localhost |
| mysql.sys | localhost |
| root | localhost |
, Удаляют текущую учетную запись
mysql> DROP USER 'root'@'localhost';
Query OK, 0 rows affected (0,00 sec)
root@localhost, Воссоздают Вашего пользователя
mysql> CREATE USER 'root'@'%' IDENTIFIED BY '';
Query OK, 0 rows affected (0,00 sec)
, Дают полномочия Вашему пользователю (не забывайте сбрасывать полномочия)
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
Query OK, 0 rows affected (0,00 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0,01 sec)
MySQL Exit и пытается снова соединиться без sudo.
я надеюсь, что это поможет кому-то :)
Если Вы устанавливаете 5.7 и не предоставляете пароль
root
пользователь, это будет использоватьauth_socket
плагин. Тот плагин не заботится и не нуждается в пароле. Это просто проверяет, соединяет ли пользователь использование сокета UNIX и затем сравнивает имя пользователя.
Взятый от Пароля пользователя Изменения в MySQL 5.7 С "плагином: auth_socket"
Таким образом, чтобы к измениться plugin
назад к mysql_native_password
:
Вход в систему с sudo:
sudo mysql -u root
Изменитесь plugin
и набор пароль с единственной командой:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'test';
Конечно, можно также использовать команду выше для установки пустого пароля.
Только для справки, (и MariaDB < 10.2
пользователи), там должен также иначе только измениться plugin
не обеспечивая пароль (оставляющий это пустой):
update mysql.user set plugin = 'mysql_native_password' where User='root';
// to change the password too (credits goes to Pothi Kalimuthu)
// UPDATE mysql.user SET plugin = 'mysql_native_password', Password = PASSWORD('secret') WHERE User = 'root';
FLUSH PRIVILEGES;
Попытайтесь создать новую учетную запись mysql, для меня она работала (mysql 5.7.12):
Вход в систему как sudo:
sudo mysql -uroot
Создают нового пользователя и предоставляют ему полномочия (никакой пароль):
CREATE USER 'admin'@'localhost' IDENTIFIED BY '';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost';
Вход в систему как новый пользователь:
mysql -uadmin
Попробуйте этот код сначала,
echo "CREATE USER 'root'@'localhost' IDENTIFIED BY 'root';" > your_init_file.sql
echo "GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;" >> your_init_file.sql
echo "FLUSH PRIVILEGES;" >> your_init_file.sql
и затем,
killall mysqld
mysqld_safe --init-file=$PWD/your_init_file.sql
затем нажимают Ctrl+Z
и тип: bg
для выполнения процесса от переднего плана в фон затем проверьте доступ:
mysql -u root -proot
mysql> show grants;
disabled autologin
- по крайней мере, который должен был зафиксировать его.
–
9 July 2018 в 20:56
У меня была та же проблема, и выполнение следующего зафиксировало ее:
mysql_upgrade --force
Если Вы просто выполните команду mysql при пользователе root, то Вы будете предоставленным доступом без попросившего пароля, потому что аутентификация сокета включила для root@localhost..
единственный способ установить пароль состоит в том, чтобы переключиться на собственную аутентификацию как:
$ sudo mysql
mysql> ИЗМЕНЯЮТ ПОЛЬЗОВАТЕЛЯ 'корень' 'localhost' ОТОЖДЕСТВЛЕННЫЙ С mysql_native_password 'тестом';
Короче говоря, на MariaDB
UPDATE mysql.user SET plugin = 'mysql_native_password',
Password = PASSWORD('NEWPASSWORD') WHERE User = 'root';
где Вы заменяете NEWPASSWORD паролем, Вы хотите, и все остальное дословно.
Проблема здесь - то, что, когда MariaDB или MySQL установлены/обновлены (особенно, если в какой-то момент корень установлен без пароля) затем в таблице Users пароль на самом деле пуст (или проигнорированный), и вход в систему зависит от пользователя системы, соответствующего пользователю MySQL. Можно протестировать это следующим образом путем переключения на системный корень и затем ввести:
mysql -uroot -p
Затем введите или пароль или неправильный пароль. Вы будете, вероятно, впущены. (Можно даже смочь войти в систему от корня Unix просто # mysql
поскольку пароль не важен, и пользователь определяется).
Таким образом, что происходит? Ну, если Вы входите в систему как корень и делаете следующее:
select User,host,plugin from mysql.user;
+----------------+-----------+-----------------------+
| User | host | plugin |
+----------------+-----------+-----------------------+
| root | localhost | auth_socket |
+----------------+-----------+-----------------------+
Вы отметите auth_socket
(который может читать unix_socket
на MariaDB). Эти сокеты игнорируют пароли и позволяют соответствующему пользователю UNIX войти без проверки пароля. Поэтому можно войти в систему с корнем, но не с другим пользователем.
Таким образом, решение состоит в том, чтобы обновить Пользователей для не использования auth_socket/unix_socket
и правильно набор пароль.
На MariaDB (<10.2, см. комментарии ниже), который находится на версии 16 Ubuntu по состоянию на 2017, который это должно удовлетворить. NEWPASSWORD является Вашим паролем. mysql_native_password
Вы вводите дословно.
UPDATE mysql.user SET plugin = 'mysql_native_password', Password = PASSWORD('NEWPASSWORD') WHERE User = 'root';
(Возможно, что установка плагина для освобождения работала бы. YMMV. Я не попробовал это. Таким образом, это - альтернатива.)
UPDATE mysql.user SET plugin = '', Password = PASSWORD('NEWPASSWORD') WHERE User = 'root';
Иначе:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'NEWPASSWORD';
Затем
FLUSH PRIVILEGES;
Для записи вовлечение решения, удаляя пользователя и воссоздавая это с '%' заблокировало меня полностью из базы данных и может вызвать другие проблемы, если Вы не добираетесь grant
оператор, точно правильный - легче просто обновить корень, Вы уже имеете.
По моему опыту, проблема только происходит с пользователем root, поскольку другие пользователи будут добавлены вручную не часть начальной установки/обновления.
apt-get install seahorse
– Dr Beco
5 January 2018 в 09:33
I’ve, адаптируя некоторые сценарии настройки, я создал для использования MariaDB и столкнулся с этой точной проблемой. Соединение большого количества информации здесь ответ Gazzer’s действительно нули в в проблеме; все это сводится к auth_socket
/ unix_socket
установка.
Поэтому при использовании MariaDB 5.5 (в соответствии с Ubuntu 14.04) и MariaDB 10 в соответствии с (Ubuntu 16.04), вхождении в MySQL и выполнении этой команды разрешил вещи сразу же:
UPDATE mysql.user SET plugin='' WHERE User='root';
FLUSH PRIVILEGES;
другой answers— включая самый высокий проголосовавший ответ с этого сообщения Loremhipsum— действительно поощряют плохие методы путем рекомендации отбрасывания пользователя и затем воссоздания их. Мне, который является довольно радикальным решением. Лучшая OS / простое решение OS, чтобы аннулировать эти plugin
значение, сбросьте полномочия и продолжить жизнь.
Я должен был сделать две вещи (благодаря @Todor и @Loremhipsum):
update mysql.user set plugin = 'mysql_native_password' where User='root';
grant all privileges on *.* to 'root'@'localhost';
и затем:
FLUSH PRIVILEGES;
я не рекомендовал бы отбросить пользователя root
.
Если Вы установили MySQL/MariaDB из основного репозитория, пользователи не могут войти в MySQL как пользователь root MySQL от их логинов Unix (не применимый, если они имеют доступ sudo )
Вход в систему корневой оболочки MySQL:
$ sudo mysql -u root -p
Выполняются ниже запросов:
use mysql;
update user set plugin='mysql_native_password' where user='root';
flush privileges;
quit;
Открывают новую оболочку, затем:
$ mysql -u root -p
Максимальная безопасность
Поскольку аутентификация unix является наиболее безопасной аутентификацией, лучше всего оставить учетную запись root по умолчанию как есть (т. е. продолжать использовать аутентификацию сокетов unix без пароля) и если вы не используете учетную запись root, используйте ее через sudo
. Если у злоумышленника есть доступ root/sudo; тогда они уже имеют полный контроль над вашим сервером...
Когда вам нужно получить доступ к MySQL/MariaDB с помощью альтернативного метода (т. е. не CLI), создайте нового пользователя MySQL/MariaDB с паролем и только необходимыми разрешениями.