Доступ заборонено користувачеві 'root' @ 'localhost' (використовуючи пароль: ТАК) - Немає привілеїв?


110

Я постійно отримую цю помилку.

Я використовую mySQL Workbench, і з того, що я знаходжу, це те, що привілеї схеми root є нульовими. Пільг взагалі немає.

У мене виникають проблеми на платформах, для яких використовується мій сервер, і це несподівано виникла.

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

Я зробив кілька речей , як FLUSH HOSTS, FLUSH PRIVILEGESі т.д. , але не знайшов ніякого успіху від цього або в Інтернеті.

Як я можу отримати назад його доступ? Мені це страшно, тому що коли я озираюся, люди очікують, що ти матимеш доступ, але у мене немає доступу, тому я не можу зайти в командний рядок чи що-небудь іGRANT небудь собі.

При запуску SHOW GRANTS FOR rootце я отримую натомість:

Код помилки: 1141. Немає такого гранту для користувача "root" на хості "%"


Виконати SHOW GRANTS FOR rootзапит, опублікувати результат у своєму запитанні.
NobleUplift

Ви намагаєтеся отримати доступ до бази даних з localhost або з іншого хоста за допомогою MySQL Workbench?
Енді Джонс

перезапустити сервер з --skip-grant-table та увійти з будь-яким користувачем та надати повні привілеї на root та перезапустити сервер знову без перерахованої вище опції
vidyadhar

@AndyJones ні, це на спеціальному сервері, який я використовую.
Чейз

@vidyadhar Вибачте, я не знаю, де б це зробив?
Чейз

Відповіді:


51

Скористайтеся інструкціями щодо скидання пароля root - але замість скидання пароля root ми будемо насильно ВСТАВИТИ запис у таблицю mysql.user

У файлі init використовуйте це замість цього

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.
Чейз

16
це дає: ERROR 1054 (42S22): Unknown column 'Password' in 'field list'помилка. @AndyJones
alper

1
Я отримую: Невідомий стовпець "Пароль" у "списку полів"
sricheta ruj

130

Якщо у вас є та сама проблема в 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)

Щоб дозволити з'єднання з коренем і паролем, оновіть значення в таблиці за допомогою команди:

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
Lova Chittumuri

Оновлення з auth_socketна mysql_native_passwordвирішення моєї проблеми. Дякую!
олоре

1
Це абсолютно надихало намагання з'ясувати та гігантську трату часу. Я б хотів, щоб вони запитували це під час mysql_secure_installation. Дуже дякую за цю відповідь.
PatPeter

це також було корисно stackoverflow.com/questions/2995054/…
Abeer Sul

42

Це не сподобалось моїм користувачам привілей, тому я SUDO. (in bash << sudo set user and password) (це дає ім'я користувача 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 було видалено, тепер ім'я поля - "автентифікація_string".
Румід

для нової версії mysql вони змінили ім'я стовпця паролів як аутентифікація_string
Ramesh Maharjan

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
Мостафа

19

для людей, які стикаються з помилкою нижче у версії 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 Community (GPL)

Авторське право (c) 2000, 2015, Oracle та / або його філії. Всі права захищені.

Oracle є зареєстрованою торговою маркою корпорації Oracle та / або її філій. Інші імена можуть бути торговими марками відповідних власників.

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

  1. mysql> use mysql;

Читання інформації таблиці для заповнення імен таблиці та стовпців Ви можете вимкнути цю функцію, щоб отримати швидший запуск з -A

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

  1. mysql> update user set authentication_string=password('password') where user='root'; Запит ОК, 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 Community Server 5.7.8-rc зупинено arif @ ubuntu: ~ $ sudo /etc/init.d/mysql start .. * MySQL Community Server 5.7.8-rc запускається

  1. mysql -u root -p

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

    Ласкаво просимо на монітор MySQL. Команди закінчуються на; або \ g. Ваш ідентифікатор з'єднання MySQL - 2 версія сервера: 5.7.8-rc MySQL Community Community (GPL)

після версії mysql 5.7+ версія пароль стовпця замінено на ідентифікацію імені аутентифікації з таблиці 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/uk/problems-connecting.html


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

5

Якщо ви отримуєте цю помилку в 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-table . Це дозволяє кожному підключитися без пароля та з усіма привілеями. Оскільки це небезпечно, можливо, ви хочете використовувати --skip-grant-таблиці спільно з --skip-мережею, щоб запобігти підключенню віддалених клієнтів.

  • Підключіться до сервера mysqld за допомогою цієї команди:

  • shell> mysql Опублікуйте наступні заяви у клієнті mysql. Замініть пароль на той, який ви хочете використовувати.

  • mysql> ОНОВЛЕННЯ mysql.user SET Password = PASSWORD ('MyNewPass') -> WHERE User = 'root'; mysql> ПРИГОТОВЛЕННЯ ПРИВІЛЕГ;

  • Зупиніть сервер, а потім перезапустіть його нормально (без параметрів --skip-grant-table та --skip-networking).

Джерело документації Mysql та особистий досвід:

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



1

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

... Я думаю, це через обмеження на комп'ютери компанії, в моєму випадку ...


0

Спробуйте виконати наступні кроки для подолання цієї проблеми:

  1. Відкрийте термінальний / командний рядок та перейдіть до папки бін інсталяційної папки 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

Я працював над доступом, забороненим для користувача 'root' @ 'localhost' (використовуючи пароль: ТАК) кілька годин, я знайшов наступне рішення,

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

для вищевказаної проблеми ур-пароль в системі повинен відповідати паролю u, переданий в програмі, тому що, коли ви запускаєте програму, вона перевіряє пароль системи, оскільки ви дали 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.