ОШИБКА 1698 (28000): доступ запрещен для пользователя 'root'@'localhost'
Итак... Я настраиваю новый сервер и продолжаю сталкиваться с этой проблемой.
Когда я пытаюсь войти в базу данных MySQL от имени пользователя root, я получаю сообщение об ошибке "ОШИБКА 1698 (28000): доступ запрещен для пользователя" root "@" localhost "".
Не имеет значения, подключусь ли я через терминал (SSH), через PHPMyAdmin или MySQL Client, например, 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. И да, я попробовал советы по установке, и я не могу найти эти переменные в файлах конфигурации.
Любая помощь высоко ценится:)
24 ответа
В некоторых системах, таких как 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 способа решить эту проблему:
- Вы можете настроить пользователя root на использование
mysql_native_password
плагин - Вы можете создать новый
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';
Обновление: из комментария Энди @ кажется, что 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/
Проверьте здесь:
Новая версия 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
Для получения полной информации вы можете обратиться по этой ссылке.
Прокомментируйте любые сомнения.
Нет необходимости в sudo
База данных инициализируется двумя учетными записями со всеми привилегиями: первая - это "root", которая недоступна, а вторая - с вашим именем пользователя (проверьте с помощью команды whoami
).
Чтобы включить доступ к учетной записи root, вам необходимо войти в систему под своим именем пользователя
mysql -u $(whoami)
и вручную изменить пароль для root
use mysql;
set password for 'root'@'localhost' = password('YOUR_ROOT_PASSWORD_HERE');
flush privileges;
quit
Войти как root
mysql -u root -p
У меня была эта проблема на виртуальной машине Debian 8, с которой я взаимодействовал через Putty на моем рабочем столе Windows 10.
Я попробовал различные предложения здесь, но ничего не получилось, и я запускаю MariaDB на хосте Debian. В конце концов я обнаружил, что не могу запустить сервер БД в безопасном режиме, но мне это не нужно, и следующие команды действительно работают для меня, то есть позволяют вновь созданному пользователю MySql войти на сервер MySql/MariaDB:
sudo service mysql stop
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
* введите пароль при появлении запроса
Шаг 1. sudo mysql -u root -p
шаг 2. USE mysql;
шаг 3. ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'admin';
Здесь 'admin' - ваш новый пароль, вы можете изменить его.
Шаг 4 exit
Благодарю. Вы сделали.
Существует хорошее и регулярно обновляемое руководство о том, как установить новый пароль для последней версии MySQL.
https://www.digitalocean.com/community/tutorials/how-to-install-mysql-on-ubuntu-20-04
Было бы лучше прочитать всю тему по ссылке выше, но вкратце, это может помочь,
Запустите сценарий безопасности:
sudo mysql_secure_installation
Подробная информация по "mysql_secure_installation"
После этого вы можете изменить пароль, выполнив следующие действия.
sudo mysql
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'password';
Подробная информация о смене пароля пользователя root
Если у вас возникла проблема, возможно, вам потребуется переустановить MySql.
После нескольких часов борьбы без решения здесь это сработало для меня, затем я нашел видео на 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
Обратитесь к этой видео-ссылке для лучшего понимания
Я бы предложил удалить соединение 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
Первый
sudo mysql -u root -p
SHOW VARIABLES LIKE 'validate_password%';
мы увидим что-то вроде этого:
+--------------------------------------+--------+
| Variable_name | Value |
+--------------------------------------+--------+
| validate_password.check_user_name | ON |
| 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 |
+--------------------------------------+--------+
нам нужно изменить эти строки
- validate_password.length
- validate_password.number_count
- validate_password.policy
- validate_password.special_char_count
SET GLOBAL validate_password.policy=LOW;
SET GLOBAL validate_password.length=4;
SET GLOBAL validate_password.number_count=0;
SET GLOBAL validate_password.special_char_count=0;
SHOW VARIABLES LIKE 'validate_password%';
// посмотрим
+--------------------------------------+-------+
| Variable_name | Value |
+--------------------------------------+-------+
| validate_password.check_user_name | ON |
| validate_password.dictionary_file | |
| validate_password.length | 4 |
| validate_password.mixed_case_count | 1 |
| validate_password.number_count | 0 |
| validate_password.policy | LOW |
| validate_password.special_char_count | 0 |
+--------------------------------------+-------+
теперь выйдите из MySQL
exit;
sudo mysql -u root -p
и теперь вы можете написать свой пароль 4 и более букв.
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new-password';
exit;
sudo mysql -u root -p
ваш новый пароль находится в БД для пользователя root;
Я тоже столкнулся с той же проблемой в первый раз.
Теперь исправлено:
Сначала вы копируете /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
Наконец, введите вновь созданный пароль.
Я нашел свое решение после нескольких часов исследований здесь.
Остановить 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
В моем случае,
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
поэтому я перехожу в систему с помощью sudo,
dev@Dev-007:~$ sudo mysql -u root -p
на этот раз у меня это сработало. посмотреть документацию
а затем измените пароль root,
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
это работает для меня с mysql Ver 8.0.26, ubuntu 20.04
sudo mysql -u root
mysql> USE mysql;
mysql> SELECT User, Host, plugin FROM mysql.user;
+------------------+-----------+-----------------------+
| User | Host | plugin |
+------------------+-----------+-----------------------+
| debian-sys-maint | localhost | caching_sha2_password |
| mysql.infoschema | localhost | caching_sha2_password |
| mysql.session | localhost | caching_sha2_password |
| mysql.sys | localhost | caching_sha2_password |
| root | localhost | auth_socket |
+------------------+-----------+-----------------------+
mysql> UPDATE user SET plugin='caching_sha2_password' WHERE User='root';
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'you_mysql_password';
mysql> FLUSH PRIVILEGES;
mysql> exit;
$ sudo service mysql restart
Это сработало для меня:
mysql --user=root mysql
CREATE USER 'some_user'@'%' IDENTIFIED BY 'some_pass';
GRANT ALL PRIVILEGES ON *.* TO 'some_user'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
Это сработало для меня на mysql Ver 15.1:
$ sudo mysql
MariaDB [mysql]> use mysql;
MariaDB [mysql]> set password for 'root'@'localhost' = password('YOUR_ROOT_PASSWORD_HERE');
MariaDB [mysql]> flush privileges;
MariaDB [mysql]> quit
Войти как «корень»
mysql -u root -p
Кредиты user5952631
ответ, данный @zetacu и @peter, очень точен, но только часть его сработала для меня. Добавьте это сюда для пользователей, которые используют
mysql Ver 8.0.30-0ubuntu0.20.04.2 for Linux on x86_64 ((Ubuntu))
Итак, моя пользовательская таблица выглядела так:
mysql> SELECT User,Host,plugin FROM mysql.user;
+------------------+-----------+-----------------------+
| User | Host | plugin |
+------------------+-----------+-----------------------+
| debian-sys-maint | localhost | caching_sha2_password |
| mysql.infoschema | localhost | caching_sha2_password |
| mysql.session | localhost | caching_sha2_password |
| mysql.sys | localhost | caching_sha2_password |
| pk | localhost | auth_socket |
| root | localhost | auth_socket |
+------------------+-----------+-----------------------+
6 rows in set (0.00 sec)
Итак, сначала я последовал второму (рекомендуемому) варианту замены YOUR_SYSTEM_USER на имя пользователя, которое у вас есть. Итак, я создал нового пользователя с таким же подходом, но ничего не сработало.
Затем я попробовал первый подход, чтобы настроить пользователя root для использования плагина my_native_password:
sudo mysql -u root
mysql> USE MySQL;
mysql> UPDATE user SET plugin='mysql_native_password' WHERE
User='root';
mysql> FLUSH PRIVILEGES;
mysql> exit;
sudo service mysql restart
И ЭТО РАБОТАЛО!!! Итак, просто создайте нового пользователя и заставьте его использовать плагин my_native_password.
ОС:Ubuntu18.04
MySQL:5,7
добавить
skip-grant-tables
в конец файла mysqld.cnfcp my.cnf
sudo cp /etc/mysql/mysql.conf.d/mysqld.cnf /etc/mysql/my.cnf
- сбросить пароль
(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
- удалить
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
- откройте 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>
- проверьте политику паролей
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)!
- изменить конфиг
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?
Вы должны изменить свой пароль, чтобы заполнить политику или изменить политику.
Первый шаг: перейдите в /etc/phpmyadmin/config.inc.php, затем раскомментируйте строки, где вы найдете AllowNoPassword . Второй шаг: войдите в свою учетную запись mysql по умолчанию
mysql -u root -p
use mysql;
update user set plugin="" where user='root';
flush privilege;
и это все!
Вы хотите получить доступ к MySQL от имени пользователя root, но не предоставляете правильный пароль пользователя root.
Если вам нужно установить новый пароль для root, на сайте MySQL есть отличная документация о том, как это сделать: http://dev.mysql.com/doc/refman/5.7/en/resetting-permissions.html
Я не буду показывать процесс здесь, потому что документация MySql по вышеуказанной ссылке понятна и лаконична.
Для тех, кто устанавливает последнюю версию MariaDB на macOS и следует этому руководству в документации MariaDB, запустите:
sudo mariadb-secure-installation
вместо того, чтобы просто
mariadb-secure-installation
дана команда. В противном случае не повезло, несмотря на ошибочную подсказку:
In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
haven't set the root password yet, you should just press enter here.
Enter current password for root (enter for none):
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
Enter current password for root (enter for none):
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
Enter current password for root (enter for none):
Aborting!
для всех, кто пробовал решение здесь и ничего не работает, убедитесь, что вы используете правильную команду, sudo
sudo mysql -u root -p
и нет
mysql mysql -u root -p
, вам нужно будет ввести два пароля: текущий и корневой.
Это случилось и со мной. Проблема заключается в репозитории 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.
Я сделал следующие шаги, чтобы избавиться от этой проблемы. Войдите в MySQL на своем компьютере с помощью (sudo mysql -p -u root) и выполните следующие запросы.
1. CREATE USER 'jack'@'localhost' IDENTIFIED WITH mysql_native_password BY '<<any password>>';
2. GRANT ALL PRIVILEGES ON *.* TO 'jack'@'localhost';
3. SELECT user,plugin,host FROM mysql.user WHERE user = 'root';
+------+-------------+-----------+
| user | plugin | host |
+------+-------------+-----------+
| root | auth_socket | localhost |
+------+-------------+-----------+
4. ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '<<any password>>';
5. FLUSH PRIVILEGES;
Пожалуйста, попробуйте один раз, если вы все еще получаете ошибку. Надеюсь, этот код вам очень поможет !!
Позвольте мне решить это за вас.
- Попади в sql.
- Введите следующее.
SET GLOBAL validate_password.length = 4;
SET GLOBAL validate_password.mixed_case_count = 0;
SET GLOBAL validate_password.number_count = 0;
SET GLOBAL validate_password.policy = LOW;
SET GLOBAL validate_password.special_char_count = 0;
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'test';
Только для тестирования.