Eu configurei o encaminhamento de porta 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>
Estou tendo o erro a seguir:
ERRO 1045 (28000): Acesso negado para o usuário '' @ 'localhost' (usando a senha: YES)
Por que esse comportamento?
Eu tentei definir o encaminhamento de porta para ambos localhost, bem como 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.
my.ini
. Isto existe? Está no lugar correto e acessível? Você mudou alguma coisa relacionada ao nome do host?Respostas:
Existem quatro (4) CENÁRIOS para prestar atenção
CENÁRIO 1
Quando você especificar,
-P<port number>
você deve estar usando o 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:
e do jeito que você tentou fazer o login
Você atingiu o CENÁRIO # 4
SUGESTÃO
Em
mysql.user
, verifique se você temuser@localhost
(Está bem)[email protected]
, (Está bem)user@%
(não recomendado mas pode fazer)com a mesma senha (ou senhas diferentes se desejado)
Depois de conseguir fazer o login com êxito, execute esta consulta
USER () relata como você tentou autenticar no MySQL
CURRENT_USER () relata como você foi autorizado a autenticar no MySQL
Adicionar o usuário certo permite autenticar corretamente. Seu objetivo deve ser o de usuários de configuração no
mysql.user
de tal forma queUSER()
eCURRENT_USER()
tem saída idêntica ou pelo menos como possível específico do host.fonte
@'localhost'
,@'127.0.0.1'
ou@'%'
, mas o fato de o MySQL se conectar através do arquivo de soquete ao usar o host local, como expliquei na minha resposta abaixo.O cliente MySQL conecta-se ao arquivo de soquete se nenhum nome de host for especificado (ou se hostname de host local for especificado usando
-hlocalhost
, mesmo que você especifique uma porta. Então, quando você tenta se conectar ao banco de dados remoto usandomysql -u -p -P9906
, você está realmente tentando acessar seu servidor MySQL local DigiteSHOW 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 :
fonte