Habilitar conexão remota MySQL: ERRO 1045 (28000): acesso negado ao usuário

136

MySQL 5.1.31 em execução no Windows XP.

No servidor MySQL local (192.168.233.142), eu posso conectar como root da seguinte maneira:

>mysql --host=192.168.233.142 --user=root --password=redacted

De uma máquina remota (192.168.233.163), posso ver que a porta mysql está aberta:

# telnet 192.168.233.142 3306
Trying 192.168.233.142...
Connected to 192.168.233.142 (192.168.233.142).

Mas ao tentar conectar ao mysql da máquina remota , recebo:

# mysql --host=192.168.233.142 --user=root --password=redacted
ERROR 1045 (28000): Access denied for user 'root'@'192.168.233.163' (using password: YES)

Eu tenho apenas 2 entradas no mysql.user:

Host         User     Password
--------------------------------------
localhost    root     *blahblahblah
%            root     [same as above]

O que mais preciso fazer para ativar o acesso remoto?

EDITAR

Conforme sugerido por Paulo abaixo, tentei substituir a entrada mysql.user por% por uma entrada específica de IP, então minha tabela de usuários agora fica assim:

Host             User     Password
------------------------------------------
localhost        root     *blahblahblah
192.168.233.163  root     [same as above]

Reiniciei a máquina, mas o problema persiste.

Mike Chamberlain
fonte

Respostas:

211

Você deve colocar isso como root:

GRANT ALL PRIVILEGES ON *.* TO 'USERNAME'@'IP' IDENTIFIED BY 'PASSWORD' with grant option;

;

onde IP é o IP que você deseja permitir acesso, USERNAME é o usuário que você usa para se conectar e PASSWORD é a senha relevante.

Se você deseja permitir o acesso de qualquer IP, basta colocar em %vez do seu IP

e então você só precisa colocar

FLUSH PRIVILEGES;

Ou reinicie o servidor mysql e é isso.

Octavio
fonte
Existe alguma maneira de fazer isso sem um cliente mysql local?
cmcginty
como remover privilégios de um ip específico?
Umair Ayub
4
stackoverflow.com/a/21151255/470749 também me ajudou, porque acho que minha configuração de endereço de ligação precisava ser comentada. A concessão de privilégios remotos não foi suficiente para fazê-lo funcionar.
Ryan
8
Não explicado na resposta, mas substitua PASSWORDpela senha da conta. Eu tentei apenas a alteração acima USERNAMEe IPnão funcionou para mim até que eu mudei PASSWORD.
Richard Parnaby-King
Após fazer isso, siga o que é dito na resposta seguinte também: stackoverflow.com/a/21151255/445438
budhajeewa
85

Eu estava recebendo o mesmo erro depois de conceder acesso remoto até fazer isso:

De /etc/mysql/my.cnf

Nas versões mais recentes do mysql, a localização do arquivo é /etc/mysql/mysql.conf.d/mysqld.cnf

# 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

(comente esta linha bind-address = 127.0.0.1:)

Então corra service mysql restart.

rachaduras
fonte
6
Ou altere-o para bind-address = 0.0.0.0
lolski 17/10
2
Apenas comentar bind-addressnão funcionou para mim. De qualquer bind-address = 0.0.0.0ou bind-address = <server_ip>obras.
Chhantyal
58

Por padrão, no servidor MySQL, o acesso remoto está desabilitado. O processo para fornecer um acesso remoto ao usuário é.

  1. Vá para a minha pasta sql bin ou adicione-a ao PATH
  2. Faça login no root mysql -uroot -proot(ou seja qual for a senha root).
  3. Com sucesso, você terá mysql>
  4. Forneça acesso conceder tudo para esse usuário.

GRANT ALL PRIVILEGES ON *.* TO 'username'@'IP' IDENTIFIED BY 'password';

Aqui, IP é o endereço IP para o qual você deseja permitir acesso remoto, se colocarmos %qualquer endereço IP que possa ser acessado remotamente.

Exemplo:

C:\Users\UserName> cd C:\Program Files (x86)\MySQL\MySQL Server 5.0\bin

C:\Program Files (x86)\MySQL\MySQL Server 5.0\bin>mysql -uroot -proot

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

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.25 sec)

Isto para um outro usuário.

mysql> GRANT ALL PRIVILEGES ON *.* TO 'testUser'@'%' IDENTIFIED BY 'testUser';
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

Espero que isso ajude

Ravi Kant
fonte
+1 para detalhes excelentes, realmente me ajudou a ver que 0 rows affectedé a norma :) Além disso, service mysqld restarté recomendado no final. [ mysqldÀs vezes é apenas mysql]
Nathan Dortman
#Nota: para a versão 5.6+, use "conceder tudo em ..." (sem os privilégios) #
Nicke Manarin
21

A ajuda de Paulo me levou à solução. Foi uma combinação do seguinte:

  • a senha continha um cifrão
  • Eu estava tentando conectar a partir de um shell Linux

O shell bash trata o cifrão como um caractere especial para expansão para uma variável de ambiente; portanto, precisamos escapar com uma barra invertida. Aliás, não precisamos fazer isso no caso em que o cifrão é o caractere final da senha.

Como exemplo, se sua senha for "pas $ word", no Linux bash, devemos conectar da seguinte forma:

# mysql --host=192.168.233.142 --user=root --password=pas\$word
Mike Chamberlain
fonte
4
Além do exposto acima, verifique /etc/mysql/my.cnf e comente o endereço bind = 127.0.0.1
Buminda
2
Alternativamente pode-se usar aspas simples para evitar a expansão dos US $: mysql --host=192.168.233.142 --user=root --password='pas$word' stackoverflow.com/a/6697781/500942
jalanb
'$' na senha. Impagável. Muito obrigado !!
Nagendra Kakarla
depois de bater minha cabeça no monitor por um tempo, me deparei com isso e funcionou. Eu tive um ! e @ na minha senha. Senha alterada, privilégios liberados e estou de volta a ela. Obrigado!
AJM 02/03
9

Você tem um firewall ? verifique se a porta 3306 está aberta.

No Windows, por padrão, é criada uma conta root mysql que tem permissão para ter acesso apenas a partir do host local, a menos que você tenha selecionado a opção para ativar o acesso a partir de máquinas remotas durante a instalação.

criando ou atualize o usuário desejado com '%' como nome do host.

exemplo:

CREATE USER 'krish'@'%' IDENTIFIED BY 'password';
Vamsi Krishna B
fonte
6
O servidor respondeu com "ERRO 1045 (28000): acesso negado para" ... se um bloco de firewall receber um tempo limite ...
Paulo H.
só queria postar primeiro. meu mal
Vamsi Krishna B
@Krish - Tudo o que você sugeriu já está coberto na questão
Mike Chamberlain
5
  1. Tente flush privilegesnovamente.

  2. Tente reiniciar o servidor para recarregar as concessões.

  3. Tente criar um usuário com o host "192.168.233.163". "%" parece não permitir tudo (é estranho)

Paulo H.
fonte
Obrigado, tentei isso, mas sem sucesso. Atualizei a pergunta com suas sugestões.
Mike Chamberlain
4
Tente criar outro usuário e não esqueça de definir todas as concessões:CREATE USER 'monty'@'%' IDENTIFIED BY 'some_pass'; GRANT ALL PRIVILEGES ON *.* TO 'monty'@'%' WITH GRANT OPTION;
Paulo H.
4

No meu caso, eu estava tentando conectar-se a um servidor mysql remoto no cent OS. Depois de passar por muitas soluções (concessão de todos os privilégios, remoção de ligações IP, ativação de rede), o problema ainda não estava sendo resolvido.

Como se viu, enquanto olhava para várias soluções, me deparei com iptables, o que me fez perceber que a porta 3306 do mysql não estava aceitando conexões.

Aqui está uma pequena nota sobre como eu verifiquei e resolvi esse problema.

  • Verificando se a porta está aceitando conexões:

    telnet (ip do servidor mysql) [portNo]

  • Adicionando regra de tabela ip para permitir conexões na porta:

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

  • Não o recomendaria para o ambiente de produção, mas se suas tabelas de ip não estiverem configuradas corretamente, a adição de regras ainda poderá não resolver o problema. Nesse caso, deve ser feito o seguinte:

    serviço iptables parar

Espero que isto ajude.

Kushal
fonte
3

se você estiver usando ip dinâmico, conceda acesso a 192.168.2.%; agora, você não precisa se preocupar em conceder acesso ao seu endereço IP sempre.

Nitin Jaiman
fonte
1

Eu estava lutando com o login remoto no MYSQL para minha instância do Amazon EC2 Linux. A solução encontrada foi garantir que meu grupo de segurança incluísse uma regra de entrada para a porta 3306 do MySQL para incluir meu endereço IP (ou 0.0.0.0/0 para qualquer lugar). Imediatamente poderia conectar-se remotamente assim que adicionei esta regra.

Brendan Moore
fonte
1

O novo local para o arquivo de configuração do mysql é

/etc/mysql/mysql.conf.d/mysqld.cnf
stackMonk
fonte
0

O driver ODBC 3.51 do MySQL é que caracteres especiais na senha não são tratados.

"Aviso - Você pode ter uma forte dor de cabeça com o MySQL ODBC 3.51 se a senha do seu comando GRANT contiver caracteres especiais, como! @ # $% ^?. O Driver ODBC do MySQL ODBC 3.51 não suporta esses caracteres especiais na caixa de senha. A única mensagem de erro que você receberá é "Acesso negado" (usando a senha: SIM) "- de http://www.plaintutorials.com/install-and-create-mysql-odbc-connector-on-windows-7/

PiperKeith
fonte
0

A combinação usuário / host pode ter sido criada sem senha.

Eu estava assumindo que, ao adicionar um novo host para um usuário existente (usando um aplicativo GUI), a senha existente também seria usada para a nova combinação usuário / host.

Eu poderia entrar com

mysql -u username -p PASSWORD

localmente, mas não do IPADDRESS com

mysql -u --host=HOST -p PASSWORD

(Na verdade, eu poderia fazer login no IPADDRESS sem usar uma senha)

mysql -u --host=HOST

Definindo a senha de acesso permitido:

set password for '<USER>'@'<IPADDRESS>' = '<PASSWORD>';
andkrup
fonte
1
Obrigado, passei muito tempo tentando me conectar remotamente ao meu servidor Mysql e essa linha ajudou muito. Ao definir a senha do usuário, recebi o erro ERROR 1372 (HY000): Password hash should be a 41-digit hexadecimal numberque me levou a este artigo: knowmysql.blogspot.com/2013/09/… Depois de seguir essas etapas, finalmente consegui me conectar ao servidor.
Andy Forceno