Impossible de saisir phpmyadmin en tant que root (MySQL 5.7)

66

J'utilise le bureau Ubuntu 16.04 (mis à jour à partir de 15.10).

J'avais installé phpmyadmin de by apt-get install phpmyadmin. Cela fonctionne si je vais à localhost/phpmyadminmais je ne peux pas me connecter en tant que root.

Je l'ai beaucoup cherché. J'ai trouvé de nombreuses sources dans lesquelles ils suggèrent de modifier /etc/phpmyadmin/config.inc.phpet de remplacer l'utilisateur et le mot de passe par 'root' et '' (vide pour mot de passe). Mais le mien config.inc.phpest différent du leur. Par exemple, dans mon fichier, il n'y a pas de ligne pour l'utilisateur et le mot de passe et il semble qu'il l'obtienne automatiquement à partir d'un autre fichier qui est /etc/phpmyadmin/config-db.php. Malgré cela, j'ai changé l'utilisateur et le mot de passe dans ce fichier, mais maintenant j'obtiens cette erreur:

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

Ce que je devrais faire?


Phpmyadmin Version: 4.5.4.1deb2ubuntu1
mysql Ver 14.14 Distrib 5.7.12, pour Linux (x86_64) en utilisant le wrapper EditLine

Mostafa Ahangarha
la source
Quelle version de MySQL?
Rael Gugelmin Cunha
La question est mise à jour
Mostafa Ahangarha le
THE SIMPLE WAY recherche un identifiant et un mot de passe dans /etc/mysql/debian.cnf - Ubuntu 16.04
cl-r

Réponses:

128

MySQL 5.7 a changé le modèle sécurisé: maintenant, la rootconnexion à MySQL nécessite un sudo.

C'est-à-dire que phpMyAdmin ne pourra pas utiliser les rootinformations d'identification.

La solution la plus simple, la plus sûre et la plus permanente sera la création d’un nouvel utilisateur et l’octroi des privilèges requis.

1. Connectez-vous à mysql

sudo mysql --user=root mysql

2. Créez un vrai mot de passe

Dans les étapes ci-dessous, je vais utiliser some_passcomme exemple de mot de passe. VEUILLEZ, REMPLACEZ-LE PAR VOTRE MOT DE PASSE! NE PAS UTILISER SOME_PASSCOMME MOT DE PASSE!

3. Créez un utilisateur pour phpMyAdmin

Exécutez les commandes suivantes (en les remplaçant some_passpar le mot de passe souhaité):

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

Si votre phpMyAdmin se connecte à localhost, cela devrait suffire.

4. Facultatif et non sécurisé: autoriser les connexions à distance

Rappelez - vous : autoriser un utilisateur distant à disposer de tous les privilèges est un problème de sécurité qui n’est pas requis dans la plupart des cas.

Dans cet esprit, si vous souhaitez que cet utilisateur dispose des mêmes privilèges lors des connexions à distance, exécutez-le en plus (en le remplaçant some_passpar le mot de passe utilisé à l'étape 2):

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

5. Mettre à jour phpMyAdmin

En utilisant sudo, éditez le /etc/dbconfig-common/phpmyadmin.conffichier en mettant à jour les valeurs d’utilisateur / mot de passe dans les sections suivantes (en le remplaçant some_passpar le mot de passe utilisé à l’étape 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
la source
2
Je vais enquêter. En guise de solution de contournement, vous pouvez ajouter un nouvel utilisateur et octroyer toutes les autorisations, puis l’ajouter au fichier de configuration phpmyadmin.
Rael Gugelmin Cunha
9
Il faut aimer que MySQL continue à casser des choses après les mises à jour. Utilisait joyeusement root dans mon Workbench et maintenant, il semble que la seule solution consiste à "sudo mysql" sur la ligne de commande, à créer un nouvel utilisateur, à octroyer les mêmes privilèges et à les utiliser dans Workbench. Stupide.
Andris
3
@MostafaAhangarha Après enquête, j'ai trouvé que le mot de passe vide est autorisé, mais l' rootutilisateur a toujours demandé l' sudoutilisation de la version 5.7. J'ai donc mis à jour la réponse pour guider la création d'un nouvel utilisateur avec tous les privilèges.
Rael Gugelmin Cunha Le
3
@Andris Cela obligera les gens à utiliser MySQL de manière plus sécurisée. Ce n'est jamais une bonne idée de permettre à l'utilisateur root de votre base de se connecter sans mot de passe de toute façon. Cela peut aller sur une machine de développement locale, mais sur un serveur, c'est très dangereux.
Dan
2
@Dan - c'est mon principal reproche - il a brisé mon environnement de développement local après la mise à niveau vers Ubuntu 16.04 sans aucun avertissement. Cela ne me dérange pas que ce soit le cas par défaut pour les nouvelles installations, mais je pourrais au moins demander avant d'installer une mise à jour.
Andris
10

J'avais le même problème lorsque j'utilisais mariaDB avec phpmyadmin (Ubuntu 16.04LTS).

Conditions préalables:

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

Si vous souhaitez désinstaller 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) Installer 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) Dans apache2, créez un lien symbolique vers phpmyadmin

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

Ok, maintenant, si vous suivez les instructions de Rael, vous pourrez vous connecter phpmyadmin, mais au moins pour moi, je n'ai pas pu créer de nouvelles bases de données, un message rouge est apparu: No privileges(ou un message similaire)

Le correctif consistait à reconfigurer phpmyadmin et à répondre à des questions interactives.

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

Maintenant, si vous essayez de vous connecter à phpmyadmin ( localhost/phpmyadmin) en utilisant

username: root
password: pass

vous pourrez créer des bases de données.

Dan Costinel
la source
1
Merci pour votre réponse. Mais n'était-il pas préférable de simplement partager la dernière partie au lieu du tout? Je pense que le reste n'est pas utile ici?
Mostafa Ahangarha
@MostafaAhangarha Peut-être que la publication est un peu trop longue, mais j'aime toujours connaître le contexte dans lequel une réponse est donnée.
Dan Costinel
Est-ce que la course à pied sudo dpkg-reconfigure phpmyadmin est liée à l’installation de mariadb et à la désinstallation de MySQL? Si oui, alors vos informations pourraient être utiles (peut-être parce que vous suggérez la suppression de mysql qui est la base de données que j'utilise et que je vais utiliser). Sinon, il est inutile de donner le contexte. Si je me trompe, corrigez-moi.
Mostafa Ahangarha
2
J'ai seulement suivi la reconfiguration et maintenant cela fonctionne.
Whisperer
Est-ce une bonne idée de ne pas avoir de mot de passe pour le compte root?
kurdtpage
6

Dans Ubuntu 16.04 pour Mysql 5.7, vérifiez les informations du tableau ci-dessous et effectuez les réglages nécessaires:

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

Vérifiez si root a le plugin auth_socket, puis lancez la commande ci-dessous:

mysql> UPDATE user SET plugin='mysql_native_password' WHERE User='root';
mysql> FLUSH PRIVILEGES;
mysql> exit;
Syed Abdul Qadeer
la source
Cela fonctionnera jusqu’à la prochaine aptmise à jour de MySQL . C'est-à-dire que vous devrez appliquer cela après chaque mise à jour MySQL sous Ubuntu.
Rael Gugelmin Cunha
6

Si phpymadmin ne peut pas se connecter, c'est peut-être parce que le mécanisme d'authentification est défini sur auth_socket. Vous pouvez le changer pour utiliser un mot de passe régulier comme ceci:

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

Je me débattais tout à l'heure avec cette nouvelle installation d'Ubuntu 18.04 et c'est ce qui a fait que cela fonctionne. Il y a un article décent ici expliquant plus:

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

Billynoah
la source
3

Pour être complet, j'ai trouvé une solution à mon problème en utilisant MariadB version 10.1.23. La syntaxe à utiliser pour configurer un nouvel utilisateur est similaire à celle décrite dans l'article ci-dessus de @Rael Gugelmin Cunha. J'ai mis ici ma solution pour référence aux autres personnes confrontées au même problème:

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;

Cordialement

FOIRE FOX
la source
1
Bienvenue sur Ask Ubuntu! Ask Ubuntu s’applique uniquement à Ubuntu. Ne publiez pas de réponses à propos de Raspbian (basé sur Debian).
fosslinux
2
@ubashu Cette solution n'est pas spécifique à Raspbian, elle est spécifique à MariaDB.
Thomas Ward
Merci! Toujours pas d'option pour créer une nouvelle base de données cependant.
danger89
2

J'ai eu le même problème, j'ai suivi la plupart des conseils et rien de tout cela n'a fonctionné pour moi! Mon problème était le même quand j'ai ouvert http: // localhost / phpmyadmin dans mon navigateur, il a demandé le journal dans les détails.

J'utilisais root en tant qu'utilisateur et le mot de passe que je connaissais était correct. Et je devenais

# 1698 - Accès refusé pour l'utilisateur 'root' @ 'localhost'

Il suffisait d’utiliser phpmyadmincomme utilisateur, pas rootavec le mot de passe connu, et cela m’a laissé entrer.

plutesci
la source
3
Vous voulez dire que le nom d'utilisateur devrait être "phpmyadmin"?
Mostafa Ahangarha
1
Oui, cela a fonctionné pour moi
18:18
Et pour moi qui suivait un tutoriel, le mot de passe était "some_pass" haha. Merci!
Marcelo Ágil le
@ MarceloÁgil J'ai mis plusieurs avertissements dans ma réponse ci-dessus, demandant aux gens de le remplacer some_passpar un vrai mot de passe!
Rael Gugelmin Cunha
1

Se référant à Raël Cunha:

Oui, sa solution fonctionne et j'en ai essayé d'autres. Cependant, faire référence à un utilisateur ayant un mot de passe exposé sur un fichier de configuration, /etc/dbconfig-common/phpmyadmin.confressemble à une faille de sécurité pour une action à l'échelle du système.

Donc, je préférerais suggérer ce qui MariaDB 10.1.xest concerné (some_user et some_pass seront tout ce que vous pourrez trouver):

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

et en laissant phpadmin setup (4) tel quel.

Connectez-vous à phpmyadmin avec vos propres informations d'identification après coup

Sur mes propres configurations, je remplace le '%' ci-dessus par 'localhost' pour des raisons de sécurité, mais si vous fermez le port 3306 sur votre serveur, cela ne présente pas nécessairement de risque de sécurité.

Antonio J. de Oliveira
la source
0

Seul le code ci-dessous fonctionne pour Ubuntu 18.04, php 7 ci-dessus et mysql 5.7

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

Ne remplacez pas 'phpmyadmin'. La création d'un autre utilisateur ne dispose pas des privilèges complets. Par exemple, créez un nouvel utilisateur, attribuez-lui les privilèges de base de données à cet utilisateur. Seul l'utilisateur phpmyadmin aura un accès complet.

Hemamalini
la source
-2

si vous installez MySQL séparément, arrêtez-le avec cette commande ci-dessous sudo / opt / lampp / lampp arrêter le service mysql arrêter sudo / opt / lampp / lampp start

zouhair elhadraoui
la source