Conecte-se ao MySQL através da linha de comando sem precisar de senha root

11

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 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 recebo 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 para o PostgreSQL.

    
por ReynierPM 15.06.2012 / 21:42

5 respostas

22

Tanto para o MySQL quanto para o 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 em seu diretório pessoal (por exemplo, ~ / .my.cnf).

.my.cnf:

[mysql]
user=user
password=password

.pgpass:

host:port:database:user:password

Você pode ter uma entrada curinga aqui, substituindo qualquer campo por *******.

PS: NÃO ESPECIFICAR NENHUM SENHA NA LINHA DE COMANDO! Isso pode ser perfeitamente visível com ps se o seu sistema não estiver configurado para não mostrar processos que pertençam a outros usuários.

@thinice: Se você quiser criar esses arquivos realmente seguros, faça:

umask 077
touch .my.new.config
umask 022 # or whatever was your default

Dessa forma, o arquivo seria criado com permissões seguras desde o início e nenhum interceptador teria a chance de colocar sua senha.

O PostgreSQL se recusará a usar o arquivo com permissões superiores a 0600 de qualquer maneira.

    
por 15.06.2012 / 22:08
2
MYSQL_USER="root"
MYSQL_PASSWORD="PASSWORD"
DBNAME="DB_NAME"

mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -e "CREATE DATABASE $DBNAME;" 2> /tmp/error1

STATUS=$? 
if [ $STATUS -eq 0 ];
then 
    echo -e "Database '$DBNAME' is created"
elif (grep -i "^ERROR 1007" /tmp/error1 > /dev/null);
then
    echo -e "Database '$DBNAME' already exists"
else
    echo -e "Failed to create database '$DBNAME'"
fi

rm -r /tmp/error1 

Isso fará o truque Obrigado

    
por 22.06.2012 / 14:14
1
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

tenha certeza de como você escreve o seu passe e ele não escapa

- defaults-extra-file = é uma coisa boa (tm) (c)

    
por 16.06.2012 / 03:08
1

Não coloque aspas em torno da senha, porque se você fizer as aspas são consideradas parte da senha.

    
por 16.06.2012 / 14:02
1
mysql_config_editor set --login-path=storedPasswordKey --host=localhost --user=root --password

Como executo uma linha de comando com uma senha segura? use o editor de configuração !!!

A partir do mysql 5.6.6 você pode armazenar a senha em um arquivo de configuração e então executar comandos cli como este ....

mysql --login-path=storedPasswordKey ....

- login-path substitui variáveis ... host, usuário e senha. excelente né!

    
por 19.02.2015 / 14:25