Como posso fazer com que o cliente MySQL leia a senha no mylogin.cnf?

11

Estou tentando fazer com que o cliente mysql se conecte a um servidor mysql sem exigir que a senha seja fornecida interativamente. Passos dados:

1) Primeiro crie um arquivo mylogin.cnf

$ mysql_config_editor set --user=<user> --password --host=<host>
Enter password:

2) Arquivo criado com sucesso:

$ ls -la .mylogin.cnf
-rw-------. 1 urmt urmt  136 Dec 19 11:01 .mylogin.cnf
$ mysql_config_editor print --all
[client]
user = <user>
password = *****
host = <host>

3) Conecte-se usando o cliente mysql

$ mysql <dbname>
ERROR 1045 (28000): Access denied for user '<user>'@'<host>' (using password: NO)

Existe um valor / configuração padrão em algum lugar que faz o cliente ignorar a senha no mylogin.cnf? As propriedades do usuário e do host foram lidas corretamente no arquivo.

Consigo me conectar muito bem se eu fornecer a senha na linha de comando:

$ mysql -p <dbname>
Enter password: 
Reading table information...
...
mysql> 

A versão do cliente MySQL é 5.6.22, a versão do MySQL Server é 5.6.22, no Oracle Linux 6. O cliente e o servidor estão em hosts diferentes.

obrigado

Lefteris Koutsoloukas
fonte

Respostas:

2

De qualquer maneira, você provavelmente terá uma senha salva em algum lugar. Até o caminho de login do MySQL 5.6 é facilmente descriptografado por qualquer pessoa com motivação. Esse aviso dizia que essa seria uma solução fácil.

No script do seu ambiente (por exemplo, ~/.profileou ~/.bashrc), defina

alias mysql='mysql -uUser -pPasswd -hHostname'

(colocando seu usuário, senha e nome de host desejados, é claro.)

Após o logon do shell, você poderá simplesmente fazer

mysql

... que usará seu alias e se conectará ao banco de dados e ignorará todas as senhas nos .my.cnfarquivos.

Nota de segurança: Se houver outros usuários em seu servidor, convém chmod 700 seu script de perfil para que a senha não seja tão facilmente acessada por outros. Qualquer administrador com root ou sudo poderá vê-lo ainda; não há maneira de contornar isso.

Joshua Huber
fonte
Esta é uma solução alternativa para o problema real, mas estou bem. Aceito esta resposta com o aviso aos futuros leitores de que a maneira correta de fazer isso é a resposta Nawaz, mas isso não funciona no meu ambiente por um motivo desconhecido. Obrigado!
Lefteris Koutsoloukas 02/03
11
-1 isso não responde à consulta do OP nem evita armazenar uma senha em um arquivo. a senha agora está armazenada em .profile em vez de .mylogin.cnf. Mas agora a senha é exibida pelo comando ps.
miracle173
@miracle, valide sua reivindicação de que o ps revelará a senha. Nos meus sistemas, a senha mostra mascarada como xxxxxxx na saída ps. Se o seu cliente MySQL não estiver agindo como o meu, por favor, poste qual versão e distribuição do mysql você está executando. E você tem uma resposta melhor para a pergunta real do OP?
Joshua Huber
2
@joshua: Diretrizes do usuário final para segurança de senha : "Use uma opção -pyour_passou --password=your_passna linha de comando (...) Isso é conveniente, mas não é seguro ."
miracle173
10

use o seguinte comando para definir o caminho de login primeiro

mysql_config_editor set --login-path = lgpath --user = root -p
senha

e então use o comando abaixo para entrar no mysql

mysql --login-path = lgpath

A ajuda sobre as opções do caminho de login do mysql pode ser vista por

mysql_config_editor set --help

Nawaz Sohail
fonte
Tentei definir um caminho de login explicitamente como você sugeriu, mas infelizmente ele tem o mesmo comportamento: $ mysql_config_editor print --all [lgpath] user = <user> senha = ***** host = <host> $ mysql --login -path = lgpath ERRO 1045 (28000): acesso negado para o usuário '<usuário>' @ '<host>' (usando a senha: NO)
Lefteris Koutsoloukas
3

Eu tive o mesmo problema que o OP, mas as respostas neste tópico me confundiram. O link de Vinay Mandala realmente funcionou para mim. Republicado aqui para maior clareza.

Meu problema:

ERROR 1045 (28000): Access denied for user '<user>'@'<host>' (using password: NO)

Isso prova que mysql_config_editornão trata caracteres especiais na senha corretamente.

Solução:

Quando mysql_config_editora senha for solicitada, certifique-se de colocar a senha entre aspas duplas (") . Depois, você poderá fazer login corretamente.

quexy
fonte
1

Eu estava recebendo esse erro, exceto pelo que dizia (usando a senha: SIM)

O motivo mencionado por Giovanni foi por causa de um "#" na senha. Descobri que uma solução alternativa é inserir aspas em sua senha quando solicitado. A mesma restrição existe com senhas de texto sem formatação usando .my.cnf.

Gamorten
fonte
0

A resposta Nawaz está correta. Eu tenho pouco a acrescentar. Sugiro que você faça algumas tentativas com a variável de ambiente MYSQL_TEST_LOGIN_FILE para criar um novo arquivo de configuração, apenas no caso de o arquivo padrão estar corrompido. Use também --no-defaultspara pular .cnfarquivos. Se a senha contiver o caractere #, mysql login-pathnão funcionará.

$ export MYSQL_TEST_LOGIN_FILE=$HOME/mylogin.cnf

$ mysql_config_editor set --login-path=mytest --host=127.0.0.1 --port=5622 --user=mytest --password
Enter password:

$ ls -l $MYSQL_TEST_LOGIN_FILE
-rw------- 1 mysql mysql 288 Feb 27 14:25 mylogin.cnf

$ mysql --no-defaults --login-path=mytest test
Giovanni
fonte
Essa variável de ambiente não foi configurada. Eu defini, mas tenho exatamente o mesmo comportamento. Ele ignorou a senha no mylogin.cnf.
Lefteris Koutsoloukas 02/03
Tem certeza de que é o usuário que executa o mysqlcomando exec mysql? Se não, alterar o proprietário do mylogin.cnfe deve obras :)
Iazel
0

Estou com um problema semelhante ao do pôster original. Suspeito que tenha a ver com caracteres na senha que não são criptografados / descriptografados corretamente.

Para confirmar, tente alterar a senha para algo simples e veja se esse problema desaparece.

Plazgoth
fonte
Eu tive o mesmo problema. Como Plazgoth apontou, eu tinha um caractere especial na senha e não estava funcionando. O que funcionou para mim é a sugestão de que o usuário bglad neste pós
Vinay Mandala
0

Eu tive esse problema com um script de shell. Meu script estava alterando o valor $ HOME e isso fez com que o --login-path = *** parecesse ser ignorado. Quando parei de alterar o valor $ HOME, ele começou a funcionar.

dbCarl
fonte
0

OBSERVAÇÃO se você estiver tentando executar o usuáriopath sob o Linux root - Você não pode simplesmente usá-lo sudo. Você deve fazer login como root IE

user@server:$ sudo su
user@server:$ Enter Password
root@server:$ mysql_config_editor set --login-path=data-main --user=<user> --password --host=<host>
root@server:$ Enter Password
root@server:$ exit
user@server:$ ...

Também como mencionado em outras postagens aqui .. Você deve usar aspas duplas em sua mysqlsenha se ela contiver algo além de caracteres alfanuméricos.

Zak
fonte