Como passar a senha para a linha de comando do mysql

10

Eu tenho a senha do MySQL salva em um arquivo foo.php , por exemplo P455w0rd , quando tento usá-la:

$ cat foo.php | grep '$dbpwd=' | cut -d '"' -f 2 | mysql -U root -p mydb -h friendserver
Enter password: (holds)

$ echo P455w0rd | mysql -u root -p mydb -h friendserver
Enter password: (holds)

Ambas as opções ainda pedem senha, qual é a maneira correta de enviar a senha de stdin ?

    
por Kokizzu 23.05.2015 / 07:09

3 respostas

19

Você precisa ter muito cuidado ao passar as senhas para as linhas de comando, já que, se não tomar cuidado, acabará deixando-as abertas para farejar usando ferramentas como ps .

A maneira mais segura de fazer isso seria criar um novo arquivo de configuração e passá-lo para mysql usando a opção de linha de comando --defaults-file= ou --defaults-extra-file= .

A diferença entre os dois é que o último é lido além dos arquivos de configuração padrão, enquanto que, com o primeiro, apenas o arquivo é passado conforme o argumento é usado.

Seu arquivo de configuração adicional deve conter algo semelhante a:

[client]
user=foo
password=P@55w0rd

Certifique-se de proteger este arquivo.

Em seguida, execute:

mysql --defaults-extra-file=<path to the new config file> [all my other options]
    
por 23.05.2015 / 07:48
7

O utilitário mysql do cliente pode obter uma senha na linha de comando com as opções -p ou --password= .

Se você usar -p , não deverá haver nenhum espaço em branco após a carta de opção:

$ mysql -pmypassword

Eu prefiro as opções longas em scripts, pois elas são auto-documentadas:

mysql --password=mypassword --user=me --host=etc
    
por 23.01.2017 / 14:38
2

Se você quiser iniciar mysql com uma senha, contanto que você tenha que buscar a senha em uma variável primeiro:

MYSQLPASS='cat foo.php | grep '$dbpwd=' | cut -d '"' -f 2'

Então você pode iniciar seu comando mysql com:

mysql -U root -p ${MYSQLPASS} mydb -h friendserver
    
por 23.05.2015 / 08:38