PhpMyAdmin est une interface Web permettant de gérer les bases de données MySql ou MariaDB.
PhpMyAdmin tourne sur un serveur disposant d'un service HTTP (Apache, Nginx), d'un SGBD MySql ou MariaDB et de l'extension PHP.
Depuis Debian 10, PhpMyAdmin n'a plus de source disponible.
On est donc tenu de l'installer à la main.
La démarche détaillée avec vérification des sources est décrite ici (en anglais). Les principales étapes sont reprises ci-dessous.
On doit avoir installé les extensions suivantes : php-mysqli, php-xml.
Il peut être nécessaire d'installer wget : apt install wget
cd /tmp wget https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.tar.gz
On commence par créer le dossier de destination, puis on dézippe.
mkdir /var/www/html/phpmyadmin tar xvf phpMyAdmin-latest-all-languages.tar.gz --strip-components=1 -C /var/www/html/phpmyadmin
#on copie le fichier d'exemple cp /var/www/html/phpmyadmin/config.sample.inc.php /var/www/html/phpmyadmin/config.inc.php #on l'édite nano /var/www/html/phpmyadmin/config.inc.php
Dans le fichier, on indiquera un mot de passe pour la gestion des cookies
$cfg['blowfish_secret'] = '<mettre_votre_mot_de_passe>';
chmod 660 /var/www/html/phpmyadmin/config.inc.php
chown –R www-data:www-data /var/www/html/phpmyadmin
systemctl restart Apache2 #ou service apache2 restart
Si on a oublié de configurer PhpMyAdmin pour Apache, on peut relancer la configuration par :
# dpkg-reconfigure phpmyadmin
Si on souhaite donner un accès à un compte pour PhpMyAdmin, on donnera les droits via Mysql/MariaDB selon les besoins :
GRANT <privileges> ON <base>.* TO <compte>@localhost identified by '<mot_de_passe_compte>'
#compte avec tous les droits sur une base GRANT ALL PRIVILEGES ON bddGestion.* TO adminBG@localhost identified by 'mdp@DM1N'; #compte avec les droits sur les données de la base GRANT SELECT, INSERT, UPDATE, DELETE ON bddGestion TO usrBG@localhost identified by 'mpU5Rbg';
Dans le navigateur, aller sur http://ip_serveur/phpmyadmin
Pour installer et utiliser PhpMyAdmin, on suivra la procédure suivante :
apt-get install phpmyadmin
Par défaut, on ne peut pas se connecter en utilisant le compte root.
En mesurant le risque de sécurité, on peut le faire en donnant tous les privilèges à root@localhost identified by '<mot_de_passe>'
Il est possible d'installer un serveur PhpMyAdmin unique pour gérer un ensemble de bases de données dispersées sur de multiples serveurs.
L'intérêt est de pouvoir avoir un point d'entrée unique, mais aussi de ne pas installer PhpMyadmin (et le serveur Web + Php associés) sur un serveur uniquement dédié à la gestion des données.
Pour permettre la gestion à distance d'un serveur MySql, les réglages suivant doivent être appliqués sur chaque serveur MySQL.
1 Autoriser la connexion MySql depuis le serveur PhpMyAdmin
Dans le fichier /etc/mysql/my.cnf (ou parfois my.ini ou pour mariadb), modifier la valeur bind-address :
bind-address=<ip_du_serveur_phpmyadmin> #par défaut, la valeur est limitée à 127.0.0.1 ou localhost
On redémarrera alors le service Mysql :
service mysql-server restart
2 Créer un compte habilité à se connecter depuis le serveur PhpMyadmin
Pour des raisons de sécurité, on évitera la connexion distante avec le compte root. Il faut donc créer un compte dédié à la gestion de MySql, autorisé à se connecter via le serveur PhpMyAdmin.
// se connecter à mysql mysql -u <compte_d_admin> -p<mot_de_passe> // création du compte d'administration distante mysql> grant <privileges> on <bases_concernées>.<tables> to <nom_compte>@<ip_serveur_phpmyadmin> identified by '<motPasse>'; //exemple mysql> grant all privileges on BaseGestion to gestAdmin@localhost identified by 'mpADMgest'
Le paramétrage se passe dans le fichier de configuration de PhpMyAdmin /etc/phpmyadmin/config.inc.php :
#les lignes suivantes sont à ajouter pour chaque serveur MySQL $i++; $cfg['Servers'][$i]['verbose']='<nom_serveur_dans_la_liste>'; $cfg['Servers'][$i]['connect_type']='tcp'; $cfg['Servers'][$i]['extension']='mysqli'; $cfg['Servers'][$i]['auth_type']='cookie'; $cfg['Servers'][$i]['user']=''; $cfg['Servers'][$i]['password']=''; $cfg['Servers'][$i]['AllowNoPassword']=true; $cfg['Servers'][$i]['host']='<ip_ou_fqdn_serveur_mysql>';
On redémarrera le service web (exemple pour apache) :
service apache2 restart
//ou
systemctl restart apache2