Mysql - Acesso negado para o usuário 'root'@'x.x.x.x' [duplicado]

12

Estou tentando conectar-me a um banco de dados mysql remoto da minha caixa local. Inicialmente nem consegui acertar o mysql db. Mas depois de comentar o binding_address no arquivo my.cnf e reiniciar o servidor mysql, agora posso atingi-lo.

Mas agora estou recebendo um erro de acesso negado

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)

Meu IP está na lista negra ou algo assim? Eu posso mudar isso desde que eu tenho permissão de administrador na caixa remota. Alguém me ajuda.

    
por bragboy 31.01.2011 / 23:51

6 respostas

7

Verifique novamente para garantir que o root tenha acesso de hosts / IPs diferentes do host local.

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

Se ele retornar apenas uma linha com "localhost", você precisa conceder permissões ao IP do qual está se conectando.

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

Substitua mydatabase pelo banco de dados ao qual você deseja acessar (ou coloque um caractere curinga) e substitua o IP pelo endereço ou sub-rede do qual o seu cliente está se conectando.

    
por 31.01.2011 / 23:55
19

A primeira ordem de negócios é entrar com permissões completas. Se você não puder, adicione esta linha ao seu my.cnf e reinicie o mysql:

skip-grant-tables

Eu recomendo fazer um pequeno reconhecimento para ver quais usuários você tem:

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

Isso exibirá sua lista de usuários, algo como:

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)

Você precisa ver o localhost na lista. Se você não fizer isso, adicione da seguinte forma:

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

Caso contrário, basta atualizar a senha da seguinte forma:

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

Em seguida, remova as tabelas skip-grant do seu my.cnf e reinicie o mysql.

    
por 01.02.2011 / 01:54
4

As senhas em mysql são configuradas por IP. Geralmente, eles são configurados apenas para acesso via localhost, especialmente para o usuário root. Verifique se há uma configuração de entrada root@% em sua tabela de permissões.

Se você realmente precisa permitir acesso remoto remoto, então por favor considere alterar o nome de usuário para que as pessoas não possam adivinhar facilmente sua conta de superusuário de servidores.

    
por 31.01.2011 / 23:55
1

Para sistemas como o Unix, a solução a seguir funcionou para eu redefinir a senha de root: link

Jist:

Recupere a senha do servidor de banco de dados MySQL seguindo as cinco etapas fáceis:

  1. Pare o processo do servidor MySQL.

  2. Inicie o processo servidor / daemon do MySQL (mysqld) com a opção --skip-grant-tables para que ele não solicite a senha.

  3. Conecte-se ao servidor mysql como usuário root.

  4. Configure a nova senha da conta root do mysql, isto é, redefina a senha do mysql.

  5. Saia e reinicie o servidor MySQL.

Comandos específicos: (faça o login como usuário root):

  1. Parar o serviço mysql

    # /etc/init.d/mysql stop
    

    Saída:

    Stopping MySQL database server: mysqld.
    
  2. Inicie o servidor MySQL sem senha:

    use o mysqld_safe:

    mysqld_safe --skip-grant-tables &
    

    Saída:

    [1] 5988
    Starting mysqld daemon with databases from /var/lib/mysql
    mysqld_safe[6025]: started
    
  3. Conecte-se ao servidor mysql usando o cliente mysql:

    # mysql -u root
    

    Saída:

    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. Configure a nova senha de usuário root do MySQL

    mysql> use mysql;
    mysql> update user set password=PASSWORD("NEW-ROOT-PASSWORD") where User='root';
    mysql> flush privileges;
    mysql> quit
    
  5. Pare o servidor MySQL:

    # /etc/init.d/mysql stop
    

    Saída:

    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. Inicie o servidor MySQL e teste-o:

    # /etc/init.d/mysql start
    # mysql -u root -p
    
por 10.09.2011 / 05:16
0

É possível que você precise conceder privilégios para esse IP, um exemplo seria:

mysql > GRANT ALL PRIVILEGES no dbname. * Para root @ '%'; mysql > PRIVILÉGIOS DE FLUSH;

doações para todos os IPs

    
por 31.01.2011 / 23:58
0

Infelizmente, as permissões mysql distinguem por host e ip. As permissões concedidas para um nome de host não funcionam para um IP e vice-versa.

Certifique-se de conceder permissões para o usuário e o nome do host / ip que você está conectando.

    
por 31.01.2011 / 23:59