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

95

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

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

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

Что я делаю неправильно?

    
задан codescope 02.05.2016 в 13:45
источник

10 ответов

160

Недавно я обновил Ubuntu 15.04 до 16.04, и это сработало для меня:

  1. Сначала подключитесь в sudo mysql

    sudo mysql -u root
    
  2. Проверьте свои учетные записи в вашем db

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

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

    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 и попытайтесь подключиться без sudo.

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

    
ответ дан Loremhipsum 08.06.2016 в 11:04
источник
58
  

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

Взято из Изменить пароль пользователя в MySQL 5.7 С помощью "plugin: 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 users) существует еще один способ изменить 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;
    
ответ дан Todor 23.07.2016 в 09:46
источник
3

Проблема заключается в том, что когда MariaDB или MySQL установлены / обновлены (особенно если в какой-то момент root установлен без пароля), то в таблице Users пароль фактически пуст (или игнорируется), а вход в систему зависит от пользователь системы, соответствующий пользователю MySQL. Вы можете проверить это следующим образом, переключившись на системный корень, а затем введите:

mysql -uroot -p

Затем введите либо пароль, либо пароль неправильный . Вероятно, вы можете войти. (Возможно, вы даже можете войти в систему из корня unix, просто # mysql , поскольку пароль не имеет значения и пользователь определен).

Так что происходит? Ну, если вы входите в систему с правами root и выполните следующие действия:

select User,host,plugin from mysql.user; 
+----------------+-----------+-----------------------+
| User           | host      | plugin                |
+----------------+-----------+-----------------------+
| root           | localhost | auth_socket           |
+----------------+-----------+-----------------------+

вы заметите auth_socket (которое может читать unix_socket на MariaDB). Эти сокеты игнорируют пароли и позволяют соответствующему пользователю Unix в без проверять пароль. Вот почему вы можете войти в систему с root , но не с другим пользователем.

Итак, решение состоит в том, чтобы обновить пользователей, чтобы не использовать auth_socket/unix_socket и правильно установить пароль.

В MariaDB (& lt; 10.2), который находится на версии Ubuntu 16 с 2017 года, этого должно быть достаточно:

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 вы уже имеете.

По моему опыту, проблема возникает только с пользователем root, так как другие пользователи будут добавлены вручную, а не частью первоначальной установки / обновления.

    
ответ дан Gazzer 14.10.2017 в 06:18
источник
1

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

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;
    
ответ дан ADHITHYA SRINIVASAN 28.05.2016 в 11:47
источник
1

Попробуйте создать новую учетную запись 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
    
ответ дан Alex Yakovlev 28.05.2016 в 11:37
источник
1

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

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

  

$ sudo mysql

     

MySQL & GT; ALTER USER 'root' @ 'localhost' ИДЕНТИФИЦИРОВАН   mysql_native_password BY 'test';

    
ответ дан Vadiaz 26.07.2017 в 17:23
источник
1

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

  1. Войдите в MySQL root shell:

    $ 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
    

Источник:

Ссылка     

ответ дан reversiblean 02.12.2017 в 09:31
источник
0

Я адаптировал некоторые сценарии инициализации, которые я создал для использования MariaDB, и столкнулся с этой точной проблемой. Собирая много информации здесь, ответ Gazzer действительно имеет нули в проблеме; все это сводится к настройке 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;

Другие ответы, в том числе самый высокий голосовой ответ на этот пост от Loremhipsum - действительно поощряют плохие практики, рекомендуя отказаться от пользователя, а затем воссоздать их. Для меня это довольно радикальное решение. Лучшее / простое решение для аннулирования значения plugin , привилегий flush и продолжения жизни.

    
ответ дан JakeGould 20.10.2017 в 02:54
источник
0

Мне пришлось сделать две вещи (благодаря @Todor и @Loremhipsum):

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

, а затем:

FLUSH PRIVILEGES;

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

    
ответ дан Franc Drobnič 03.01.2018 в 17:43
источник
-1

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

mysql_upgrade --force
    
ответ дан klob 03.05.2016 в 08:48
источник

Ознакомьтесь с другими вопросами по меткам