Nie można wprowadzić phpmyadmin jako root (MySQL 5.7)

66

Używam Ubuntu Desktop 16.04 (uaktualniony z 15.10).

Zainstalowałem phpmyadmin od apt-get install phpmyadmin. Działa, jeśli przejdę do, localhost/phpmyadminale nie mogę się zalogować jako root.

Dużo tego szukałem. Znalazłem wiele źródeł, w których sugerują zmianę /etc/phpmyadmin/config.inc.phpi zastąpienie użytkownika i hasła słowami „root” i „” (puste dla hasła). Ale mój config.inc.phpróżni się od ich. Na przykład w moim pliku nie ma wiersza dla użytkownika i hasła i wygląda na to, że pobiera je ono automatycznie z innego pliku, który jest /etc/phpmyadmin/config-db.php. Mimo to zmieniłem użytkownika i hasło w tym pliku, ale teraz pojawia się ten błąd:

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

Co powinienem zrobić?


Wersja phpmyadmin: 4.5.4.1deb2ubuntu1
mysql Ver 14.14 Distrib 5.7.12, dla Linux (x86_64) przy użyciu opakowania EditLine

Mostafa Ahangarha
źródło
Która wersja MySQL?
Rael Gugelmin Cunha
Pytanie zostało zaktualizowane
Mostafa Ahangarha,
PROSTY SPOSÓB wyszukiwania login i ścieżka w /etc/mysql/debian.cnf - Ubuntu 16.04
cl-r

Odpowiedzi:

127

MySQL 5.7 zmienił bezpieczny model: teraz rootlogowanie do MySQL wymaga sudo.

Tj phpMyAdmin będzie nie w stanie wykorzystać rootdane uwierzytelniające.

Najprostszym, najbezpieczniejszym i stałym rozwiązaniem będzie utworzenie nowego użytkownika i przyznanie wymaganych uprawnień.

1. Połącz się z mysql

sudo mysql --user=root mysql

2. Utwórz prawdziwe hasło

W poniższych krokach użyję some_passjako przykładowego hasła. PROSZĘ WYMIENIĆ GO SWOIM HASŁEM! NIE UŻYWAJ SOME_PASSJAKO HASŁA!

3. Utwórz użytkownika dla phpMyAdmin

Uruchom następujące polecenia (zastępując some_passżądanym hasłem):

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

Jeśli twój phpMyAdmin łączy się z localhost, powinno to wystarczyć.

4. Opcjonalne i niebezpieczne: zezwalaj na połączenia zdalne

Pamiętaj : zezwalanie użytkownikowi zdalnemu na posiadanie wszystkich uprawnień stanowi zagrożenie bezpieczeństwa i nie jest to wymagane w większości przypadków.

Mając to na uwadze, jeśli chcesz, aby ten użytkownik miał takie same uprawnienia podczas połączeń zdalnych, dodatkowo uruchom (zastępując some_passhasło użyte w kroku 2):

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

5. Zaktualizuj phpMyAdmin

Za pomocą sudoedytuj /etc/dbconfig-common/phpmyadmin.confplik aktualizujący wartości użytkownika / hasła w następujących sekcjach (zastępując some_passje hasłem użytym w kroku 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'
Rael Gugelmin Cunha
źródło
2
Zbadam. Tymczasem jako obejście tego problemu możesz dodać nowego użytkownika i udzielić wszystkich uprawnień, a następnie dodać to do pliku konfiguracyjnego phpmyadmin.
Rael Gugelmin Cunha
9
Uwielbiam to, że MySQL ciągle psuje rzeczy po uaktualnieniach. Z radością korzystałem z roota w moim środowisku roboczym i teraz wydaje się, że jedynym rozwiązaniem jest „sudo mysql” w wierszu poleceń, utworzenie nowego użytkownika, przyznanie tych samych uprawnień i użycie go w Workbench. Głupi.
Andris
3
@MostafaAhangarha Po sprawdzeniu okazało się, że puste hasło jest dozwolone, ale rootużytkownik zawsze wymagał sudoużycia na 5.7. Zaktualizowałem więc odpowiedź, aby utworzyć nowego użytkownika ze wszystkimi uprawnieniami.
Rael Gugelmin Cunha
3
@Andris Zmusi to ludzi do korzystania z MySQL w bardziej bezpieczny sposób. I tak nigdy nie jest dobrym pomysłem zezwolenie użytkownikowi root na bazie danych na logowanie się bez hasła. Na lokalnym komputerze deweloperskim może być w porządku, ale na serwerze jest to bardzo niebezpieczne.
Dan
2
@Dan - to mój największy problem - zepsuł moje lokalne środowisko programistyczne po aktualizacji do Ubuntu 16.04 bez żadnych ostrzeżeń. Nie mam nic przeciwko temu, że takie ustawienia są domyślne dla nowych instalacji, ale mogę przynajmniej zapytać przed zainstalowaniem aktualizacji.
Andris
10

Napotkałem ten sam problem podczas korzystania z mariaDB z phpmyadmin (Ubuntu 16.04LTS).

Wymagania wstępne:

1) Zainstaluj 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

Jeśli chcesz odinstalować 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) Zainstaluj 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) W apache2 utwórz dowiązanie symboliczne do phpmyadmin

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

Ok, teraz, jeśli będziesz postępować zgodnie z instrukcjami Rael, będziesz mógł się zalogować phpmyadmin, ale przynajmniej dla mnie nie byłem w stanie utworzyć nowych baz danych, ponieważ pojawiła się czerwona wiadomość: No privileges(lub podobna wiadomość)

Poprawka polegała na ponownej konfiguracji phpmyadmin i udzieleniu odpowiedzi na niektóre interaktywne pytania.

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

Teraz, jeśli spróbujesz połączyć się z phpmyadmin ( localhost/phpmyadmin) za pomocą

username: root
password: pass

będziesz mógł tworzyć bazy danych.

Dan Costinel
źródło
1
Dziękuję za Twoją odpowiedź. Ale czy nie lepiej było po prostu udostępnić ostatnią część zamiast całości? Myślę, że reszta nie jest tu przydatna?
Mostafa Ahangarha,
@MostafaAhangarha Może post jest trochę za długi, ale zawsze lubię znać kontekst, w którym udzielana jest odpowiedź.
Dan Costinel,
Czy bieganie sudo dpkg-reconfigure phpmyadmin ma jakiś związek z instalacją mariadb i unistalling mysql? Jeśli tak, to Twoje informacje mogą być przydatne (może dlatego, że sugerujesz usunięcie mysql, którego używam i używam DB). Jeśli nie, to nie ma sensu podawać go jako kontekstu. Jeśli się mylę, popraw mnie.
Mostafa Ahangarha
2
Przeszłam tylko rekonfigurację i teraz działa.
cispisperer
Czy warto nie mieć hasła do konta root?
kurdtpage
6

W Ubuntu 16.04 dla MySQL 5.7 sprawdź poniższe informacje w tabeli i wprowadź niezbędne ustawienia:

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 |
+------------------+-----------+-----------------------+

Sprawdź, czy root ma wtyczkę auth_socket, a następnie uruchom poniższe polecenie:

mysql> UPDATE user SET plugin='mysql_native_password' WHERE User='root';
mysql> FLUSH PRIVILEGES;
mysql> exit;
Syed Abdul Qadeer
źródło
Będzie działać do następnej aptaktualizacji MySQL . Tzn. Musisz to zastosować po każdej aktualizacji MySQL na Ubuntu.
Rael Gugelmin Cunha,
6

Jeśli phpymadmin nie może się połączyć, może to wynikać z ustawienia mechanizmu autoryzacji na auth_socket. Możesz to zmienić, aby używać zwykłego hasła takiego jak to:

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

Walczyłem z tym właśnie teraz podczas czystej instalacji Ubuntu 18.04 i to sprawiło, że działało. Jest tutaj przyzwoity artykuł wyjaśniający więcej:

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

billynoah
źródło
3

Dla kompletności znalazłem rozwiązanie mojego problemu z używaniem MariadB w wersji 10.1.23. Składnia, której należy użyć, aby skonfigurować nowego użytkownika, jest podobna do tej zgłoszonej w powyższym poście z @Rael Gugelmin Cunha. Tutaj umieściłem moje rozwiązanie w celu odniesienia do innych osób mających podobne problemy:

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;

pozdrowienia

FIRE FOX
źródło
1
Witamy w Ask Ubuntu! Zapytaj Ubuntu tylko dla Ubuntu, nie publikuj odpowiedzi na temat Raspbian (na podstawie Debiana).
fosslinux
2
@ubashu To rozwiązanie nie jest specyficzne dla Raspbian, jest specyficzne dla MariaDB.
Thomas Ward
Dzięki! Nadal nie ma możliwości utworzenia nowej bazy danych.
niebezpieczne89
2

Miałem ten sam problem, postępowałem zgodnie z większością rad i żadna z nich nie działała dla mnie! Mój problem był taki sam, kiedy otworzyłem http: // localhost / phpmyadmin w mojej przeglądarce, poprosiłem o szczegóły logowania.

Jako użytkownik korzystałem z roota , a hasło, które znałem, było prawidłowe. I dostawałem

# 1698 - Odmowa dostępu dla użytkownika „root” @ „localhost”

Wystarczyło użyć phpmyadminjako użytkownika, a nie rootze znanym hasłem i wpuścił mnie.

plutesci
źródło
3
Masz na myśli nazwę użytkownika „phpmyadmin”?
Mostafa Ahangarha
1
Tak, zadziałało dla mnie
plutesci
A dla mnie po tutorialu hasło brzmiało „some_pass” haha. Dzięki!
Marcelo Ágil
@ MarceloÁgil W powyższej odpowiedzi umieściłem kilka ostrzeżeń, prosząc ludzi o zastąpienie some_passprawdziwym hasłem!
Rael Gugelmin Cunha
1

Nawiązując do Rael Cunha:

Tak, jego rozwiązanie działa, a ja próbowałem innych. Jednak odniesienie do użytkownika, który ma ujawnione hasło w pliku konfiguracyjnym, /etc/dbconfig-common/phpmyadmin.confwygląda jak luka w zabezpieczeniach dla akcji ogólnosystemowej.

Dlatego wolałbym zasugerować, o co MariaDB 10.1.xchodzi (some_user i some_pass będzie wszystkim, co możesz wymyślić):

# 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;

i pozostawiając konfigurację phpadmin (4) bez zmian.

Zaloguj się do phpmyadmin, używając własnych poświadczeń

Według moich własnych ustawień powyższy „%” zastępuję „localhost” ze względów bezpieczeństwa, ale jeśli masz zamknięty port 3306 na swoim serwerze, co niekoniecznie stanowiłoby dla ciebie zagrożenie bezpieczeństwa.

Antonio J. de Oliveira
źródło
0

Tylko poniższy kod działa dla Ubuntu 18.04, php 7 powyżej i mysql 5.7

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

Nie zastępuj „phpmyadmin”. Tworzenie innych użytkowników nie ma pełnych uprawnień, takich jak tworzenie nowego użytkownika, przypisywanie uprawnień do bazy danych temu użytkownikowi. Tylko użytkownik phpmyadmin uzyska pełny dostęp.

Hemamalini
źródło
-2

jeśli zainstalujesz MySQL osobno zatrzymaj go poleceniem poniżej sudo / opt / lampp / lampp stop service mysql stop sudo / opt / lampp / lampp start

zouhair elhadraoui
źródło