Je suis conscient de cette commande:
GRANT ALL PRIVILEGES
ON database.*
TO 'user'@'yourremotehost'
IDENTIFIED BY 'newpassword';
Mais cela ne me permet que d'accorder une adresse IP particulière pour accéder à cette base de données MySQL distante. Que faire si je le souhaite afin que tout hôte distant puisse accéder à cette base de données MySQL? Comment je fais ça? En gros, je rends cette base de données publique afin que tout le monde puisse y accéder.
TO 'user'@'%'
% est un caractère générique - vous pouvez aussi faire '%.domain.com'
ou '%.123.123.123'
et des choses comme ça si vous en avez besoin.
Activer l'accès à distance (Grant) Accueil/Tutoriels/Mysql/Activer l'accès à distance (Grant) Si vous essayez de vous connecter à votre serveur mysql depuis une machine distante et que vous rencontrez une erreur comme ci-dessous, cet article est pour vous.
ERREUR 1130 (HY000): L’hôte ‘1.2.3.4’ n’est pas autorisé à se connecter à cette Serveur MySQL
Changer la configuration de mysql
Commencez par éditer le fichier de configuration mysql
vim /etc/mysql/my.cnf
Commentez les lignes suivantes.
#bind-address = 127.0.0.1
#skip-networking
Si vous ne trouvez pas de ligne de saut de réseau, ajoutez-la et commentez-la.
Redémarrez le serveur mysql.
~ /etc/init.d/mysql restart
Changer le privilège GRANT
Vous serez peut-être surpris de voir que même après la modification ci-dessus, vous n'obtenez pas d'accès à distance ni d'accès mais ne pouvez pas accéder à toutes les bases de données.
Par défaut, le nom d'utilisateur et le mot de passe mysql que vous utilisez sont autorisés à accéder à mysql-server localement. Donc besoin de mettre à jour le privilège.
Exécutez une commande comme ci-dessous pour accéder à partir de toutes les machines. (Remplacez USERNAME
et PASSWORD
par vos informations d'identification.)
mysql> GRANT ALL PRIVILEGES ON *.* TO 'USERNAME'@'%' IDENTIFIED BY 'PASSWORD' WITH GRANT OPTION;
Exécutez une commande comme ci-dessous pour donner accès à une adresse IP spécifique. (Remplacez USERNAME
et PASSWORD
par vos informations d'identification.)
mysql> GRANT ALL PRIVILEGES ON *.* TO 'USERNAME'@'1.2.3.4' IDENTIFIED BY 'PASSWORD' WITH GRANT OPTION;
Vous pouvez remplacer 1.2.3.4 par votre IP. Vous pouvez exécuter plusieurs fois la commande ci-dessus pour DONNER un accès à partir de plusieurs adresses IP.
Vous pouvez également spécifier une variable USERNAME
& PASSWORD
pour l’accès distant.
Vous pouvez vérifier le résultat final en:
SELECT * from information_schema.user_privileges where grantee like "'USERNAME'%";
Enfin, vous devrez peut-être aussi exécuter:
mysql> FLUSH PRIVILEGES;
Test de connexion
Depuis le terminal/ligne de commande:
mysql -h Host -u USERNAME -pPASSWORD
Si vous avez un shell mysql, n’oubliez pas d’exécuter des bases de données show; pour vérifier si vous avez les droits appropriés des machines distantes.
Bonus-Astuce: Révoquer l'accès
Si vous accordez accidentellement l'accès à un utilisateur, il vaut mieux avoir l'option de révocation à portée de main.
Ce qui suit annulera toutes les options pour USERNAME de toutes les machines:
mysql> REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'USERNAME'@'%';
Following will revoke all options for USERNAME from particular IP:
mysql> REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'USERNAME'@'1.2.3.4';
Its better to check information_schema.user_privileges table after running REVOKE command.
Si vous voyez le privilège USAGE après avoir exécuté la commande REVOKE, tout va bien. C'est presque comme pas de privilège du tout. Je ne sais pas si cela peut être révoqué.
En supposant que l'étape ci-dessus soit terminée et que le port MySql 3306 soit libre d'accès à distance; N'oubliez pas de lier l'adresse IP publique dans le fichier de configuration mysql.
Par exemple sur mon serveur Ubuntu:
#nano /etc/mysql/my.cnf
Dans le fichier, recherchez le bloc [mysqld] section et ajoutez la nouvelle adresse de liaison. Dans cet exemple, il s'agit de 192.168.0.116. Ça ressemblerait à quelque chose comme ça
......
.....
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address = 127.0.0.1
bind-address = 192.168.0.116
.....
......
vous pouvez supprimer la liaison localhost (127.0.0.1) si vous le souhaitez, mais vous devez ensuite donner une adresse IP spécifique pour accéder au serveur sur la machine locale.
Ensuite, la dernière étape consiste à redémarrer le serveur MySql (Sous Ubuntu)
stop mysql
start mysql
ou #/etc/init.d/mysql restart
pour d'autres systèmes
Maintenant, la base de données MySQL est accessible à distance par:
mysql -u username -h 192.168.0.116 -p
Pour tous ceux qui ont manqué à cela, voici comment j'ai pu accorder les privilèges, espérons que cela aidera quelqu'un
GRANT ALL ON yourdatabasename.* TO root@'%' IDENTIFIED BY
'yourRootPassword';
Comme indiqué, %
est un caractère générique qui permet à n’importe quelle adresse IP de se connecter à votre base de données. L'hypothèse que je fais ici est que lorsque vous vous connecterez, vous aurez un utilisateur nommé root
(qui est le nom par défaut cependant). Entrez le mot de passe root et vous êtes prêt à partir. Notez que je n'ai pas de guillemets simples ('
) autour de la racine de l'utilisateur.
Des modifications du fichier de configuration sont nécessaires pour activer les connexions via localhost.
Pour vous connecter via des IP distantes, connectez-vous en tant qu'utilisateur "root" et exécutez les requêtes ci-dessous dans mysql.
CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost' WITH GRANT OPTION;
CREATE USER 'username'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'username'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
Cela créera un nouvel utilisateur accessible sur localhost et à partir d'adresses IP distantes.
Commentez également la ligne ci-dessous de votre fichier my.cnf situé dans /etc/mysql/my.cnf
bind-address = 127.0.0.1
Redémarrez votre mysql en utilisant
Sudo service mysql restart
Vous devriez maintenant pouvoir vous connecter à distance à votre mysql.
Utilisez cette commande:
GRANT ALL ON yourdatabasename.* TO root@'%' IDENTIFIED BY 'yourRootPassword';
Ensuite:
FLUSH PRIVILEGES;
Puis commentez la ligne ci-dessous dans le fichier "/etc/mysql/mysql.conf.d/mysqld.cnf" (est obligatoire!):
bind-address = 127.0.0.1
Travaille pour moi!
Exécutez ce qui suit:
$ mysql -u root -p
mysql> GRANT ALL ON *.* to root@'ipaddress' IDENTIFIED BY 'mysql root password';
mysql> FLUSH PRIVILEGES;
mysql> exit
Puis essayez une connexion à partir de l'adresse IP que vous avez spécifiée:
mysql -h address-of-remove-server -u root -p
Vous devriez pouvoir vous connecter.
Vous pouvez résoudre le problème de MariaDB via cette commande :
GRANT ALL ON *.* to root@'%' IDENTIFIED BY 'mysql root password';
%
est un caractère générique. Dans ce cas, il fait référence à toutes les adresses IP.
GRANT ALL PRIVILEGES ON *.* TO 'user'@'ipadress'
Pour accéder à distance à la base de données Mysql Server 8:
CREATE USER 'root'@'%' IDENTIFIED BY 'Pswword@123';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
/etc/mysql/percona-server.cnf
[mysqld]
bind-address = 0.0.0.0
$ mysql -u root -p
mysql> GRANT ALL ON *.* to snippetbucketdotcom@'%' IDENTIFIED BY 'tejastank';
mysql> FLUSH PRIVILEGES;
mysql> exit
Si vous exécutez une instance EC2, n'oubliez pas d'ajouter les règles entrantes dans le groupe de sécurité avec MYSQL/Aurura.
Pour pouvoir vous connecter à votre utilisateur à partir de n'importe quelle adresse IP, procédez comme suit:
Autoriser le serveur mysql à accepter les connexions distantes. Pour ce fichier mysqld.conf ouvert:
Sudo gedit /etc/mysql/mysql.conf.d/mysqld.cnf
Recherchez la ligne commençant par "bind-address" et définissez sa valeur sur 0.0.0.0
bind-address = 0.0.0.0
et enfin enregistrer le fichier.
Maintenant, redémarrez le serveur mysql, soit avec systemd
, soit utilisez l'ancienne commande service
:
Sudo systemctl restart mysqld.service
Enfin, le serveur mysql est maintenant capable d’accepter les connexions distantes.
Nous devons maintenant créer un utilisateur et lui accorder une autorisation afin de pouvoir nous connecter à distance avec cet utilisateur.
Connectez-vous à la base de données MySQL en tant qu'utilisateur root ou à tout autre utilisateur disposant du privilège root.
mysql -u root -p
maintenant, créez l'utilisateur souhaité dans les caractères génériques localhost et '%' et accordez les autorisations sur toutes les bases de données en tant que telles.
CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'mypass';
CREATE USER 'myuser'@'%' IDENTIFIED BY 'mypass';
Ensuite,
GRANT ALL ON *.* TO 'myuser'@'localhost';
GRANT ALL ON *.* TO 'myuser'@'%';
Et enfin, n'oubliez pas de supprimer les privilèges
FLUSH PRIVILEGES;
J'espère que cela t'aides ;)
Ouvrez votre mysql console
et exécutez la commande suivante (entrez votre nom de base de données, nom d'utilisateur et mot de passe):
GRANT ALL sur votre nom de base de données. * TO admin @ '%' IDENTIFIED BY 'yourRootPassword';
Puis exécutez:
FLUSH PRIVILEGES;
Ouvrez la ligne de commande et ouvrez le fichier /etc/mysql/mysql.conf.d/mysqld.cnf
en utilisant n’importe quel éditeur avec root privileges
.
Par exemple:
Sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
Puis commentez la ligne ci-dessous:
bind-address = 127.0.0.1
Redémarrez mysql pour refléter les modifications à l'aide de la commande suivante:
Sudo service mysql restart
Prendre plaisir ;)
Il suffit de créer l'utilisateur dans une base de données comme
GRANT ALL PRIVILEGES ON <database_name>.* TO '<username>'@'%' IDENTIFIED BY '<password>'
Ensuite aller à
Sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
et changez la ligne bind-address = 127.0.0.1
en bind-address = 0.0.0.0
Après cela, vous pouvez vous connecter à cette base de données à partir de n’importe quelle adresse IP.
Vous devez changer le fichier de configuration mysql:
Commencez par éditer le fichier de configuration mysql
vim /etc/mysql/my.cnf
ajouter:
bind-address = 0.0.0.0
Par exemple dans mon CentOS
Sudo gedit /etc/mysql/my.cnf
commenter les lignes suivantes
# bind-address = 127.0.0.1
puis
Sudo service mysqld restart
ce qui a fonctionné pour Ubuntu est d’accorder tous les privilèges à l’utilisateur:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'yourpassword' WITH GRANT OPTION;
et en définissant l'adresse de liaison dans /etc/mysql/mysql.conf.d/mysqld.cnf
:
bind-address = 0.0.0.0
puis en redémarrant le démon mysql:
service mysql restart
Si vous souhaitez accorder un accès distant à votre base de données à partir de n'importe quelle adresse IP, exécutez la commande mysql, puis lancez la commande suivante.
GRANT ALL PRIVILEGES ON *.*
TO 'root'@'%'
IDENTIFIED BY 'password'
WITH GRANT OPTION;
Dans les panneaux de site Web comme cPanel, vous pouvez ajouter un seul %
(signe de pourcentage) dans les noms d’hôte autorisés à accéder à votre base de données MySQL.
En ajoutant un seul %
, vous pouvez accéder à votre base de données à partir de n’importe quel IP ou site web, même à partir d’applications de bureau.