Итак … Я настраиваю новый сервер и продолжаю сталкиваться с этой проблемой.
Когда я пытаюсь войти в базу данных 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. И да, я попробовал Советы по установке и я не могу найти эти переменные в файлах конфигурации.
Любая помощь высоко ценится 🙂
В некоторых системах, таких как Ubuntu, mysql по умолчанию использует Плагин UNIX auth_socket.
В основном это означает, что: db_users, использующий его, будет «auth» учетные данные пользователя системы. Вы можете увидеть, если ваш 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 способа решить эту проблему:
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';
Обновить:
из комментария @ andy кажется, что mysql 8.x.x обновил / заменил auth_socket
за caching_sha2_password
У меня нет системной настройки с mysql 8.x.x, чтобы проверить это, однако описанные выше шаги должны помочь вам понять проблему. Вот ответ:
Одно из изменений в MySQL 8.0.4 заключается в том, что новый подключаемый модуль аутентификации по умолчанию — caching_sha2_password. Новый ‘YOUR_SYSTEM_USER’ будет иметь этот плагин auth, и теперь вы можете войти в оболочку bash с помощью «mysql -u YOUR_SYSTEM_USER -p» и предоставить пароль для этого пользователя в приглашении. Нет необходимости в шаге «UPDATE user SET plugin». Для обновления плагина аутентификации 8.0.4 по умолчанию см. https://mysqlserverteam.com/mysql-8-0-4-new-default-authentication-plugin-caching_sha2_password/
Проверьте здесь:
Новая версия MYSQL делает это таким образом.
В новом моя-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
Для получения полной информации вы можете обратиться к эта ссылка.
Прокомментируйте любые сомнения.
Я бы предложил удалить соединение 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
У меня была эта проблема на виртуальной машине 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
* введите пароль при появлении запроса
Вы хотите получить доступ к MySQL от имени пользователя root, но не предоставляете правильный пароль пользователя root.
Если вам нужно установить новый пароль для root, На сайте MySQL есть отличная документация о том, как это сделать: http://dev.mysql.com/doc/refman/5.7/en/resetting-permissions.html
Больной не показывать процесс здесь так как MySql документация по вышеуказанной ссылке это ясно и кратко.
шаг 1. sudo mysql -u root -p
шаг 2. USE mysql;
шаг 3. ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'admin';
Здесь «admin» — ваш новый пароль, вы можете изменить его.
Шаг 4 exit
Благодарю. Вы сделали.
Первый шаг: перейдите в /etc/phpmyadmin/config.inc.php, затем раскомментируйте строки, где вы найдете AllowNoPassword.
Второй шаг: войдите в свою учетную запись mysql по умолчанию
mysql -u root -p
use mysql;
update user set plugin="" where user='root';
flush privilege;
и это все!
Тот работал на меня:
mysql --user=root mysql
CREATE USER 'some_user'@'%' IDENTIFIED BY 'some_pass';
GRANT ALL PRIVILEGES ON *.* TO 'some_user'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;