ti-enxame.com

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

MySQL 5.1.31 em execução no Windows XP.

Do servidor MySQL local (192.168.233.142) eu posso conectar como root da seguinte forma:

>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 se 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 habilitar o acesso remoto?

EDIT

Como sugerido por Paulo abaixo, eu tentei substituir a entrada mysql.user por% com uma entrada específica de IP, então minha tabela de usuário agora se parece com isto:

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

Eu reiniciei a máquina, mas o problema persistiu.

122
Mike Chamberlain

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

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

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

Por exemplo, se a sua senha for "pas $ Word", no bash do Linux devemos nos conectar da seguinte maneira:

# mysql --Host=192.168.233.142 --user=root --password=pas\$Word
20
Mike Chamberlain

Você tem que 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, USERNAME é o usuário que você usa para se conectar e PASSWORD é a senha relevante.

Se você quiser permitir o acesso de qualquer IP basta colocar % em vez de seu IP

e então você só tem que colocar

FLUSH PRIVILEGES;

Ou reinicie o servidor mysql e é isso.

197
Octavio

Eu estava recebendo o mesmo erro após conceder acesso remoto até que eu fizesse 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

(comentar esta linha: bind-address = 127.0.0.1)

Em seguida, execute service mysql restart.

83
chaps

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 pasta sql bin ou adicione-a a PATH
  2. Faça login na raiz por mysql -uroot -proot (ou qualquer que seja a senha root).
  3. No sucesso você receberá mysql>
  4. Forneça acesso de concessão a todos 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 o acesso remoto, se colocarmos % qualquer endereço IP pode acessar 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)

Isso para 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

55
Ravi Kant

Você tem um firewall ? Certifique-se de que a porta 3306 esteja aberta.

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

criar ou atualizar o usuário desejado com '%' como hostname.

exemplo:

CREATE USER 'krish'@'%' IDENTIFIED BY 'password';
8
Vamsi Krishna B

No meu caso, eu estava tentando se conectar a um servidor mysql remoto no sistema operacional central. Depois de passar por um monte de soluções (concessão de todos os privilégios, removendo as ligações de ip, permitindo a rede) o problema ainda não estava sendo resolvido.

Como se viu, ao olhar para várias soluções, me deparei com o 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 (servidor do mysql ip) [portNo]

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

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

  • Não recomendaria isso para o ambiente de produção, mas se seus iptables não estiverem configurados corretamente, a adição das regras talvez ainda não resolva o problema. Nesse caso, o seguinte deve ser feito:

    serviço iptables parar

Espero que isto ajude.

4
Kushal
  1. Tente flush privileges novamente.

  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)

4
Paulo H.

se você estiver usando ip dinâmico apenas conceda acesso a 192.168.2.% então agora você não precisa se preocupar em conceder acesso ao seu endereço IP todas as vezes.

2
Nitin Jaiman

Nova localização para o arquivo de configuração do mysql é

/etc/mysql/mysql.conf.d/mysqld.cnf
2
stackMonk

Eu estava lutando com login remoto para MYSQL para a 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 se conectar remotamente assim que eu adicionasse essa regra.

1
Brendan Moore

A combinação de 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 de usuário/host.

Eu poderia entrar com

mysql -u username -p PASSWORD

localmente, mas não de IPADDRESS com

mysql -u --Host=HOST -p PASSWORD

(Eu poderia realmente fazer o login de IPADDRESS sem usar uma senha)

mysql -u --Host=HOST

Configurando a senha permitida:

set password for '<USER>'@'<IPADDRESS>' = '<PASSWORD>';
0
andkrup

MySQL ODBC 3.51 Driver é que caracteres especiais na senha não são manipulados.

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

0
PiperKeith