web-dev-qa-db-fra.com

Mysql - Accès refusé pour l'utilisateur 'root'@'x.x.x.x'

J'essaie de me connecter à une base de données mysql distante à partir de ma boîte locale. Initialement, je n'ai même pas pu toucher la base de données mysql. Mais après avoir commenté la binding_address dans le fichier my.cnf et redémarré le serveur mysql, je suis maintenant en mesure de le frapper.

Mais maintenant, je reçois une erreur d'accès refusé

mysql -u root -h x.x.x.x -p
Enter password:
ERROR 1045 (28000): Access denied for user 'root'@'x.x.x.x' (using password: YES)

Mon IP est-elle sur liste noire ou quelque chose? Je peux changer cela car j'ai l'autorisation d'administrateur sur la boîte distante. Quelqu'un m'aide.

13
bragboy

Revérifiez pour vous assurer que root a accès à partir d'hôtes/IP autres que localhost.

mysql> use mysql;
mysql> SELECT Host FROM user WHERE user = 'root';

S'il renvoie une seule ligne avec "localhost", vous devez accorder des autorisations à l'adresse IP à partir de laquelle vous vous connectez.

mysql> GRANT SELECT, INSERT ON mydatabase. * TO 'root'@'10.0.0.1';

Remplacez ma base de données par la base de données à laquelle vous souhaitez accéder (ou mettez un caractère générique), puis remplacez l'IP par l'adresse ou le sous-réseau à partir duquel votre client se connecte.

8
Serge Stepanov

Le premier ordre du jour est d'entrer avec des autorisations complètes. Si vous ne pouvez pas, ajoutez cette ligne à votre my.cnf et redémarrez mysql:

skip-grant-tables

Je recommande de faire une petite reconnaissance pour voir quels utilisateurs vous avez:

SELECT user,Host,password FROM mysql.user WHERE user = 'root' ORDER BY Host ASC;

Cela affichera votre liste d'utilisateurs, quelque chose comme:

mysql> SELECT user,Host,password FROM mysql.user WHERE user = 'root' ORDER BY Host ASC;
+------+------------+-------------------------------------------+
| user | Host       | password                                  |
+------+------------+-------------------------------------------+
| root | 127.0.0.1  |                                           |
| root | ::1        |                                           |
| root | localhost  | *E0AD777475E6713F9B04317EE38888D61042DAC1 |
| root | randym-mbp |                                           |
+------+------------+-------------------------------------------+
4 rows in set (0.01 sec)

Vous devez voir localhost dans la liste. Sinon, ajoutez-le comme ceci:

GRANT ALL PRIVILEGES ON *.* TO root@'localhost' IDENTIFIED BY 'your_password' WITH GRANT OPTION;

Sinon, mettez simplement à jour le mot de passe comme ceci:

SET PASSWORD FOR root@'localhost' = PASSWORD('your_password');
FLUSH PRIVILEGES;

Ensuite, supprimez skip-grant-tables de votre my.cnf et redémarrez mysql.

22
randomx

Les mots de passe dans mysql sont configurés par IP. Habituellement, ils ne sont définis que pour l'accès via localhost, en particulier pour l'utilisateur root. Vérifiez qu'il existe un root@% configuration de l'entrée dans votre table d'autorisations.

Si vous devez vraiment autoriser l'accès root à distance, alors s'il vous plaît envisagez de changer le nom d'utilisateur afin que les gens ne puissent pas facilement deviner le compte superutilisateur de vos serveurs.

4
Matthew Scharley

Pour les systèmes de type Unix, la solution suivante a fonctionné pour moi pour réinitialiser le mot de passe root: http://www.cyberciti.biz/tips/recover-mysql-root-password.html

Jist:

Récupérez le mot de passe du serveur de base de données MySQL en cinq étapes simples:

  1. Arrêtez le processus du serveur MySQL.

  2. Démarrez le processus serveur/démon MySQL (mysqld) avec l'option --skip-grant-tables afin qu'il ne demande pas de mot de passe.

  3. Connectez-vous au serveur mysql en tant qu'utilisateur root.

  4. Configurez le nouveau mot de passe du compte root mysql, c'est-à-dire réinitialiser le mot de passe mysql.

  5. Quittez et redémarrez le serveur MySQL.

Commandes spécifiques: (connexion en tant qu'utilisateur root):

  1. Arrêtez le service mysql

    # /etc/init.d/mysql stop
    

    Production:

    Stopping MySQL database server: mysqld.
    
  2. Démarrer sur le serveur MySQL sans mot de passe:

    utilisez mysqld_safe:

    mysqld_safe --skip-grant-tables &
    

    Production:

    [1] 5988
    Starting mysqld daemon with databases from /var/lib/mysql
    mysqld_safe[6025]: started
    
  3. Connectez-vous au serveur mysql en utilisant le client mysql:

    # mysql -u root
    

    Production:

    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 1 to server version: 4.1.15-Debian_1-log
    Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
    mysql>
    
  4. Configurer le nouveau mot de passe de l'utilisateur root MySQL

    mysql> use mysql;
    mysql> update user set password=PASSWORD("NEW-ROOT-PASSWORD") where User='root';
    mysql> flush privileges;
    mysql> quit
    
  5. Arrêtez le serveur MySQL:

    # /etc/init.d/mysql stop
    

    Production:

    Stopping MySQL database server: mysqld
    STOPPING server from pid file /var/run/mysqld/mysqld.pid
    mysqld_safe[6186]: ended
    [1]+  Done                    mysqld_safe --skip-grant-tables
    
  6. Démarrez le serveur MySQL et testez-le:

    # /etc/init.d/mysql start
    # mysql -u root -p
    
1
c33s

Il est possible que vous ayez besoin d'accorder des privilèges pour cette adresse IP, par exemple:

mysql> ACCORDER TOUS LES PRIVILÈGES sur dbname. * à root @ '%'; mysql> FLUSH PRIVILEGES;

subventions à tous les IP

0
hitmanDX

Malheureusement, les autorisations mysql se distinguent par l'hôte et l'ip. Les autorisations accordées pour un nom d'hôte ne fonctionnent pas pour une IP et vice versa.

Assurez-vous d'accorder des autorisations pour l'utilisateur et le nom d'hôte IP/hôte à partir desquels vous vous connectez.

0
Spliffster