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


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

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

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

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


126
2018-05-02 11:45


происхождения




ответы:


Недавно я обновил 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.

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


233
2018-06-08 09:04



Это единственное, что сработало для меня, разве кто-то точно знает, что случилось с пользователем root при установке mysql-сервера на 16.04? - Ruggi
Держите его, не % означает, что вы можете подключиться из любого места ... удаленно? - Stevie G
Вы можете изменить строку: CREATE USER 'root' @ 'localhost' IDENTIFIED BY ''; - vladnev
Для обеспечения безопасности: незащищенный шаблон подключения root @ localhost mysql - это основной продукт с хлебом-маслом местной разработки но должен казаться абсолютно нигде. - charneykaye
В заявлении о гранте для нового пользователя root здесь не предоставляется «с грантом» root, поэтому root не может предоставить без последующего выполнения этого: dba.stackexchange.com/a/62046/115679  Измените заявление о предоставлении гранта на grant all privileges on *.* to 'root'@'localhost' with grant option; - Loren


Если вы установите 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 пользователей) есть и другой способ изменить 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;

82
2017-07-23 07:46



Спасибо, по какой-то причине это автоматически установилось автоматически после обновления apt-get, я думаю ... - Tominator
Это, наконец, проблема после обновления формы Ubuntu с 14.04 по 16.04, и я был заблокирован из моей базы данных ... - Reflic
Кроме того, мне больше нравится этот ответ - он намного менее разрушительный ;-) - benzkji
Для MariaDB <10.2, чтобы изменить плагин вместе с паролем, вот запрос: UPDATE mysql.user SET plugin = 'mysql_native_password', Password = PASSWORD('secret') WHERE User = 'root'; FLUSH PRIVILEGES; Источник: stackoverflow.com/a/41537019/1004587 - Pothi Kalimuthu
10x @PothiKalimuthu, просто обновил ответ. - Todor


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

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

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


7
2017-10-14 04:18



Нашел это, чтобы работать отлично. Меня удивляет, почему при изменении пароля root mysql_secure_installation не имели такого же эффекта. Где он хранит новый пароль? - Mausy5043


Попробуйте создать новую учетную запись 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
    

2
2018-05-28 09:37



Это помогло! Благодарю. - Ejaz


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

  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
    

Источник:

http://www.itzgeek.com/how-tos/linux/debian/how-to-install-mariadb-on-debian-9.html


2
2017-12-02 08:31



Это сработало для меня. благодаря - Junaid Qadir Shekhanzai
Когда я это сделал, я больше не мог sudo mysql как root. Сначала я должен был su, а затем мог войти в mysql как root. Поэтому я изменил его на auth_socket. - untill
Единая команда: mysql -u root -p -e "use mysql;update user set plugin='mysql_native_password' where user='root';flush privileges;" - Chris Stryczynski


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

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;

1
2018-05-28 09:47





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

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

$ sudo mysql

mysql> ALTER USER 'root' @ 'localhost' ИДЕНТИФИКАЦИЯ   mysql_native_password BY 'test';


1
2017-07-26 15:23