Le serveur MySQL
Présentation
MySQL est un système de gestion de base de données (SGBD). Il fait partie des logiciels de gestion de base de données les plus utilisés au monde, autant par le grand public que par des professionnels.
Le couple PHP/MySQL est très utilisé par les sites Web et proposé par la majorité des hébergeurs Web comme chez FranceServ Hébergement.
Depuis la version 5, il est possible d'utiliser le PL/SQL afin d'utiliser des procédures et fonctions stockées ainsi que des déclencheurs.
Les moteurs MySQL disponibles
Chez FranceServ Hébergement, deux moteurs MySQL sont disponibles :
- MyISAM : moteur par défaut de MySQL. Il est le plus simple à utiliser et à mettre en œuvre. Il utilise plusieurs fichiers qui grandissent au fur et à mesure que la base grossit. Il ne supporte pas les transactions, ni les clefs étrangères.
- InnoDB : moteur créé et maintenu par InnoBase. Il gère les transactions et les clefs étrangères (et donc une gestion d'intégrité de table).
Préparez vos requêtes SQL pour empêcher l'injection SQL
N'utilisez plus $_GET ou $_POST dans vos requêtes SQL sans les préparer et oubliez les fonctions mysql_real_escape_string(), mysql_connect() ou encore mysql_query() qui n'existent plus depuis PHP 7.
Le TRES mauvais exemple à ne surtout pas utiliser est cette ligne :
$query = “SELECT email FROM users WHERE name= ' ” . $_POST['name'] . ' “ LIMIT 1”;
Car même si cette ligne fonctionne, elle est ULTRA dangereuse : n'importe quel internaute peut envoyer autre chose qu'un nom d'utilisateur. Il est possible d'envoyer tout ce qu'il veut et même plusieurs autres requêtes SQL en même temps dans une même requête HTTP : récupérer toutes vos bases de données, les modifier ou les supprimer. C'est ce que l'on nomme de l'injection SQL.
Pour éviter cela, lorsque l'on appelle une variable, il faut toujours “préparer” ses requêtes à l'aide de MySQLi ou de PDO.
Un exemple sécurisé et complet avec PDO :
$host = "sql.franceserv.fr"; $base = "demo_db1"; $user = "demo"; $pass = "password"; $pdo = new PDO("mysql:host=".$host.";dbname=".$base, $user, $pass); $sth = $pdo->prepare("SELECT email FROM users WHERE name = :name"); $data = $sth->execute(array(':name' => $_POST['name'])); echo("Adresse email : ".$data['mail']);
Se connecter au serveur MySQL depuis l'extérieur
L'accès extérieur au serveur de bases de données MySQL est possible uniquement aux adresses IP autorisées et déclarées dans votre interface de gestion et seulement si vous êtes sur une formule d'hébergement payante. Dans le cas contraire, l'accès depuis l'extérieur est impossible, seul le site Internet y a accès. Ce contrôle d'accès est mis à jour toutes les minutes.
Il est également possible de restreindre l'accès au serveur FTP à votre compte depuis ces mêmes adresses IP.
Ça se passe à l'adresse suivante : https://www.franceserv.fr/gestion/compte/securite/protections-ip
Quota MySQL
Selon l'offre d'hébergement choisie, le quota MySQL peut aller de 1 Go à 100 Go.
Lors du dépassement du quota maximum alloué, une alerte est envoyée par mail afin de vous indiquer de corriger la situation en souscrivant plus d'espace ou en réduisant l'espace utilisé. Si la situation est toujours la même après 72 heures, l'ensemble des services sont bloqués.
Pour consulter la taille de vos bases de données, connectez-vous à votre gestionnaire client.
Compte MySQL supplémentaires
Il est possible de créer des comptes MySQL supplémentaires avec un identifiant de son choix avec un mot de passe indépendant de son compte et des privilèges personnalisés sur les bases de données désirées.
Les comptes MySQL supplémentaires sont modifiables à tout moment et sont pris en compte immédiatement et sont accessibles à partir du pack d'hébergement Standard en ajoutant l'option.
Pour accéder directement à ce gestionnaire : https://www.franceserv.fr/gestion/sql/compte/
Connexions simultanées
Le nombre de connexions simultanées au serveur de bases de données MySQL correspond au nombre de requêtes s'effectuant en même temps pour un même compte SQL. Lorsque la limite est atteinte, les nouvelles requêtes sont bloquées tant qu'il y a dépassement.
Referez-vous aux offres d'hébergement proposées : https://www.franceserv.fr/offres-hebergement
Attention : Le nombre de connexions simultanées au serveur MySQL ne correspond pas du tout au nombre de connectés simultanés sur votre site. Selon la complexité d'une requête SQL et de sa durée d'exécution, le nombre de requêtes SQL simultanées sera différente. Vous avez compris, plus vos requêtes sont légères, plus vous pourrez en faire.
Conséquences
Cette protection permet de bloquer les sites mal développés ou utilisant beaucoup trop ses ressources allouées avant qu'ils pénalisent les autres sites légitimes.
Le but du développement est de réduire le nombre de connexion et leur temps de monopolisation, par page sur le serveur.
Que faut-il faire
- Fermer vos connexions SQL dans votre code PHP dès que vous ne vous en servez plus.
- Utiliser des INDEX dans vos tables
- Éviter les SELECT * lorsque que toutes les propriétés ne sont pas utilisées.
- Supprimer les modules inutiles de vos CMS
- et en dernier lieu : migrer sur l'offre d'hébergement Pro ou placer vos bases de données MySQL sur un serveur dédié.
Liste non exhaustive de clients MySQL
- HeidiSQL http://www.heidisql.com/ (gratuit et recommandé, pour Windows)
- Navicat for MySQL https://www.navicat.com/en/products/navicat-for-mysql
- SQLWave http://www.sqlwave.com/
- dbForge Studio http://www.devart.com/dbforge/mysql/studio/
- etc …