Неможливо ввести phpmyadmin як root (MySQL 5.7)


66

Я використовую робочий стіл Ubuntu 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?
Реель Гугельмін Кунья

Питання оновлено
Mostafa Ahangarha

ПРОСТИЙ ШЛЯХ пошуку для входу в систему та ключового слова в /etc/mysql/debian.cnf - Ubuntu 16.04
cl-r

Відповіді:


127

MySQL 5.7 змінив захищену модель: тепер для rootвходу в MySQL потрібен a 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 у вашій базі даних все одно входити без пароля. На машині локальної розробки це може бути добре, але на сервері це дуже небезпечно.
Dan

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) У апачі2 створіть символічне посилання на 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 та видаленням mysql? Якщо так, то ваша інформація може бути корисною (можливо, тому, що ви пропонуєте видалити mysql, який є БД, який я використовую і я буду використовувати). Якщо ні, то немає сенсу давати це як контекст. Якщо я помиляюся, зробіть мене правильним.
Мостафа Ахангарха

2
Я лише стежив за конфігурацією, і тепер це працює.
cwhisperer

Це гарна ідея не мати пароля для кореневого облікового запису?
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 |
+------------------+-----------+-----------------------+

Перевірте, чи має плагін 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, встановленим на 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/


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;

З повагою


1
Ласкаво просимо до Ask Ubuntu! Запитуйте, що Ubuntu призначений лише для Ubuntu, будь ласка, не публікуйте відповідей про Raspbian (на основі Debian).
fosslinux

2
@ubashu Це рішення не є Raspbian-специфічним, це MariaDB.
Томас Уорд

Дякую! Все ж немає можливості створити нову базу даних.
небезпека89

2

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

Я використовував root як користувач, і пароль, який я знав, був правильним. І я добирався

# 1698 - Доступ заборонено користувачеві 'root' @ 'localhost'

Все, що потрібно було, щоб використовувати phpmyadminяк користувач, а не rootз відомим паролем, і він мене впустив.


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 mysql stop sudo / opt / lampp / lampp start

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