Невозможно ввести phpmyadmin от имени пользователя root (MySQL 5.7).

66

Я использую Ubuntu Desktop 16.04 (обновлен с 15.10).

Я установил phpmyadmin от пользователя apt-get install phpmyadmin. Это работает, если я захожу, localhost/phpmyadminно я не могу войти в систему как root.

Я много искал это. Я нашел много источников, в которых они предлагают изменить /etc/phpmyadmin/config.inc.phpи заменить пользователя и пароль на «root» и «» (пусто для пароля). Но мой config.inc.phpотличается от их. Например, в моем файле нет строки для пользователя и пароля, и кажется, что он автоматически получает его из другого файла, который есть /etc/phpmyadmin/config-db.php. Несмотря на это, я изменил имя пользователя и пароль в этом файле, но теперь я получаю эту ошибку:

#1698 - Access denied for user 'root'@'localhost'

Что я должен делать?


Phpmyadmin версия: 4.5.4.1deb2ubuntu1
mysql Ver 14.14 Distrib 5.7.12, для Linux (x86_64) с использованием оболочки EditLine

Мостафа Ахангарха
источник
Какая версия MySQL?
Раэль Гугельмин Кунья
Вопрос обновлен
Мостафа Ахангарха
Простой способ поиска Войти и Pathword в /etc/mysql/debian.cnf - Ubuntu 16.04
CL-г

Ответы:

128

MySQL 5.7 изменил модель безопасности: теперь для rootвхода в MySQL требуется sudo.

То есть phpMyAdmin не сможет использовать rootучетные данные.

Самым простым, безопасным и постоянным решением будет создание нового пользователя и предоставление необходимых привилегий.

1. Подключитесь к mysql

sudo mysql --user=root mysql

2. Создать реальный пароль

В следующих шагах я буду использовать some_passв качестве примера пароля. ПОЖАЛУЙСТА, ЗАМЕНИТЕ ЕГО ПАРОЛЕМ! НЕ ИСПОЛЬЗУЙТЕ SOME_PASSКАК ПАРОЛЬ!

3. Создайте пользователя для phpMyAdmin

Запустите следующие команды (заменив some_passна нужный пароль):

CREATE USER 'phpmyadmin'@'localhost' IDENTIFIED BY 'some_pass';
GRANT ALL PRIVILEGES ON *.* TO 'phpmyadmin'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;

Если ваш phpMyAdmin подключается к localhost, этого должно быть достаточно.

4. Необязательно и небезопасно: разрешите удаленные подключения

Помните : разрешить удаленному пользователю иметь все привилегии - это проблема безопасности, и в большинстве случаев это не требуется.

Имея это в виду, если вы хотите, чтобы этот пользователь имел те же привилегии во время удаленных подключений, дополнительно запустите (заменив some_passего паролем, использованным на шаге № 2):

CREATE USER 'phpmyadmin'@'%' IDENTIFIED BY 'some_pass';
GRANT ALL PRIVILEGES ON *.* TO 'phpmyadmin'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

5. Обновите phpMyAdmin

Используя sudo, отредактируйте /etc/dbconfig-common/phpmyadmin.confфайл, обновляя значения пользователя / пароля в следующих разделах (заменив some_passпаролем, использованным в Шаге 2):

# dbc_dbuser: database user
#       the name of the user who we will use to connect to the database.
dbc_dbuser='phpmyadmin'

# dbc_dbpass: database user password
#       the password to use with the above username when connecting
#       to a database, if one is required
dbc_dbpass='some_pass'
Раэль Гугельмин Кунья
источник
2
Я буду расследовать. В качестве обходного пути вы можете добавить нового пользователя и предоставить все разрешения, а затем добавить его в файл конфигурации phpmyadmin.
Раэль Гугельмин Кунья
9
Должен любить, что MySQL продолжает ломать вещи после обновлений. Я с удовольствием использовал root в моей рабочей среде, и теперь кажется, что единственное решение - это «sudo mysql» в командной строке, создать нового пользователя, предоставить все те же привилегии и использовать их в Workbench. Глупый.
Андрис
3
@MostafaAhangarha После исследования я обнаружил, что пустой пароль разрешен, но rootпользователь всегда требовал sudoиспользования на 5.7. Итак, я обновил ответ, чтобы создать нового пользователя со всеми привилегиями.
Раэль Гугельмин Кунья
3
@Andris Это заставит людей использовать MySQL более безопасным способом. В любом случае, не стоит разрешать пользователю root в вашей базе данных входить без пароля. Это может быть хорошо на локальной машине разработки, но на сервере это очень опасно.
Дан
2
@Dan - это моя самая большая неприятность - он нарушил мою локальную среду разработки после обновления до Ubuntu 16.04 без каких-либо предупреждений. Я не возражаю против таких вещей, как установка по умолчанию для новых установок, но, по крайней мере, могу спросить перед установкой обновления.
Андрис
10

Я столкнулся с той же проблемой при использовании mariaDB с phpmyadmin (Ubuntu 16.04LTS).

Предпосылки:

1) Установите MariaDB

sudo apt-get -y install mariadb-server mariadb-client
sudo mysql_secure_installation (answer to some interactive questions):
    Enter current password for root (enter for none): <enter>
    Set root password: n
    Remove anonymous users: n
    Disallow root login remotely: n
    Remove test database and access to it: n
    Reload privilege tables now: Y

Если вы хотите удалить mariaDB:

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

2) Установите phpmyadmin

sudo apt-get -y install phpmyadmin (and answer some interactive questions)
    Configuring phpmyadmin:
        Web server to reconfigure automatically: apache2
        Configure database for phpmyadmin with dbconfig-common: Yes
        MySQL application password for phpmyadmin: <blank>

3) В apache2 создайте символическую ссылку на phpmyadmin

sudo ln -s /etc/phpmyadmin/apache.conf /etc/apache2/conf-available/phpmyadmin.conf
sudo a2enconf phpmyadmin.conf
sudo service apache2 restart

Хорошо, теперь, если вы будете следовать инструкциям Раэля, вы сможете войти в систему phpmyadmin, но, по крайней мере для меня, я не смог создать новые базы данных, так как появилось красное сообщение: No privileges(или какое-то подобное сообщение)

Исправление было сделано путем перенастройки phpmyadmin и ответов на некоторые интерактивные вопросы.

sudo dpkg-reconfigure phpmyadmin
<Ok>
Reinstall database for phpmyadmin: <Yes>
Connection method for MySQL database server for phpmyadmin: TCP/IP
Host name of the MySQL database server for phpmyadmin: localhost
Port number for the MySQL service: 3306
MySQL database name for phpmyadmin: phpmyadmin
<Ok>
MySQL username for phpmyadmin: root
MySQL application password for phpmyadmin: pass  # OR ANY PASSWORD YOU WANT
Password confirmation: pass
Name of the database's administrative user: root
Web server to reconfigure automatically: apache2
An error occurred while installing the database: ignore

Теперь, если вы попытаетесь подключиться к phpmyadmin ( localhost/phpmyadmin) с помощью

username: root
password: pass

Вы сможете создавать базы данных.

Дэн Костинель
источник
1
Спасибо за ваш ответ. Но не лучше ли просто поделиться последней частью вместо целой? Я думаю, что остальное здесь не полезно?
Мостафа Ахангарха
@MostafaAhangarha Возможно, пост слишком длинный, но я всегда хотел бы знать контекст, в котором дается ответ.
Дэн
Имеет ли работа sudo dpkg-reconfigure phpmyadmin какое-либо соединение с установкой mariadb и unistalling mysql? Если да, то ваша информация может быть полезна (возможно, потому, что вы предлагаете удалить mysql, которая является БД, которую я использую и буду использовать). Если нет, то нет смысла давать его в качестве контекста. Если я ошибаюсь, поправьте меня.
Мостафа Ахангарха
2
Я только следовал за реконфигурацией, и теперь это работает.
cwhisperer
Это хорошая идея, чтобы не иметь пароль для учетной записи root?
kurdtpage
6

В Ubuntu 16.04 для Mysql 5.7 проверьте информацию в таблице ниже и выполните необходимые настройки:

mysql>  SELECT User, Host, plugin FROM mysql.user;
+------------------+-----------+-----------------------+
| User             | Host      | plugin                |
+------------------+-----------+-----------------------+
| root             | localhost | auth_socket           |
| mysql.session    | localhost | mysql_native_password |
| mysql.sys        | localhost | mysql_native_password |
| debian-sys-maint | localhost | mysql_native_password |
| phpmyadmin       | localhost | mysql_native_password |
| root             | %         | mysql_native_password |
+------------------+-----------+-----------------------+

Проверьте, есть ли у root плагин auth_socket, затем выполните следующую команду:

mysql> UPDATE user SET plugin='mysql_native_password' WHERE User='root';
mysql> FLUSH PRIVILEGES;
mysql> exit;
Сайед Абдул Кадир
источник
Это будет работать до следующего aptобновления MySQL . То есть вам придется применять это после каждого обновления MySQL в Ubuntu.
Раэль Гугельмин Кунья
6

Если phpymadmin не может подключиться, это может быть связано с установленным механизмом аутентификации auth_socket. Вы можете изменить его на обычный пароль, например так:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'my_password';

Я боролся с этим только сейчас на чистой установке Ubuntu 18.04, и именно это заставило его работать. Здесь есть достойная статья, объясняющая больше:

https://www.percona.com/blog/2016/03/16/change-user-password-in-mysql-5-7-with-plugin-auth_socket/

billynoah
источник
3

Для полноты я нашел решение моей проблемы с использованием MariadB версии 10.1.23. Синтаксис, который нужно использовать для настройки нового пользователя, аналогичен синтаксису, описанному в посте выше @Rael Gugelmin Cunha, я разместил здесь свое решение для ссылки на других, сталкивающихся с такой же проблемой:

root@raspberrypi:# sudo mysql --user=root mysql
use mysql;
CREATE USER 'phpmyadmin'@'%' IDENTIFIED BY 'some_password';
GRANT ALL PRIVILEGES ON *.* TO 'phpmyadmin'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

С уважением

FIRE FOX
источник
1
Добро пожаловать в Спросите Ubuntu! Спросите Ubuntu только для Ubuntu, пожалуйста, не публикуйте ответы о Raspbian (на основе Debian).
fosslinux
2
@ubashu Это решение не зависит от Raspbian, оно зависит от MariaDB.
Томас Уорд
Спасибо! Тем не менее, нет возможности создать новую базу данных.
danger89
2

У меня была та же проблема, я следовал большинству советов, и ни один из них не работал для меня! Моя проблема была такой же, когда я открыл http: // localhost / phpmyadmin в своем браузере, он запросил данные для входа.

Я использовал root как пользователь, и пароль, который я знал, был правильным. И я получал

# 1698 - Доступ запрещен для пользователя 'root' @ 'localhost'

Все, что потребовалось, чтобы использовать phpmyadminкак пользователь, а не root, с известным паролем, и это позволило мне войти.

plutesci
источник
3
Вы имеете в виду, что имя пользователя должно быть "phpmyadmin"?
Мостафа Ахангарха
1
Да, это сработало для меня
plutesci
И для меня, который следовал за руководством, пароль был "some_pass", ха-ха. Спасибо!
Марсело Агил
@ MarceloÁgil Я поместил несколько предупреждений в ответе выше, прося людей заменить some_passреальным паролем!
Раэль Гугельмин Кунья
1

Ссылаясь на Раэль Кунья:

Да, его решение работает, и я пробовал другие. Однако ссылка на пользователя, имеющего открытый пароль в файле конфигурации, /etc/dbconfig-common/phpmyadmin.confвыглядит как недостаток безопасности для общесистемного действия.

Так что я бы предпочел предложить что- MariaDB 10.1.xто в этом роде (some_user и some_pass будут чем-то, что вы можете придумать):

# mysql -u root
use mysql;
CREATE USER 'some_user'@'%' IDENTIFIED BY 'some_pass';
GRANT ALL PRIVILEGES ON \*.\* TO 'some_user'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

и оставив настройку phpadmin (4) как есть.

Войдите в phpmyadmin с вашими учетными данными впоследствии

В моих собственных настройках я заменяю вышеуказанный «%» на «localhost» в целях безопасности, но если у вас закрыт порт 3306 на вашем сервере, это не обязательно представляет угрозу безопасности для вас.

Антонио Х. де Оливейра
источник
0

Только код ниже работает для Ubuntu 18.04, PHP 7 выше и MySQL 5.7

CREATE USER 'phpmyadmin'@'localhost' IDENTIFIED BY 'some_pass';
GRANT ALL PRIVILEGES ON *.* TO 'phpmyadmin'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;

Не заменяйте phpmyadmin. Создание любого другого пользователя не имеет полных привилегий, таких как создание нового пользователя, присвоение этому пользователю привилегий базы данных. Только пользователь phpmyadmin получит полный доступ.

Хема Малини
источник
-2

если вы устанавливаете MySQL отдельно, остановите его этой командой ниже sudo / opt / lampp / lampp stop service mysql stop sudo / opt / lampp / lampp start

Зоухир Эльхадрауи
источник