Подтвердить что ты не робот

ОШИБКА 1698 (28000): доступ запрещен для пользователя 'root' @'localhost'

Итак... Я настраиваю новый сервер и постоянно сталкиваюсь с этой проблемой.

Когда я пытаюсь войти в базу данных MySQL с пользователем root, я получаю сообщение об ошибке "ERROR 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 |
+------------------+-------------------+

Как вы можете видеть, root должен иметь доступ.

Сервер довольно прост, так как я пытался устранить эту проблему какое-то время.

Он запускает Ubuntu 16.04.1 LTS с Apache, MySQL и PHP, так что он может размещать веб-сайты и iRedMail 0.9.5-1, чтобы он мог размещать почту.

Вход в базу данных MySQL отлично работает до установки iRedMail. Я также попытался, просто установив iRedMail, но потом root, также не работает...

Если кто-то может сказать мне, как я исправляю мою проблему входа в MySQL или как я устанавливаю iRedMail, поверх существующей установки MySQL. И да, я попробовал Советы по установке, и я не могу найти эти переменные в файлах конфигурации.

Любая помощь очень ценится:)

4b9b3361

Ответ 1

В некоторых системах, таких как 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

Есть 2 способа решить эту проблему:

  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 заключается в том, что новый подключаемый модуль аутентификации по умолчанию - caching_sha2_password. Новый 'YOUR_SYSTEM_USER' будет иметь этот плагин auth, и теперь вы можете войти в оболочку bash с помощью "mysql -u YOUR_SYSTEM_USER -p" и предоставить пароль для этого пользователя в приглашении. Нет необходимости в шаге "ОБНОВИТЬ пользовательский плагин SET". Обновление плагина аутентификации по умолчанию для 8.0.4 см. По адресу https://mysqlserverteam.com/mysql-8-0-4-new-default-authentication-plugin-caching_sha2_password/.

Ответ 2

Проверить здесь:

Новая версия 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

Для получения полной информации вы можете обратиться к этой ссылке.

Прокомментируйте любые сомнения.

Ответ 3

Я бы предложил удалить соединение Mysql -

UPDATE - это для 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

Ответ 4

У меня была эта проблема на виртуальной машине Debian 8, с которой я взаимодействовал через Putty на моем рабочем столе Windows 10.

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

* введите пароль при появлении запроса

Ответ 5

Если вы можете войти с помощью sudo, но не без sudo, то выполните:

$ sudo mysql -u root

[mysql] use mysql;
[mysql] update user set plugin='' where User='root';
[mysql] flush privileges;
[mysql] \q 

После выполнения $ mysql -u root без sudo будет работать нормально.

Ответ 6

шаг 1. sudo mysql -u root -p

шаг 2. USE mysql;

шаг 3. ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'admin';

Здесь "admin" - это ваш новый пароль, и вы можете его изменить.

шаг 4. exit

Благодарю. Вы сделали.

Ответ 7

Это сработало для меня:

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

Ответ 8

Я нашел свое решение после нескольких часов исследований здесь.

Остановите 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

Ответ 9

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

Если вам нужно установить новый пароль для root, на сайте MySQL есть отличная документация о том, как это сделать: http://dev.mysql.com/doc/refman/5.7/en/resetting-permissions.html

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

Ответ 10

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

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

и все!

Ответ 11

ОС: Ubuntu18.04

MySQL: 5,7

  1. добавьте skip-grant-tables пропущенных skip-grant-tables в конец файла mysqld.cnf

  2. cp the 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 пропущенных 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?

Вы должны изменить свой пароль, чтобы заполнить политику или изменить политику.

Ответ 12

Я также столкнулся с той же проблемой в первый раз.

Теперь это исправлено:

Сначала вы копируете файл /etc/mysql/mysql.conf.d/mysqld.cnf и /etc/mysql/my.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

Наконец введите ваш новый пароль.

Ответ 13

Это случилось и со мной. Проблема заключается в репозитории mysql, который уже входит в дистрибутив linux. Поэтому, когда вы просто делаете: $ sudo apt install mysql-server он устанавливает mysql из репозитория по умолчанию, что порождает эту проблему. Чтобы преодолеть это, вам нужно удалить установленный mysql $ sudo apt remove mysql* --purge --auto-remove

Затем загрузите репозиторий MySQL с официального веб-сайта MySQL APT Repo. Следуйте их документации о том, как добавить репо и установить его. Это не дает проблемы. Также, ответив @zetacu, вы можете проверить, что root в mysql теперь действительно использует плагин mysql_native_password.