ПОМИЛКА 1698 (28000): Доступ заборонено користувачеві 'root' @ 'localhost'


382

Я налаштовую новий сервер і продовжую працювати з цією проблемою.

Коли я намагаюся увійти в базу даних MySQL з користувачем root, я отримую помилку:

ПОМИЛКА 1698 (28000): Доступ заборонено користувачеві 'root' @ 'localhost'

Не має значення, якщо я підключаюся через термінал (SSH), через PHPMyAdmin або клієнт MySQL, наприклад Navicat. Всі вони провалюються.

Я заглянув у таблицю mysql.user і отримав наступне:

+------------------+-------------------+
| user             | host              |
+------------------+-------------------+
| root             | %                 |
| root             | 127.0.0.1         |
| amavisd          | localhost         |
| debian-sys-maint | localhost         |
| iredadmin        | localhost         |
| iredapd          | localhost         |
| mysql.sys        | localhost         |
| phpmyadmin       | localhost         |
| root             | localhost         |
| roundcube        | localhost         |
| vmail            | localhost         |
| vmailadmin       | localhost         |
| amavisd          | test4.folkmann.it |
| iredadmin        | test4.folkmann.it |
| iredapd          | test4.folkmann.it |
| roundcube        | test4.folkmann.it |
| vmail            | test4.folkmann.it |
| vmailadmin       | test4.folkmann.it |
+------------------+-------------------+

Як бачите, корінь повинен мати доступ.

Сервер досить простий, тому що я вже деякий час намагався вирішити цю проблему ..

Він працює з Ubuntu 16.04.1 LTS з Apache, MySQL та PHP, щоб він міг розміщувати веб-сайти та iRedMail 0.9.5-1, щоб він міг розміщувати пошту.

Увійти в базу даних MySQL працює чудово, перш ніж встановити iRedMail. Я також спробував, просто встановивши iRedMail, але потім root, також не працює ...

Якщо хтось міг би сказати мені, як я виправляю проблему входу в MySQL або як я встановлюю iRedMail поверх існуючої установки MySQL. І так, я спробував встановити поради, і я не можу знайти ці змінні у конфігураційних файлах.


Я перейшов за цим посиланням, і перший варіант спрацював для мене: askubuntu.com/questions/763336/…
— Mikael Arhelger

3
sudo mysql_secure_installationнайпростіший спосіб це виправити
— Сергій Пономарьов

Відповіді:


1119

У деяких системах, таких як Ubuntu, mysql використовується за замовчуванням плагін UNIX auth_socket .

В основному означає, що: db_users, що використовує його, буде "автентичним" обліковими записами користувачів системи. Ви можете побачити, чи rootналаштований ваш користувач так, виконавши такі дії:

$ sudo mysql -u root # I had to use "sudo" since is new installation

mysql> USE mysql;
mysql> SELECT User, Host, plugin FROM mysql.user;

+------------------+-----------------------+
| User             | plugin                |
+------------------+-----------------------+
| root             | auth_socket           |
| mysql.sys        | mysql_native_password |
| debian-sys-maint | mysql_native_password |
+------------------+-----------------------+

Як ви бачите в запиті, rootкористувач використовує auth_socketплагін

Є два способи вирішити це:

  1. Ви можете встановити root користувача, щоб використовувати mysql_native_passwordплагін
  2. Ви можете створити новий db_userз вами system_user(рекомендується)

Варіант 1:

$ sudo mysql -u root # I had to use "sudo" since is new installation

mysql> USE mysql;
mysql> UPDATE user SET plugin='mysql_native_password' WHERE User='root';
mysql> FLUSH PRIVILEGES;
mysql> exit;

$ service mysql restart

Варіант 2: (замініть YOUR_SYSTEM_USER на ім’я користувача, яке у вас є)

$ sudo mysql -u root # I had to use "sudo" since is new installation

mysql> USE mysql;
mysql> CREATE USER 'YOUR_SYSTEM_USER'@'localhost' IDENTIFIED BY '';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'YOUR_SYSTEM_USER'@'localhost';
mysql> UPDATE user SET plugin='auth_socket' WHERE User='YOUR_SYSTEM_USER';
mysql> FLUSH PRIVILEGES;
mysql> exit;

$ service mysql restart

Пам'ятайте, що якщо ви використовуєте опцію №2, вам доведеться підключитися до mysql як імені користувача вашої системи ( mysql -u YOUR_SYSTEM_USER)

Примітка. У деяких системах (наприклад, Debian stretch) плагін 'auth_socket' називається 'unix_socket' , тому відповідна команда SQL повинна бути:UPDATE user SET plugin='unix_socket' WHERE User='YOUR_SYSTEM_USER';

Оновлення: з коментаря @ @ Andy здається, що mysql 8.xx оновлено / замінено на auth_socketдля caching_sha2_passwordмене не встановлено системну установку з mysql 8.xx, проте кроки вище повинні допомогти вам зрозуміти проблему. Ось відповідь:

Однією із змін у MySQL 8.0.4 є те, що новий плагін аутентифікації за замовчуванням - це "кешування_ша2_парлова". Новий 'YOUR_SYSTEM_USER' матиме цей плагін auth, і ви можете увійти з bash shell тепер за допомогою "mysql -u YOUR_SYSTEM_USER -p" та вкажіть пароль для цього користувача у відповідь. Немає необхідності в кроці "ОНОВЛЕННЯ плагіна користувача". Інформацію про оновлення плагіна 8.0.4 за замовчуванням див. Https://mysqlserverteam.com/mysql-8-0-4-new-default-authentication-plugin-caching_sha2_password/


5
Варіант 1 працював на мене. Але тоді мені теж потрібно було бігати sudo gedit /etc/phpmyadmin/config.inc.php. Потім я здійснив пошук AllowNoPasswordі прокоментував обидва рядки, які містили його. Тоді я зміг увійти як root без пароля.
— Джо

7
Варіант 2 працює. Я думаю, що завжди найкраща практика створити нового користувача та використовувати root, щоб бути там!
— PasinduJay

2
IDENTIFIED BY ''біт повинен , ймовірно,IDENTIFIED BY 'YOUR_PASSWD'
— YakovL

4
Нарешті, відповідь, яка насправді працює !! Там є мільйон відповідей, які говорять, що робити mysqld_safe --skip-grant-tablesтощо, і це не працює.
— Стюарт

4
Гаразд, як це зробити, якщо sudo mysql -u root -pмене не пускають?
— Хрвойо Т

173

Перевірте тут:

НОВА версія MYSQL робить це так.

У новому my-sql, якщо пароль залишається порожнім під час встановлення, він базується на auth_socketплагіні.

Правильний спосіб - увійти в my-sql з sudoпривілеєм.

$ sudo mysql -u root -p

А потім оновлення пароля за допомогою:

$ ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new-password';

Як тільки це робиться stop and startсервер mysql.

$  sudo service mysql stop
$  sudo service mysql start

Для отримання повної інформації ви можете звернутися за цим посиланням .

Прокоментуйте будь-які сумніви.


4
Це працювало для мене за допомогою Ubuntu 18. Дякую sooo.
— Пітер Дрінан

10
Працював також на ubuntu 18.04
— sgtkuncoro

2
Саме те, що я шукав. Дякую :) Працювали над Ubuntu 18
— Manthan_Admane

2
це спрацювало як шарм, лубунту 19.04
— Квадвара

3
Це добре працює. Посилання корисне.
— kjohri

9

У мене виникло це питання на Debian 8 VM, з яким я спілкувався через Putty на своєму робочому столі Windows 10.

Я спробував тут різні пропозиції, але нічого не вийшло, і я запускаю MariaDB на хості Debian. Зрештою я виявив, що я не міг запустити db-сервер у безпечному режимі, але мені не потрібно було, і наступні команди насправді працювали для мене, тобто дозволяючи новоствореному користувачеві MySql увійти на сервер MySql / MariaDB:

sudo service mysql restart
sudo mysql # logs in automatically into MariaDB
use mysql;
update user set plugin='' where user='your_user_name';
flush privileges;
exit;
sudo service mysql restart # restarts the mysql service

Якщо вищезгадане не дуже спрацьовує для вас, виконайте кроки, викладені в дописі zetacu ( zetacu ), а потім виконайте мої кроки.

Тепер ви повинні мати можливість використовувати віддалений клієнт-термінал і надійно увійти в mysql за допомогою команди:

mysql -u your_user_name -p

* введіть пароль, коли буде запропоновано


Це просто. Ну, тільки перша команда не дозволяє виконати другу, тож я налаштую її редагування - будь ласка, подивіться, чи я правий ...
— kokbira

7

Я б запропонував видалити з'єднання Mysql -

ОНОВЛЕННЯ - це для Mysql версії 5.5, якщо ваша версія інша, будь ласка, змініть перший рядок відповідно

sudo apt-get purge mysql-server mysql-client mysql-common mysql-server-core-5.5 mysql-client-core-5.5
sudo rm -rf /etc/mysql /var/lib/mysql
sudo apt-get autoremove
sudo apt-get autoclean

І знову встановити, але цього разу встановіть пароль root самостійно. Це заощадить багато зусиль.

sudo apt-get update
sudo apt-get install mysql-server

@ingernet, можливо, це через деякі інші проблеми, якими ви нехтували під час інсталяції
— Eminem347

@PJBrunet, можливо, причина вашої версії Mysql інша
— Eminem347

Досить справедливо, але найкраще всебічне рішення.
— PJ Brunet

6

Після години боротьби з рішенням тут це не спрацювало, тоді я знайшов відео на YouTube, де написано, що стовпець паролів тепер називається authentication_string. Тож я зміг змінити свій пароль так: Спершу потрапляйте в mysql з терміналу

sudo mysql

то всередині mysql введіть те, що після mysql>

mysql> use mysql
mysql> update user set authentication_string=PASSWORD("mypass") where user='root';
mysql> flush privileges;
mysql> quit;

в цей момент ви перебуваєте з mysql назад до свого звичайного термінального місця. Вам потрібно перезапустити mysql, щоб це набуло чинності. для цього типу:

sudo service mysql restart

Для кращого розуміння зверніться до цього відеопосилання


5

крок 1. sudo mysql -u root -p

крок 2. USE mysql;

крок 3. ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'admin';

Тут "адміністратор" - ваш новий пароль, і ви можете його змінити.

крок 4. exit

Дякую. Ви закінчили.


5

Судо не потрібно

База даних ініціалізується двома обліковими записами з усіма привілеями: перший - "root", який недоступний, а другий - з вашим іменем користувача (перевірити за допомогою команди whoami).

Щоб увімкнути доступ до кореневого облікового запису, потрібно увійти зі своїм іменем користувача

mysql -u $(whoami)

і вручну змінити пароль для root

use mysql;
set password for 'root'@'localhost' = password('YOUR_ROOT_PASSWORD_HERE');
flush privileges;
quit

Увійти як "корінь"

mysql -u root -p

Ви правильна відповідь для фактичної версії mysql, дякую!
— Hugo S

3

Перший крок: перейдіть до /etc/phpmyadmin/config.inc.php, а потім рядки для коментарів, де ви знайдете AllowNoPassword. Другий крок: увійдіть у свій обліковий запис mysql за замовчуванням

mysql -u root -p
use mysql;
update user set plugin="" where user='root';
flush privilege;

і це все!


3

Це працювало для мене:

mysql --user=root mysql
CREATE USER 'some_user'@'%' IDENTIFIED BY 'some_pass';
GRANT ALL PRIVILEGES ON *.* TO 'some_user'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

3

Я також зіткнувся з тим же питанням вперше.

Тепер це виправлено:

По-перше, ви скопіюєте /etc/mysql/mysql.conf.d/mysqld.cnfфайл і минуле в /etc/mysql/my.cnf.

Це можна зробити за допомогою команди:

sudo cp /etc/mysql/mysql.conf.d/mysqld.cnf /etc/mysql/my.cnf

Тепер давайте залишити пароль:

Використовуйте наступні команди у своєму терміналі:

sudo service mysql stop 
sudo service mysql start
sudo mysql -u root

Тепер ви знаходитесь всередині консолі mysql.

Тоді давайте запишемо кілька запитів, щоб скинути наш кореневий пароль

USE mysql
update mysql.user set authentication_string=password('newpass') where user='root' and Host ='localhost';
update user set plugin="mysql_native_password"; 
flush privileges;
quit

Тепер ми можемо прибирати /etc/mysql/my.cng

Відкрийте вищезазначений файл у своєму редакторі та видаліть цілі рядки всередині файлу.

Після цього давайте перезапустимо mysql:

sudo mysql service restart 

Тепер давайте використовувати mysql з новоствореним паролем:

sudo mysql -u root -p

Нарешті введіть свій щойно створений пароль.


1
Добре працювали! але вашу відповідь потрібно оновити !! /etc/mysql/my.cnf, а не /etc/mysql/my.cng, а для сервісу перезавантажте свою службу sudo mysql restart
— essayoub

3

Я знайшов своє рішення після години досліджень тут.

Зупиніть MySQL

sudo service mysql stop

Складіть каталог служб MySQL.

sudo mkdir /var/run/mysqld

Надати користувачеві MySQL дозвіл на запис у службовий каталог.

sudo chown mysql: /var/run/mysqld

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

sudo mysqld_safe --skip-grant-tables --skip-networking &

Увійдіть без пароля.

 mysql -uroot mysql

оновити пароль

UPDATE mysql.user SET authentication_string=PASSWORD('YOURNEWPASSWORD'), plugin='mysql_native_password' WHERE User='root' AND Host='%';
EXIT;

Вимкніть MySQL.

sudo mysqladmin -S /var/run/mysqld/mysqld.sock shutdown

Запускайте сервіс MySQL нормально.

sudo service mysql start

Це отримало мені підказку mysql, коли НІЩО НЕ БУДЕ! Дякую!
— UserX

2

Ви хочете отримати доступ до MySQL з користувачем root, але не надаєте правильний пароль root.

Якщо вам потрібно встановити новий пароль для root , на сайті MySQL є чудова документація, як це зробити: http://dev.mysql.com/doc/refman/5.7/uk/resetting-permissions.html

Я не показуватиму тут процес, оскільки документація на MySql на вищезазначеному посиланні чітка та стисла .


Дякую за кошторис, але мені не вдалося змусити його працювати, тому я вирішив встановити iRedMail із базою даних pgSQL.
— Фолькман

Роджер Фолкман! Приємно знати, що ви вирішили свою проблему як завгодно.
— Крістіан Гонсалвес

Розрив посилань. Протягом багатьох років на mysql.com було багато ламаних посилань. Ви повинні скопіювати та вставити відповідну інформацію сюди, що добре, якщо ви приписуєте джерело.
— Гусь

1

os: Ubuntu18.04

mysql: 5.7

  1. додайте skip-grant-tablesфайл у кінець файлу mysqld.cnf

  2. cp my.cnf

sudo cp /etc/mysql/mysql.conf.d/mysqld.cnf /etc/mysql/my.cnf
  1. скинути пароль
(base) ➜  ~ sudo service mysql stop 
(base) ➜  ~ sudo service mysql start
(base) ➜  ~ mysql -uroot
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.25-0ubuntu0.18.04.2 (Ubuntu)

Copyright (c) 2000, 2019, 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> use mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed, 3 warnings
mysql> update mysql.user set authentication_string=password('newpass') where user='root' and Host ='localhost';
Query OK, 1 row affected, 1 warning (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 1

mysql> update user set plugin="mysql_native_password"; 
Query OK, 0 rows affected (0.00 sec)
Rows matched: 4  Changed: 0  Warnings: 0

mysql>  flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> quit
Bye
  1. видалити skip-grant-tablesз my.cnf
(base) ➜  ~ sudo emacs /etc/mysql/mysql.conf.d/mysqld.cnf 
(base) ➜  ~ sudo emacs /etc/mysql/my.cnf                 
(base) ➜  ~ sudo service mysql restart
  1. відкрити mysql
(base) ➜  ~ mysql -uroot -ppassword 
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.25-0ubuntu0.18.04.2 (Ubuntu)

Copyright (c) 2000, 2019, 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> 
  1. перевірити політику паролів
mysql> select @@validate_password_policy;
+----------------------------+
| @@validate_password_policy |
+----------------------------+
| MEDIUM                     |
+----------------------------+
1 row in set (0.00 sec)


mysql> SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+--------+
| Variable_name                        | Value  |
+--------------------------------------+--------+
| validate_password_dictionary_file    |        |
| validate_password_length             | 8      |
| validate_password_mixed_case_count   | 1      |
| validate_password_number_count       | 1      |
| validate_password_policy             | MEDIUM |
| validate_password_special_char_count | 1      |
+--------------------------------------+--------+
6 rows in set (0.08 sec)!
  1. змінити конфігурацію validate_password
mysql> set global validate_password_policy=0;
Query OK, 0 rows affected (0.05 sec)

mysql> set global validate_password_mixed_case_count=0;
Query OK, 0 rows affected (0.00 sec)

mysql> set global validate_password_number_count=3;
Query OK, 0 rows affected (0.00 sec)

mysql> set global validate_password_special_char_count=0;
Query OK, 0 rows affected (0.00 sec)

mysql> set global validate_password_length=3;
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+-------+
| Variable_name                        | Value |
+--------------------------------------+-------+
| validate_password_dictionary_file    |       |
| validate_password_length             | 3     |
| validate_password_mixed_case_count   | 0     |
| validate_password_number_count       | 3     |
| validate_password_policy             | LOW   |
| validate_password_special_char_count | 0     |
+--------------------------------------+-------+
6 rows in set (0.00 sec)

зауважте, ви повинні знати, що ви помилка викликана чим? validate_password_policy?

ви повинні вирішити скинути пароль, щоб заповнити політику або змінити політику.


0

Це сталося і зі мною. Проблема полягає в репортажі mysql, який поставляється вже з дистрибутивом Linux. Отже, коли ви просто робите: $ sudo apt install mysql-server він встановлює mysql зі свого репо за замовчуванням, що спричиняє цю проблему. Тож для подолання цього вам потрібно видалити встановлений mysql $ sudo apt remove mysql* --purge --auto-remove

Потім завантажте mysql repo з офіційного веб-сайту mysql MySQL APT Repo Дотримуйтесь їх документації щодо того, як додати репо і встановити її. Це не викликає жодних проблем. Також, як відповів @zetacu, ви можете переконатися, що корінь mysql справді використовує плагін mysql_native_password


0

в моєму випадку,

dev@Dev-007:~$ mysql -u root -p
Enter password: 
ERROR 1698 (28000): Access denied for user 'root'@'localhost'

Я впевнений, що мій пароль був правильним, інакше буде код помилки ERROR 1045 (28000): Access denied for user

тому я переглядаю судо,

dev@Dev-007:~$ sudo mysql -u root -p

цього разу це працювало на мене. дивись документи

а потім змінити кореневий пароль,

mysql> alter user 'root'@'%' identified with mysql_native_password by 'me123';
Query OK, 0 rows affected (0.14 sec)

mysql> 

потім перезавантажте сервер за допомогою sudo /etc/init.d/mysql restart

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.