не может войти как пользователь root mysql из учетной записи обычного пользователя в Ubuntu 16.04

Я только что установил Ubuntu 16.04 LTS вместе с пакетами php, mariadb и nginx. Я запустил mysql_secure_installation и изменил пароль root.

Теперь, когда я пытаюсь войти в mysql, используя учетную запись root, во время входа в Ubuntu как обычная учетная запись пользователя, доступ запрещен.

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

Что я делаю не так?

212
задан 11 June 2016 в 13:05

11 ответов

Я недавно обновляю свою Ubuntu 15.04 до 16,04, и это работало на меня:

  1. Первый, подключение в Проверке sudo mysql

    sudo mysql -u root
    
  2. Ваши учетные записи, существующие в Вашем дб

    SELECT User,Host FROM mysql.user;
    +------------------+-----------+
    | User             | Host      |
    +------------------+-----------+
    | admin            | localhost |
    | debian-sys-maint | localhost |
    | magento_user     | localhost |
    | mysql.sys        | localhost |
    | root             | localhost |
    
  3. , Удаляют текущую учетную запись

    mysql> DROP USER 'root'@'localhost';
    Query OK, 0 rows affected (0,00 sec)
    
  4. root@localhost, Воссоздают Вашего пользователя

    mysql> CREATE USER 'root'@'%' IDENTIFIED BY '';
    Query OK, 0 rows affected (0,00 sec)
    
  5. , Дают полномочия Вашему пользователю (не забывайте сбрасывать полномочия)

    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)
    
  6. MySQL Exit и пытается снова соединиться без sudo.

я надеюсь, что это поможет кому-то :)

0
ответ дан 11 June 2016 в 23:05
  • 1
    Этот ответ полезен, но OP также упоминает, что они хотят заменить новый корневой каталог старым корневым каталогом (который может быть немного хитрым с точки зрения конфигурации и мог бы иметь некоторые непреднамеренные эффекты). – Zanna 17 October 2017 в 17:57

Если Вы устанавливаете 5.7 и не предоставляете пароль root пользователь, это будет использовать auth_socket плагин. Тот плагин не заботится и не нуждается в пароле. Это просто проверяет, соединяет ли пользователь использование сокета UNIX и затем сравнивает имя пользователя.

Взятый от Пароля пользователя Изменения в MySQL 5.7 С "плагином: auth_socket"

Таким образом, чтобы к измениться plugin назад к mysql_native_password:

  1. Вход в систему с sudo:

    sudo mysql -u root
    
  2. Изменитесь 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;
139
ответ дан 11 June 2016 в 23:05
  • 1
    Как это перемещает что-нибудь? Все, что это делает, выключают подкачку. – Panther 8 October 2017 в 02:54

Попытайтесь создать новую учетную запись mysql, для меня она работала (mysql 5.7.12):

  1. Вход в систему как sudo:

    sudo mysql -uroot
    
  2. Создают нового пользователя и предоставляют ему полномочия (никакой пароль):

    CREATE USER 'admin'@'localhost' IDENTIFIED BY '';
    GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost';
    
  3. Вход в систему как новый пользователь:

    mysql -uadmin
    
0
ответ дан 11 June 2016 в 23:05
  • 1
    Этот ответ на самом деле не работает теперь. I' ll должны вырыть еще немного. – Geoffrey Wheeler 1 November 2017 в 23:37

Попробуйте этот код сначала,

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;
0
ответ дан 11 June 2016 в 23:05
  • 1
    disabled autologin - по крайней мере, который должен был зафиксировать его. –  9 July 2018 в 20:56

У меня была та же проблема, и выполнение следующего зафиксировало ее:

mysql_upgrade --force
0
ответ дан 11 June 2016 в 23:05
  • 1
    That' s корректный, вторичный дисплей должен быть подключен сначала. – marko 7 October 2017 в 19:54

Если Вы просто выполните команду mysql при пользователе root, то Вы будете предоставленным доступом без попросившего пароля, потому что аутентификация сокета включила для root@localhost..

единственный способ установить пароль состоит в том, чтобы переключиться на собственную аутентификацию как:

$ sudo mysql

mysql> ИЗМЕНЯЮТ ПОЛЬЗОВАТЕЛЯ 'корень' 'localhost' ОТОЖДЕСТВЛЕННЫЙ С mysql_native_password 'тестом';

0
ответ дан 11 June 2016 в 23:05

Короче говоря, на 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, поскольку другие пользователи будут добавлены вручную не часть начальной установки/обновления.

22
ответ дан 11 June 2016 в 23:05
  • 1
    Только добавить что отнесенная утилита, в случае, если Вы don' t установили его, получен доступ 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 значение, сбросьте полномочия и продолжить жизнь.

0
ответ дан 11 June 2016 в 23:05
  • 1
    Я попробовал то, что Вы сказали. Но я can' t, кажется, находят опцию Mirror Output. Он потому что я haven' t подключенный к другому дисплею теперь? – Caramello 7 October 2017 в 19:54

Я должен был сделать две вещи (благодаря @Todor и @Loremhipsum):

update mysql.user set plugin = 'mysql_native_password' where User='root';
grant all privileges on *.* to 'root'@'localhost';

и затем:

FLUSH PRIVILEGES;

я не рекомендовал бы отбросить пользователя root.

0
ответ дан 17 April 2019 в 04:26

Если Вы установили MySQL/MariaDB из основного репозитория, пользователи не могут войти в MySQL как пользователь root MySQL от их логинов Unix (не применимый, если они имеют доступ sudo )

  1. Вход в систему корневой оболочки MySQL:

    $ sudo mysql -u root -p
    
  2. Выполняются ниже запросов:

    use mysql;
    update user set plugin='mysql_native_password' where user='root';
    flush privileges; 
    quit;
    
  3. Открывают новую оболочку, затем:

    $ mysql -u root -p
    

Источник

0
ответ дан 17 April 2019 в 04:26

Максимальная безопасность

Поскольку аутентификация unix является наиболее безопасной аутентификацией, лучше всего оставить учетную запись root по умолчанию как есть (т. е. продолжать использовать аутентификацию сокетов unix без пароля) и если вы не используете учетную запись root, используйте ее через sudo. Если у злоумышленника есть доступ root/sudo; тогда они уже имеют полный контроль над вашим сервером...

Когда вам нужно получить доступ к MySQL/MariaDB с помощью альтернативного метода (т. е. не CLI), создайте нового пользователя MySQL/MariaDB с паролем и только необходимыми разрешениями.

0
ответ дан 3 February 2021 в 00:52

Другие вопросы по тегам:

Похожие вопросы: