Comportamento estranho com o redirecionamento de porta mysql

2

Eu configurei o encaminhamento de porta do MySQL na minha máquina como:

ssh -f -N -L :9906:localhost:3306 <ssh login>

Agora, se eu tentar conectar ao MySQL do meu localhost como:

mysql -u<user> -p<password> -P9906 -h127.0.0.1 <schema> 

Funciona bem. Mas, se eu tirar o parâmetro - h no meu local, ou seja, se eu me conectar ao MySQL como abaixo do localhost:

mysql -u<user> -p<password> -P9906 <schema> 

Eu recebo o seguinte erro:

ERROR 1045 (28000): Access denied for user ''@'localhost' (using password: YES)

Por que esse comportamento?

Eu tentei configurar o encaminhamento de porta tanto para o host local quanto para o 127.0.0.1, mas o erro ainda permanece.

Além disso, no servidor, concedemos privilégios ao usuário tanto para o host local quanto para o 127.0.0.1.

    
por foo 05.12.2012 / 14:54

2 respostas

4

Existem quatro (4) CENÁRIOS para prestar atenção em

CENÁRIO # 1

Quando você especifica -P<port number> , você deve estar usando TCP / IP. Assim, -h<IPAddress> funcionaria.

CENÁRIO # 2

Quando você especifica -P<port number> sem -h<IPAddress> , localhost é assumido. Com isso acontecendo, o TCP / IP não é usado, mas o arquivo de soquete mysql é usado para autenticar.

CENÁRIO # 3

Quando você especifica -h127.0.0.1 sem -P<port number> , localhost é assumido. Com isso acontecendo, o TCP / IP não é usado, mas o arquivo de soquete mysql é usado para autenticar.

CENÁRIO # 4

Quando você especifica -h127.0.0.1 com -P<port number> , localhost não é assumido. O TCP / IP será usado, mas o usuário deve ser definido corretamente.

Dada a mensagem de erro:

ERROR 1045 (28000): Access denied for user ''@'localhost' (using password: YES)

e como você tentou fazer o login

mysql -u -p -P9906 -h127.0.0.1

Você atingiu o CENÁRIO # 4

SUGESTÃO

Em mysql.user , verifique se você tem

com a mesma senha (ou senhas diferentes, se desejado)

Quando você conseguir fazer login com sucesso, execute esta consulta

SELECT USER(),CURRENT_USER();

USER () relata como você tentou autenticar no MySQL

CURRENT_USER () informa como você pode autenticar no MySQL

Adicionar o usuário certo permite autenticar corretamente. Sua meta deve ser configurar usuários em mysql.user de tal maneira que USER() e CURRENT_USER() tenham saída idêntica ou pelo menos o mais específico possível para o host.

    
por 05.12.2012 / 16:15
0

O cliente MySQL conecta-se ao arquivo de soquete se nenhum nome de host for especificado (ou se hostname do host local for especificado usando -hlocalhost , mesmo se você especificar uma porta. Então, ao tentar se conectar ao banco de dados remoto usando mysql -u -p -P9906 , você está na verdade, tentando acessar a sua instância local do servidor MySQL. Digite SHOW DATABASES e sua lista de bancos de dados locais será impressa.

Portanto, para acessar a instância remota por meio do encaminhamento de porta, é necessário especificar o host (127.0.0.1) para evitar a conexão com o arquivo de soquete.

Aqui está a documentação do MySQL :

On Unix, MySQL programs treat the host name localhost specially, in a way that is likely different from what you expect compared to other network-based programs. For connections to localhost, MySQL programs attempt to connect to the local server by using a Unix socket file. This occurs even if a --port or -P option is given to specify a port number. To ensure that the client makes a TCP/IP connection to the local server, use --host or -h to specify a host name value of 127.0.0.1, or the IP address or name of the local server. You can also specify the connection protocol explicitly, even for localhost, by using the --protocol=TCP option.

    
por 05.12.2012 / 16:43