L'une des erreurs courantes lors de l'utilisation de PHP pour les connexions de la base de données, en particulier lors de l'utilisation de mysqli_connect () ou de l'OPD pour se connecter aux bases de données est:
Host 'xxx.xxx.xxx.xxx' is not allowed to connect to this MySQL server
Ce message d'erreur signifie que le serveur de base de données rejette la demande de connexion de l'hôte client actuel, principalement parce que la configuration d'autorisation sur le serveur de base de données ne permet pas à l'adresse IP du client de se connecter.
Cet article expliquera en détail comment dépanner et résoudre ce problème.
Lorsqu'un serveur MySQL permet aux utilisateurs de se connecter, il vérifie non seulement le nom d'utilisateur et le mot de passe, mais vérifie également l'adresse de l'hôte à partir de laquelle la connexion provient. Autrement dit, même si le nom d'utilisateur et le mot de passe sont corrects, il sera refusé si l'hôte de connexion n'est pas autorisé.
Par défaut, MySQL permet uniquement les connexions locales (natif) et les connexions distantes nécessitent une configuration supplémentaire.
Dans quel nom d'hôte ou IP est passé lors de la connexion? Généralement écrit en code PHP comme ceci:
$mysqli = new mysqli('db.m66.net', 'user', 'password', 'database');
Assurez-vous que le nom d'hôte ici est le nom IP ou de domaine correct pour le serveur de base de données.
Pour résoudre le problème "hôte non autorisé à connecter", vous devez autoriser l'hôte client spécifié sur le serveur MySQL.
En supposant que votre nom d'utilisateur de base de données est DBUser , vous devez autoriser les connexions à partir de l'hôte distant IP 123.123.123.123 :
GRANT ALL PRIVILEGES ON database.* TO 'dbuser'@'123.123.123.123' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;
Si vous souhaitez autoriser toutes les connexions de l'hôte (non recommandées pour les environnements de production), vous pouvez utiliser le caractère% générique:
GRANT ALL PRIVILEGES ON database.* TO 'dbuser'@'%' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;
MySQL est lié à 127.0.0.1 par défaut, et seul l'accès natif est restreint.
Ouvrez le fichier de configuration MySQL (généralement /etc/mysql/my.cnf ou /etc/mysql/mysql.conf.d/mysqld.cnf ) et trouvez cette ligne:
bind-address = 127.0.0.1
Changez-le en:
bind-address = 0.0.0.0
Redémarrez ensuite le service MySQL:
sudo service mysql restart
Assurez-vous que le pare-feu du serveur permet un accès externe au port par défaut MySQL 3306.
Par exemple, utilisez UFW :
sudo ufw allow 3306/tcp
En supposant que l'adresse du serveur de base de données est db.m66.net , le code de connexion Exemple:
<?php
$host = 'db.m66.net';
$user = 'dbuser';
$password = 'password';
$dbname = 'database';
$mysqli = new mysqli($host, $user, $password, $dbname);
if ($mysqli->connect_error) {
die('Échec de la connexion: (' . $mysqli->connect_errno . ') ' . $mysqli->connect_error);
}
echo 'Connexion avec succès!';
$mysqli->close();
?>
Confirmez que le nom d'utilisateur et le mot de passe sont corrects.
Confirmez que les réseaux PHP et MySQL Server sont interopérables, et vous pouvez utiliser Ping ou Telnet DB.M66.net 3306 pour tester.
Vérifiez les autorisations d'utilisateur de la base de données pour vous assurer que l'utilisateur a la permission d'accéder à la base de données spécifiée.
Vérifiez le journal d'erreur MySQL pour plus de détails.