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

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.


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


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.


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.


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

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.


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.


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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.