Estou criando um script Bash para algumas tarefas. Uma dessas tarefas é criar um banco de dados MySQL a partir do mesmo script bash. O que estou fazendo agora é criar dois vars: um para o nome de usuário da loja e o outro para a senha da loja. Esta é a parte relevante do meu script:
MYSQL_USER=root
MYSQL_PASS=mypass_goes_here
touch /tmp/$PROY.sql && echo "CREATE DATABASE $DB_NAME;" > /tmp/script.sql
mysql --user=$MYSQL_USER --password="$MYSQL_PASS" < /tmp/script.sql
rm -rf /tmp/script.sql
Mas sempre receba um erro dizendo que o acesso foi negado para o usuário root com NO PASSWORD, o que estou fazendo de errado? Eu preciso fazer o mesmo no PostgreSQL.
linux
mysql
bash
postgresql
shell-scripting
ReynierPM
fonte
fonte
echo "$MYSQL_PASS"
antes de passá-lo para amysql
linha. Ele tem a senha correta?ps wwaux
.Respostas:
Tanto no MySQL quanto no PostgreSQL, você pode especificar seu usuário e senha no arquivo de configuração local. .my.cnf para MySQL e .pgpass para PostgreSQL. Esses arquivos devem estar no seu diretório pessoal (por exemplo, ~ / .my.cnf).
.my.cnf:
.pgpass:
Você pode ter uma entrada curinga aqui, substituindo qualquer campo por *******.
PS: NUNCA ESPECIFIQUE UMA SENHA NA LINHA DE COMANDO! Isso pode ser perfeitamente visível com o ps se o seu sistema não estiver configurado para não mostrar processos que pertencem a outros usuários.
@ thinice: Se você deseja criar esses arquivos realmente seguros, deve fazer:
Dessa forma, o arquivo seria criado com permissões seguras desde o início e nenhum interceptador teria a chance de leeching sua senha.
O PostgreSQL se recusará a usar o arquivo com permissões maiores que 0600 de qualquer maneira.
fonte
--defaults-extra-file=filename
. Isso pode ser útil se você deseja colocá-lo em algum lugar fora do padrão ou apenas criar um arquivo temporário. É suspeito que seja uma opção semelhante ao PostgreSQL, mas não estou familiarizado com isso.0600
Isso fará o truque Obrigado
fonte
Como executo uma linha de comando com uma senha segura? use o editor de configuração !!!
No mysql 5.6.6, você pode armazenar a senha em um arquivo de configuração e executar comandos cli como este ....
--login-path substitui variáveis ... host, usuário E senha. excelente né!
fonte
certifique-se de como você escreve seu passe e ele não escapa
--defaults-extra-file = é uma coisa boa (tm) (c)
fonte
Não coloque aspas na senha, porque se você fizer as aspas, isso será considerado parte da senha.
fonte
Pergunta semelhante existe no StackOverflow.
Para resumir minha resposta a partir daí.
Você pode
export MYSQL_PWD=yourverysecretpassword
.A vantagem desse método em relação ao uso de um arquivo de configuração é que você não precisa de um arquivo de configuração separado para manter a sincronização com seu script. Você só tem o script para manter.
Não há desvantagem nesse método.
A senha não está visível para outros usuários no sistema (seria visível se estiver na linha de comando). As variáveis de ambiente são visíveis apenas para o usuário que executa o comando mysql e root.
A senha também estará visível para qualquer pessoa que possa ler o próprio script, portanto, verifique se o próprio script está protegido. Isso não é diferente de proteger um arquivo de configuração. Você ainda pode originar a senha de um arquivo separado se desejar que o script possa ser lido publicamente (
export MYSQL_PWD=$(cat /root/mysql_password)
por exemplo). Ainda é mais fácil exportar uma variável do que criar um arquivo de configuração.Por exemplo,
fonte