Доступ запрещен для пользователя 'root' @ 'localhost' (с паролем: ДА) - Нет привилегий?


114

Я постоянно получаю эту ошибку.

Я использую mySQL Workbench, и из того, что я обнаружил, привилегии схемы root равны нулю. Никаких привилегий нет вообще.

У меня проблемы с платформами, на которых используется мой сервер, и это внезапная проблема.

root@127.0.0.1, по- видимому, имеет большой доступ, но я вошел в систему под этим именем, но в любом случае он просто назначается localhost - localhost не имеет привилегий.

Я сделал несколько вещей, например FLUSH HOSTS, FLUSH PRIVILEGESи т. Д., Но не нашел успеха ни в этом, ни в Интернете.

Как мне вернуть root права доступа? Я нахожу это разочаровывающим, потому что, когда я смотрю вокруг, люди ожидают, что у вас «есть доступ», но у меня нет доступа, поэтому я не могу войти в командную строку или что-то еще и GRANTсебе еще что-нибудь.

При запуске SHOW GRANTS FOR rootя получаю взамен:

Код ошибки: 1141. Такое разрешение не определено для пользователя root на хосте%


Запустите SHOW GRANTS FOR rootзапрос, опубликуйте результат в своем вопросе.
NobleUplift

Вы пытаетесь получить доступ к базе данных с локального хоста или с другого хоста с помощью MySQL Workbench?
Энди Джонс

перезапустите сервер с помощью --skip-grant-table и войдите в систему с любым пользователем и предоставьте полные привилегии для root и снова перезапустите сервер без указанной выше опции
vidyadhar

@AndyJones нет, это на выделенном сервере, который я использую.
Chase

@vidyadhar Извините, я не уверен, где бы я это сделал?
Chase

Ответы:


53

Используйте инструкции по сбросу пароля root, но вместо сброса пароля root мы будем принудительно ВСТАВИТЬ запись в таблицу mysql.user

В файле инициализации используйте это вместо

INSERT INTO mysql.user (Host, User, Password) VALUES ('%', 'root', password('YOURPASSWORD'));
GRANT ALL ON *.* TO 'root'@'%' WITH GRANT OPTION;

1
Мне очень жаль, Энди, но когда я перехожу к шагу 6, я все время сталкиваюсь с проблемой. Поскольку я использовал мастер установки, я бы использовал "C:\Program Files\MySQL\MySQL Server 5.6\bin\mysqld.exe" --defaults-file="C:\\Program Files\\MySQL\\MySQL Server 5.6\\my.ini" --init-file=C:\\mysql-init.txt все там, где должно быть, и то, что у вас есть выше, я поместил в файл соответственно. У меня тоже остановили службу. Я просто получаю такой вывод: prntscr.com/1ilxau И все (плагины) выключено. Действительно сбивает с толку.
Чейз

2
вы запускаете это как администратор?
Энди Джонс

1
К моему удивлению по глупости, это не так. После этого я получил prntscr.com/1imcnj - в первый раз я сделал это на их собственных строках (из пасты), затем я поместил все это в одну строку. Мне очень жаль, что это сбивает меня с толку, а не эксперта по sql как такового.
Chase

16
это дает: ERROR 1054 (42S22): Unknown column 'Password' in 'field list'ошибка. @AndyJones
Alper

1
Я получаю: Неизвестный столбец «Пароль» в «списке полей»
sricheta ruj

136

Если у вас такая же проблема в MySql 5.7. +:

Access denied for user 'root'@'localhost'

это потому, что MySql 5.7 по умолчанию позволяет подключаться к сокету, что означает, что вы просто подключаетесь с sudo mysql. Если вы запустите sql:

SELECT user,authentication_string,plugin,host FROM mysql.user;

тогда вы это увидите:

+------------------+-------------------------------------------+-----------------------+-----------+
| user             | authentication_string                     | plugin                | host      |
+------------------+-------------------------------------------+-----------------------+-----------+
| root             |                                           | auth_socket           | localhost |
| mysql.session    | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys        | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *497C3D7B50479A812B89CD12EC3EDA6C0CB686F0 | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
4 rows in set (0.00 sec)

Чтобы разрешить соединение с root и паролем, обновите значения в таблице с помощью команды:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Current-Root-Password';
FLUSH PRIVILEGES;

Затем снова запустите команду select, и вы увидите, что она изменилась:

+------------------+-------------------------------------------+-----------------------+-----------+
| user             | authentication_string                     | plugin                | host      |
+------------------+-------------------------------------------+-----------------------+-----------+
| root             | *2F2377C1BC54BE827DC8A4EE051CBD57490FB8C6 | mysql_native_password | localhost |
| mysql.session    | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys        | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *497C3D7B50479A812B89CD12EC3EDA6C0CB686F0 | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
4 rows in set (0.00 sec)

И это все. Вы можете запустить этот процесс после запуска и выполнения sudo mysql_secure_installationкоманды.

Для mariadb используйте

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('manager');

установить пароль. Подробнее на https://mariadb.com/kb/en/set-password/


1
Действительно спасибо за установление соединения в Linux
Mint

Обновление с auth_socketдо mysql_native_passwordрешило мою проблему. Спасибо!
Olore

1
Это приводило в бешенство, пытаясь понять это, и огромная трата времени. Я бы хотел, чтобы они спросили об этом во время mysql_secure_installation. Большое спасибо за этот ответ.
PatPeter

это также было полезно stackoverflow.com/questions/2995054/…
Абир Сул,

44

Мне не понравились мои привилегии пользователя, поэтому я СУДОМ. (в bash << sudo установить пользователя и пароль) (это дает имя пользователя root и ничего не устанавливает пароль) (на Mac)

sudo mysql -uroot -p

27

Попробуйте следующие команды

~$ sudo /etc/init.d/mysql stop
~$ sudo mysqld_safe --skip-grant-tables &
~$ mysql -u root
Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 1 to server version: 4.1.15-Debian_1-log

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>

mysql> use mysql;

mysql> update user set password=PASSWORD("root") where User='root';

mysql> flush privileges;

mysql> quit

~$ sudo /etc/init.d/mysql stop

Stopping MySQL database server: mysqld

STOPPING server from pid file /var/run/mysqld/mysqld.pid

mysqld_safe[6186]: ended

[1]+  Done                    mysqld_safe --skip-grant-tables

~$ sudo /etc/init.d/mysql start

~$ mysql -u root -p

* MySQL Community Server 5.6.35 is started
~$ mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.6.35 MySQL Community Server (GPL)

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

11
В MySQL 5.7 поле пароля в поле таблицы mysql.user было удалено, теперь имя поля - «authentication_string».
Rumid

для более новой версии mysql они изменили имя столбца пароля как authentication_string
Рамеш Махарджан

sudo mysqld_safeполучил мне это /var/run/mysqld for UNIX socket file don't exists, затем после, mkdir -p /var/run/mysqldи sudo chown -R mysql:mysql /var/run/mysqld/он сработал и запустил демон.
kenzotenma

1
ОШИБКА 2002 (HY000): не удается подключиться к локальному серверу MySQL через сокет '/var/run/mysqld/mysqld.so
Мостафа

22

для людей, которые сталкиваются с ошибкой ниже в версии mysql 5.7+ -

Access denied for user 'root'@'localhost' (using password: YES)
  1. Открыть новый терминал

  2. sudo /etc/init.d/mysql stop ... Сервер сообщества MySQL 5.7.8-rc остановлен

  3. sudo mysqld_safe --skip-grant-tables & это пропустит все привилегии уровня предоставления и запустит mysql в безопасном режиме. Иногда процесс зависал только из-за

grep: ошибка записи: сломанный канал 180102 11:32:28 mysqld_safe Запись в '/var/log/mysql/error.log'.

Просто нажмите Ctrl + Z или Ctrl + C, чтобы прервать процесс и выйти из него.

  1. mysql -u root

Добро пожаловать в монитор MySQL. Команды заканчиваются на; или \ g. Ваш идентификатор подключения MySQL - 2 Версия сервера: 5.7.8-rc MySQL Community Server (GPL)

Авторское право (c) 2000, 2015, Oracle и / или ее дочерние компании. Все права защищены.

Oracle является зарегистрированным товарным знаком Oracle Corporation и / или ее дочерних компаний. Другие наименования могут быть торговыми марками их владельцев.

Введите "помощь"; или '\ h' для помощи. Введите '\ c', чтобы очистить текущий оператор ввода.

  1. mysql> use mysql;

Чтение информации таблицы для завершения имен таблиц и столбцов. Вы можете отключить эту функцию, чтобы ускорить запуск, с помощью -A.

База данных изменена

  1. mysql> update user set authentication_string=password('password') where user='root'; Query OK, 4 строки затронуты, 1 предупреждение (0,03 сек) Сопоставлено строк: 4 Изменено: 4 Предупреждения: 1

  2. mysql> flush privileges; Запрос ОК, затронуты 0 строк (0,00 сек)

  3. mysql> quit Пока

  4. sudo /etc/init.d/mysql stop

..180102 11:37:12 mysqld_safe mysqld из файла pid /var/run/mysqld/mysqld.pid закончился. * Сервер сообщества MySQL 5.7.8-rc остановлен arif @ ubuntu: ~ $ sudo /etc/init.d/mysql start .. * Сервер сообщества MySQL 5.7.8-rc запущен

  1. mysql -u root -p

    Введите пароль:

    Добро пожаловать в монитор MySQL. Команды заканчиваются на; или \ g. Ваш идентификатор подключения MySQL - 2 Версия сервера: 5.7.8-rc MySQL Community Server (GPL)

после версии mysql 5.7+ пароль столбца заменяется именем authentication_string из таблицы mysql.user.

надеюсь, что эти шаги помогут кому-нибудь, спасибо.


15

Я использовал ubuntu 18 и просто установил MySQL (пароль: root) с помощью следующих команд.

sudo apt install mysql-server
sudo mysql_secure_installation

Когда я попытался войти в систему с обычным пользователем ubuntu, у меня возникла эта проблема.

ERROR 1698 (28000): Access denied for user 'root'@'localhost'

Но я смог войти в MySQL через суперпользователя. Используя следующие команды, я смог войти в систему через обычного пользователя.

sudo mysql    
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';
exit;

Затем вы сможете войти в Mysql с обычной учетной записью.

введите описание изображения здесь


8

Простой способ сбросить пароль root в системах Linux:

sudo dpkg-reconfigure mysql-server-5.5

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

https://dev.mysql.com/doc/refman/5.7/en/problems-connecting.html


1
найдите свою версию с помощью "locate mysql-server" и выполните команду соответственно
Punnerud

6

Если вы получаете эту ошибку в Workbench, но можете войти в систему с терминала, выполните следующие действия.

Сначала просто войдите с вашим текущим паролем:

sudo mysql -u root -p

Затем измените свой пароль, потому что низкий уровень надежности пароля иногда дает ошибку.

ALTER USER 'root'@'localhost' IDENTIFIED BY 'new-strong-password';

FLUSH PRIVILEGES;

Затем просто выйдите и снова войдите с новым паролем:

quit

sudo mysql -u root -p

После успешного входа в систему введите команду:

use mysql;

Должно появиться сообщение вроде «База данных изменена», затем введите:

UPDATE user SET plugin='mysql_native_password' WHERE User='root';

После этого типа:

UPDATE mysql.user set authentication_string=PASSWORD('new-strong-password') where user='root';

Затем введите:

FLUSH PRIVILEGES;

Затем просто выйдите:

quit

Теперь попробуйте войти в систему с новым паролем на РАБОЧЕМ МЕСТЕ. Надеюсь, это сработает. Спасибо.


4

Я столкнулся с этой проблемой при установке Testlink на сервере Ubuntu, я выполнил следующие шаги

mysql -u root
use mysql;
update user set password=PASSWORD("root") where User='root';
flush privileges;
quit

Теперь остановите экземпляр и начните снова, т.е.

sudo /etc/init.d/mysql stop
sudo /etc/init.d/mysql start

2

Самый простой способ сбросить пароль root:

  • перезапустить mysqld - параметр -skip-grant-tables . Это позволяет любому подключиться без пароля и со всеми привилегиями. Поскольку это небезопасно, вы можете использовать --skip-grant-tables в сочетании с --skip-network для предотвращения подключения удаленных клиентов.

  • Подключитесь к серверу mysqld с помощью этой команды:

  • shell> mysql Выполните следующие операторы в клиенте mysql. Замените пароль тем паролем, который вы хотите использовать.

  • mysql> ОБНОВЛЕНИЕ mysql.user УСТАНОВИТЬ Пароль = ПАРОЛЬ ('MyNewPass') -> WHERE User = 'root'; mysql> ПРИВИЛЕГИИ ПРОМЫВКИ;

  • Остановите сервер, а затем перезапустите его в обычном режиме (без параметров --skip-grant-tables и --skip-network).

Исходная документация Mysql и личный опыт:

http://dev.mysql.com/doc/refman/5.6/en/resetting-permissions.html



1

Я решил ту же проблему, запустив Workbench от имени администратора.

... Я думаю, это из-за ограничений на компьютеры компании, в моем случае ...


0

Попробуйте следующие шаги, чтобы решить эту проблему:

  1. Откройте терминал / командную строку и перейдите в папку bin установочной папки MySQL. Затем запустите команду mysqld --console.
  2. Если вы видите, что эта строка 171010 14:58:22 [Note] --secure-file-privустановлена ​​в NULL. Операции, связанные с импортом и экспортом данных, отключаются после выполнения указанной выше команды из командной строки.
  3. Затем вам нужно убедиться, что mysqldфайл заблокирован брандмауэром Windows или другой программой.
  4. Если он заблокирован брандмауэром Windows, необходимо разблокировать его и сохранить настройки.
  5. Чтобы разблокировать приложение mysqldили mysql, выполните следующие действия:
    1. Перейдите в командную строку и введите, wf.mscчтобы открыть настройки брандмауэра.
    2. Нажмите Разрешить приложение или функцию через брандмауэр Windows.
    3. Убедитесь, что экземпляры mysqldили mysqldдоступны в списке, и установите флажок для домена, общедоступный и частный, и сохраните настройки.
  6. Вернитесь в папку bin и повторите команду из шага 1.
  7. Он должен работать нормально и не показывать никаких ошибок.

Теперь должно быть возможно запустить консоль MySQL без каких-либо проблем!


0

Я решил ту же проблему, используя следующий sql и перезапустив сервер MySQL:

update mysql.user set Select_priv='Y',Insert_priv='Y',Update_priv='Y',Delete_priv='Y',Create_priv='Y',Drop_priv='Y',Reload_priv='Y',Shutdown_priv='Y',Process_priv='Y',File_priv='Y',Grant_priv='Y',References_priv='Y',Index_priv='Y',Alter_priv='Y',Show_db_priv='Y',Super_priv='Y',Create_tmp_table_priv='Y',Lock_tables_priv='Y',Execute_priv='Y',Repl_slave_priv='Y',Repl_client_priv='Y',Create_view_priv='Y',Show_view_priv='Y',Create_routine_priv='Y',Alter_routine_priv='Y',Create_user_priv='Y',Event_priv='Y',Trigger_priv='Y',Create_tablespace_priv='Y'
where user='root';

0

Я работал над Access Denied for User 'root' @ 'localhost' (используя пароль: YES) в течение нескольких часов, я нашел следующее решение,

The answer to this problem was that in the my.cnf located within
/etc/mysql/my.cnf

the line was either 
bind-address = 127.0.0.1 
            (or)
bind-address = localhost
            (or)
bind-address = 0.0.0.0

I should prefer that 127.0.0.1

I should also prefer 0.0.0.0, it is more flexible 
because which will allow all connections

0

Я не думаю, что вам нужно избегать --init-fileпараметра:

"C:\Program Files\MySQL\MySQL Server 5.6\bin\mysqld.exe" --defaults-file="C:\\Program Files\\MySQL\\MySQL Server 5.6\\my.ini" --init-file=C:\\mysql-init.txt

Должно быть:

"C:\Program Files\MySQL\MySQL Server 5.6\bin\mysqld.exe" --defaults-file="C:\\Program Files\\MySQL\\MySQL Server 5.6\\my.ini" --init-file=C:\mysql-init.txt


0

для вышеуказанной проблемы пароль ur в системе должен совпадать с паролем, который вы передали в программе, потому что, когда вы запускаете программу, она проверяет системный пароль, поскольку вы предоставили root в качестве пользователя, поэтому выдает ошибку и в то же время запись не удаляется из базы данных.

import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.Statement;
import java.sql.ResultSet;
class Delete
{
    public static void main(String []k)
    {
        String url="jdbc:mysql://localhost:3306/student";

        String user="root";
        String pass="jacob234";
        try
        {
            Connection myConnection=DriverManager.getConnection(url,user,pass);
            Statement myStatement=myConnection.createStatement();
            String deleteQuery="delete from students where id=2";
            myStatement.executeUpdate(deleteQuery);
            System.out.println("delete completed");
        }catch(Exception e){
            System.out.println(e.getMessage());
        }
    }
}

Сохраните системный пароль ur как jacob234, а затем запустите код.


0

У меня была та же проблема, но она была вызвана тем, что я использовал сервер mysql на 32-битной версии, а рабочая среда работала на 64-битной версии. сервер и рабочая среда должны иметь одинаковую версию.

xpress



0

Я столкнулся с той же проблемой, когда пытался подключить базу данных Mysql с помощью приложения Laravel. Хочу порекомендовать, пожалуйста, проверьте пароль для пользователя. Пароль MySQL не должен содержать специальных символов, таких как # , & и т. Д.


На bluehost удаление специальных символов из пароля фактически решило проблему.
Мена,
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.