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 solicitam senha. De que maneira correta enviar a senha stdin
?
-p
e sua senha./proc
pode lê-las trivialmente enquanto o programa estiver em execução . É para isso que~/.my.cnf
serve, devidamente modificado para 0600Respostas:
Você precisa ter muito cuidado ao passar senhas para linhas de comando, pois, se não tomar cuidado, acabará deixando-o aberto 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
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 no primeiro, apenas o arquivo passado como argumento é usado.
Seu arquivo de configuração adicional deve conter algo semelhante a:
Certifique-se de proteger esse arquivo.
Então corra:
fonte
argv
para sobrescrever os parâmetros dados à-p
flag. Pelo menos é o que está concluído aqui, junto com outras informações relevantes: unix.stackexchange.com/questions/78757/…--login-path
agora que é suportada. Não é muito melhor que isso, mas é um pouco menos de texto sem formatação (embora a barreira para converter o conteúdo em texto sem formatação seja baixa).export MYSQL_PWD=muhpassword
) e execute seu comando sem o-p
. Veja Variáveis de Ambiente do Programa MySQL . Apesar dos terríveis avisos do manual , isso é bastante seguro . A menos que você comece warez estranho no mesmo shell mais tarde. Então nós corremos:MYSQL_PWD=$(cat foo.php etc) mysql -u foouser -h barhost
O
mysql
utilitário do cliente pode usar uma senha na linha de comando com as opções-p
ou--password=
.Se você usar
-p
, não deve haver nenhum espaço em branco após a letra da opção:Eu prefiro as opções longas nos scripts, pois são auto-documentadas:
fonte
/proc/$pid/cmdline
ou através dops
comando. É verdade que o mysql sobrescreve a senha em argv durante a inicialização, mas sempre há uma janela de tempo em que outro usuário pode observar a senha. Além disso, em alguns sistemas, a substituição do argv pode não funcionar.Se você deseja iniciar
mysql
com uma senha fornecida, é necessário buscar a senha em uma variável primeiro:Então você pode iniciar seu
mysql
comando com:fonte
MYSQL_PWD
variável de ambiente que é lidamysql
se você não especificar-p
. E, no Linux, esse é um método seguro, porque o ambiente de um usuário não pode ser lido por outros usuários sem privilégios - em contraste com o vetor de argumento.