Comment accorder des autorisations d'accès à distance au serveur mysql pour l'utilisateur?

118

Si je fais SHOW GRANTSdans ma base de données mysql, j'obtiens

GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' 
    IDENTIFIED BY PASSWORD 'some_characters' 
    WITH GRANT OPTION

Si je ne me trompe pas, cela root@localhostsignifie que l'utilisateur rootne peut accéder au serveur qu'à partir de localhost. Comment dire à MySQL d'accorder également rootl'autorisation d'accéder à ce serveur mysql depuis toutes les autres machines (dans le même réseau)?

Aufwind
la source
6
Un simple changement localhosten %accordera un accès root au réseau public. N'oubliez pas deflush privileges;
6
L'ajout de root @% vous expose à beaucoup de risques et ne devrait pas être fait. Je sais que c'est un ancien message, mais cet avertissement devrait être ici. Le compte root est le premier compte ciblé par les attaquants, et root @ '%' signifie que l'utilisateur root peut se connecter à votre compte MySQL depuis n'importe où. Il y a trop de choses à couvrir dans les commentaires, mais vous devriez essayer de supprimer autant d'utilisateurs @ '%' que possible, et tous ceux qui y sont déclarés devraient avoir des privilèges très limités. Quoi qu'il en soit, vous ne devez absolument pas ajouter root @ '%', et vos applications ne doivent pas non plus s'attendre à ce que ce compte soit présent.
Damon le
Voir aussi Activer la connexion MySQL distante
utilisateur
Salut les gens, devrait supprimer la chaîne PASSWORD de cette commande ... cela provoque une erreur ... il suffit de terminer avec IDENTIFIED BY, puis le mot de passe lui-même.
Mário de Sá Vera

Réponses:

143

Cela accorde un accès root avec le même mot de passe depuis n'importe quelle machine dans *.example.com:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%.example.com' 
    IDENTIFIED BY 'some_characters' 
    WITH GRANT OPTION;
FLUSH PRIVILEGES;

Si la résolution de noms ne fonctionne pas, vous pouvez également accorder l'accès par IP ou sous-réseau:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.1.%'
    IDENTIFIED BY 'some_characters'  
    WITH GRANT OPTION;
FLUSH PRIVILEGES;

Documentation sur la GRANTsyntaxe MySQL .

Michael Berkowski
la source
15
Je suppose ...TO 'root'@'%' IDENTIFIED...que vous accorderiez l'accès de partout?
Aufwind le
3
J'ai exécuté la commande dans mysql, mais SHOW GRANTSmontre toujours la même chose (comme dans ma question). Je l'ai même fait FLUSH PRIVILGES. Y a-t-il quelque chose qui me manque?
Aufwind le
@Aufwind Je ne vous demanderais pas d'avoir besoin de quoi que ce soit d'autre FLUSH PRIVILEGES. Déconnectez-vous et reconnectez-vous, redémarrez le service mysqld si vous y avez accès. Assurez-vous également que la skip networkingligne n'est pas activée dans votre my.cnfbien que cela ne rendrait pas compte du fait que vous SHOW GRANTSn'êtes toujours pas le même.
Michael Berkowski le
@Aufwind À défaut, vous devrez peut-être demander à ServerFault.com à la place.
Michael Berkowski le
10
Notez qu'il IDENTIFIED BY PASSWORDest accompagné d'un nombre hexadécimal haché à 41 chiffres. À utiliser IDENTIFIED BY 'password'si vous souhaitez inclure directement le mot de passe.
Rainulf
94

Essayer:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'Pa55w0rd' WITH GRANT OPTION;
moshe beeri
la source
1
umm ce qui Pa55w0rdsemble stupide, ne me dites pas que c'est le mot de passe que vous voulez créer. Pour tous ceux qui essaient de se connecter à votre mysql?
SSpoke
23
Il est juste couramment utilisé pour donner un espace réservé au mot de passe, en disant "mettez votre bon mot de passe de lecture à cet endroit".
moshe beeri
2
Cette commande avec l'avertissement habituel que vous ne souhaitez l'utiliser que pour les applications où la sécurité n'est pas un problème, par exemple dev ou QA.
einnocent
si cela ne fonctionne pas sur mac, essayez de changer 'root' @ '%' avec 'root' @ 'localhost' ou / etc / hosts nom de l'ordinateur auquel vous accordez des privilèges.
moshe beeri
2
N'oubliez pas d'exécuter ceci après:FLUSH PRIVILEGES;
dane
44

Vous devez prendre quelques mesures pour vous assurer que le premier mysql, puis l'utilisateur root sont accessibles de l'extérieur:

  1. Désactiver skip-networkingdans my.cnf(ex: /etc/mysql/my.cnf)

  2. Vérifiez la valeur de bind-addressin my.cnf, si elle est définie sur 127.0.0.1, vous pouvez la modifier 0.0.0.0pour autoriser l'accès à partir de toutes les adresses IP ou de l'adresse IP à partir de laquelle vous souhaitez vous connecter.

  3. Accordez l'accès à distance à l'utilisateur root à partir de n'importe quelle adresse IP (ou spécifiez votre adresse IP au lieu de %)

    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'
        IDENTIFIED BY 'your_root_password'
        WITH GRANT OPTION;
    FLUSH PRIVILEGES;`
  4. Redémarrez le service mysql:

    sudo service mysql restart
Khashayar
la source
Vous devez également ouvrir le port mysql 3306 à partir du pare-feu, sinon les clients distants ne se connecteront pas
David Okwii
Juste un petit avis sur le point 2 de @Khashayar: 0.0.0.0 signifie n'importe quelle adresse IPv4. * signifie TOUTE adresse, que ce soit IPv4 ou IPv6.
Gustavo Pinsard
34
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' 
    IDENTIFIED BY 'YOUR_PASS' 
    WITH GRANT OPTION;
FLUSH PRIVILEGES;  

*.* = DB.TABLE vous pouvez restreindre l'utilisateur à une base de données et à une table spécifiques.

'root'@'%'vous pouvez changer de racine avec n'importe quel utilisateur que vous avez créé et% est d'autoriser toutes les adresses IP. Vous pouvez également le restreindre en modifiant% .168.1.1 etc.


Si cela ne résout pas, modifiez également my.cnf ou my.ini et commentez ces lignes

bind-address = 127.0.0.1à #bind-address = 127.0.0.1
et
skip-networkingà#skip-networking

  • Redémarrez MySQL et répétez à nouveau les étapes ci-dessus.

Raspberry Pi, j'ai trouvé la configuration de l'adresse de liaison sous \etc\mysql\mariadb.conf.d\50-server.cnf

Wasim A.
la source
2
Seule réponse qui explique la partie *.*et 'user'@'address'. Merci! :)
Philipp
Accorder TOUT sur . invite les pirates informatiques.
Rick James
c'est pourquoi j'ai expliqué *. *
Wasim A.
8

Ces subventions SQL que les autres partagent fonctionnent. Si vous ne parvenez toujours pas à accéder à la base de données, il est possible que vous ayez simplement une restriction de pare-feu pour le port. Cela dépend de votre type de serveur (et de tous les routeurs intermédiaires) quant à la façon d'ouvrir la connexion. Ouvrez le port TCP 3306 entrant et donnez-lui une règle d'accès similaire pour les machines externes (tout / sous-réseau / IP unique / etc.).

utilisateur171212
la source
4

Ouvrez le /etc/mysql/mysql.conf.d/mysqld.cnffichier et commentez la ligne suivante:

#bind-address = 127.0.0.1
Vik2696
la source
Travailler sur Ubuntu 19.4
Ngô Văn Thao
3

Dans mon cas, j'essayais de me connecter à un serveur mysql distant sur cent OS. Après avoir parcouru de nombreuses solutions (octroi de tous les privilèges, suppression des liaisons IP, activation de la mise en réseau), le problème n'était toujours pas résolu.

Il s'est avéré qu'en cherchant diverses solutions, je suis tombé sur iptables, ce qui m'a fait réaliser que le port mysql 3306 n'acceptait pas les connexions.

Voici une petite note sur la façon dont j'ai vérifié et résolu ce problème.

  • Vérification si le port accepte les connexions:
telnet (IP du serveur mysql) [portNo]

-Ajout d'une règle de table ip pour permettre les connexions sur le port:

iptables -A INPUT -i eth0 -p tcp -m tcp --dport 3306 -j ACCEPTER

-Ne le recommanderais pas pour l'environnement de production, mais si vos iptables ne sont pas configurés correctement, l'ajout des règles pourrait ne pas toujours résoudre le problème. Dans ce cas, ce qui suit doit être fait:

arrêt du service iptables

J'espère que cela t'aides.

Kushal
la source
3

Deux étapes:

  1. configurer l'utilisateur avec un caractère générique:
    create user 'root'@'%' identified by 'some_characters'; GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY PASSWORD 'some_characters' WITH GRANT OPTION

  2. vim /etc/my.cnf
    ajoutez ce qui suit:
    bind-address=0.0.0.0

redémarrez le serveur, vous ne devriez avoir aucun problème pour vous y connecter.

studio1057
la source
Ensuite, obtenez "ERREUR 1827 (HY000): Le hachage du mot de passe n'a pas le format attendu. Vérifiez si l'algorithme de mot de passe correct est utilisé avec la fonction PASSWORD ()." Pouvez-vous expliquer ce que je me trompe ici?
lampShadesDrifter
2

Avec mysql 8 et version ultérieure, vous ne pouvez pas ajouter un utilisateur en accordant des privilèges. cela signifie avec cette requête:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' 
    IDENTIFIED BY 'type-root-password-here' 
    WITH GRANT OPTION;
FLUSH PRIVILEGES;

mysql renverra cette erreur:

ERREUR 1064 (42000): vous avez une erreur dans votre syntaxe SQL; vérifiez le manuel qui correspond à votre version de serveur MySQL pour la bonne syntaxe à utiliser près de 'IDENTIFIED BY' write password 'à la ligne 1

cela signifie que vous n'avez pas d'utilisateur root pour% domain. vous devez donc d'abord insérer l'utilisateur, puis accorder des privilèges comme celui-ci:

mysql> CREATE USER 'root'@'%' IDENTIFIED BY 'your password';
Query OK, 0 rows affected (0.11 sec)

mysql> GRANT ALL ON *.* TO 'root'@'%';
Query OK, 0 rows affected (0.15 sec)

mysql> FLUSH PRIVILEGES;

N'oubliez pas de remplacer les mots de passe par vos mots de passe spécifiques.

MhDG7
la source
0

Cela a fonctionné pour moi. Mais il y avait un problème étrange que même moi j'essayais d'abord ceux qu'il n'affectait pas. J'ai mis à jour la page phpmyadmin et je l'ai fait fonctionner.

Si vous avez besoin d'accéder à local-xampp-mysql. Vous pouvez aller à xampp-shell -> ouvrir l'invite de commande.

Puis mysql -uroot -p --port = 3306 ou mysql -uroot -p (s'il y a un mot de passe défini). Après cela, vous pouvez accorder ces accès à partir de la page du shell mysql (peut également fonctionner à partir de localhost / phpmyadmin).

Il suffit de les ajouter si quelqu'un trouve ce sujet et a des problèmes pour les débutants.

icemanzzz
la source
0

Ubuntu 18.04

Installez et assurez-vous que mysqld est en cours d'exécution.

Allez dans la base de données et configurez l'utilisateur root:

sudo mysql -u root
SELECT User,Host FROM mysql.user;
DROP USER 'root'@'localhost';
CREATE USER 'root'@'%' IDENTIFIED BY 'obamathelongleggedmacdaddy';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
exit;

Modifiez les autorisations mysqld et redémarrez:

sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf

# edit the line to be this:
bind-address=0.0.0.0

sudo systemctl stop mysql
sudo systemctl start mysql

Depuis une autre machine, testez .. Le port Obvs (3306) sur la machine mysqld doit autoriser la connexion depuis la machine de test.

mysql -u root -p -h 123.456.789.666

Toute la "sécurité" supplémentaire de MySql n'aide pas du tout la sécurité, cela complique et obscurcit simplement, il est maintenant plus facile de tout gâcher que dans l'ancien temps, où vous utilisiez juste un mot de passe très long.

Peter Prographo
la source